| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2018-12-21 17:23:56 +0100 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2018-12-21 17:23:56 +0100 | 
| commit | a81ff643a823dde57ebd0ed5da8a91fb75d32267 (patch) | |
| tree | dc7dd9e17bb380d05d446b10e7630db340c5998e /src/battle/struct | |
| parent | c69fe90821bba84c70b020a2504fe4ed63072158 (diff) | |
Removes any use of arrays.
Diffstat (limited to 'src/battle/struct')
| -rw-r--r-- | src/battle/struct/btl_battle.erl | 156 | ||||
| -rw-r--r-- | src/battle/struct/btl_character.erl | 6 | ||||
| -rw-r--r-- | src/battle/struct/btl_map.erl | 43 | ||||
| -rw-r--r-- | src/battle/struct/btl_player_turn.erl | 13 | 
4 files changed, 155 insertions, 63 deletions
| diff --git a/src/battle/struct/btl_battle.erl b/src/battle/struct/btl_battle.erl index 5cc7bc3..b2bd4f1 100644 --- a/src/battle/struct/btl_battle.erl +++ b/src/battle/struct/btl_battle.erl @@ -3,7 +3,7 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --type id() :: binary(). +-type id() :: ataxia_id:type().  -record  ( @@ -12,10 +12,11 @@        id :: id(),        used_armor_ids :: ordsets:ordset(shr_armor:id()),        used_weapon_ids :: ordsets:ordset(shr_weapon:id()), +      used_portrait_ids :: ordsets:ordset(shr_portrait:id()),        used_tile_ids :: ordsets:ordset(shr_tile:class_id()),        map :: btl_map:type(), -      characters :: array:array(btl_character:type()), -      players :: array:array(btl_player:type()), +      characters :: orddict:orddict(non_neg_integer(), btl_character:type()), +      players :: orddict:orddict(non_neg_integer(), btl_player:type()),        current_player_turn :: btl_player_turn:type()     }  ). @@ -32,6 +33,7 @@  (     [        get_id/1, +      get_used_portrait_ids/1,        get_used_weapon_ids/1,        get_used_armor_ids/1,        get_used_tile_ids/1, @@ -43,13 +45,21 @@        get_current_player_turn/1,        get_encoded_last_turns_effects/1, +      set_id/2,        set_map/2, +      set_used_portrait_ids/2, +      set_used_weapon_ids/2, +      set_used_armor_ids/2,        set_characters/2,        set_character/3,        set_players/2,        set_player/3,        set_current_player_turn/2, +      get_id_field/0, +      get_used_armor_ids_field/0, +      get_used_weapon_ids_field/0, +      get_used_portrait_ids_field/0,        get_characters_field/0,        get_players_field/0,        get_current_player_turn_field/0 @@ -59,7 +69,7 @@  -export  (     [ -      new/7 +      new/1     ]  ). @@ -67,7 +77,7 @@  %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  get_all_timelines (Result, CurrentIndex, EndPoint, ArraySize, Players) -> -   Player = array:get(CurrentIndex, Players), +   Player = orddict:fetch(CurrentIndex, Players),     Timeline = btl_player:get_timeline(Player),     NextIndex = ((CurrentIndex + 1) rem ArraySize),     NextResult = (Timeline ++ Result), @@ -79,6 +89,7 @@ get_all_timelines (Result, CurrentIndex, EndPoint, ArraySize, Players) ->           get_all_timelines(NextResult, NextIndex, EndPoint, ArraySize, Players)     end. +  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -86,6 +97,9 @@ get_all_timelines (Result, CurrentIndex, EndPoint, ArraySize, Players) ->  -spec get_id (type()) -> id().  get_id (Battle) -> Battle#battle.id. +-spec get_used_portrait_ids (type()) -> ordsets:ordset(shr_portrait:id()). +get_used_portrait_ids (Battle) -> Battle#battle.used_portrait_ids. +  -spec get_used_weapon_ids (type()) -> ordsets:ordset(shr_weapon:id()).  get_used_weapon_ids (Battle) -> Battle#battle.used_weapon_ids. @@ -98,20 +112,28 @@ get_used_tile_ids (Battle) -> Battle#battle.used_tile_ids.  -spec get_map (type()) -> btl_map:type().  get_map (Battle) -> Battle#battle.map. --spec get_characters (type()) -> array:array(btl_character:type()). +-spec get_characters +   ( +      type() +   ) +   -> orddict:orddict(non_neg_integer(), btl_character:type()).  get_characters (Battle) -> Battle#battle.characters.  -spec get_character (non_neg_integer(), type()) -> btl_character:type().  get_character (IX, Battle) -> -   array:get(IX, Battle#battle.characters). +   orddict:fetch(IX, Battle#battle.characters). --spec get_players (type()) -> array:array(btl_player:type()). +-spec get_players +   ( +      type() +   ) +   -> orddict:orddict(non_neg_integer(), btl_player:type()).  get_players (Battle) ->     Battle#battle.players.  -spec get_player (non_neg_integer(), type()) -> btl_player:type().  get_player (IX, Battle) -> -   array:get(IX, Battle#battle.players). +   orddict:fetch(IX, Battle#battle.players).  -spec get_current_player_turn (type()) -> btl_player_turn:type().  get_current_player_turn (Battle) -> @@ -123,10 +145,17 @@ get_encoded_last_turns_effects (Battle) ->     Players = Battle#battle.players,     CurrentPlayerIX = btl_player_turn:get_player_ix(CurrentPlayerTurn), -   PlayersCount = array:size(Players), +   PlayersCount = orddict:size(Players),     StartingPoint = ((CurrentPlayerIX + 1) rem PlayersCount),     get_all_timelines([], StartingPoint, CurrentPlayerIX, PlayersCount, Players). +-spec set_id (id(), type()) -> type(). +set_id (ID, Battle) -> +   Battle#battle +   { +      id = ID +   }. +  -spec set_map (btl_map:type(), type()) -> type().  set_map (Map, Battle) ->     Battle#battle @@ -134,7 +163,12 @@ set_map (Map, Battle) ->        map = Map     }. --spec set_characters (array:array(btl_character:type()), type()) -> type(). +-spec set_characters +   ( +      orddict:orddict(non_neg_integer(), btl_character:type()), +      type() +   ) +   -> type().  set_characters (Characters, Battle) ->     Battle#battle     { @@ -145,33 +179,62 @@ set_characters (Characters, Battle) ->  set_character (IX, Character, Battle) ->     Battle#battle     { -      characters = -         array:set -         ( -            IX, -            Character, -            Battle#battle.characters -         ) +      characters = orddict:store(IX, Character, Battle#battle.characters)     }. --spec set_players (array:array(btl_player:type()), type()) -> type(). +-spec set_players +   ( +      orddict:orddict(non_neg_integer(), btl_player:type()), +      type() +   ) +   -> type().  set_players (Players, Battle) ->     Battle#battle     {        players = Players     }. +-spec set_used_portrait_ids +   ( +      ordsets:ordset(shr_portrait:id()), +      type() +   ) +   -> type(). +set_used_portrait_ids (UPIDs, Battle) -> +   Battle#battle +   { +      used_portrait_ids = UPIDs +   }. + +-spec set_used_weapon_ids +   ( +      ordsets:ordset(shr_weapon:id()), +      type() +   ) +   -> type(). +set_used_weapon_ids (UPIDs, Battle) -> +   Battle#battle +   { +      used_weapon_ids = UPIDs +   }. + +-spec set_used_armor_ids +   ( +      ordsets:ordset(shr_armor:id()), +      type() +   ) +   -> type(). +set_used_armor_ids (UPIDs, Battle) -> +   Battle#battle +   { +      used_armor_ids = UPIDs +   }. +  -spec set_player (non_neg_integer(), btl_player:type(), type()) -> type().  set_player (IX, Player, Battle) ->     Battle#battle     { -      players = -         array:set -         ( -            IX, -            Player, -            Battle#battle.players -         ) +      players = orddict:store(IX, Player, Battle#battle.players)     }.  -spec set_current_player_turn (btl_player_turn:type(), type()) -> type(). @@ -181,34 +244,39 @@ set_current_player_turn (PlayerTurn, Battle) ->        current_player_turn = PlayerTurn     }. --spec new -   ( -      id(), -      list(btl_player:type()), -      btl_map:type(), -      list(btl_character:type()), -      ordsets:ordset(shr_weapon:id()), -      ordsets:ordset(shr_armor:id()), -      ordsets:ordset(shr_tile:class_id()) -   ) -   -> type(). -new (ID, PlayersAsList, Map, CharactersAsList, UWIDs, UAIDs, UTIDs) -> +-spec new (btl_map:type()) -> type(). +new (Map) -> +   EmptySet = ordsets:new(), +   EmptyDict = orddict:new(), +     #battle     { -      id = ID, -      used_weapon_ids = UWIDs, -      used_armor_ids = UAIDs, -      used_tile_ids = UTIDs, +      id = ataxia_id:null(), +      used_portrait_ids = EmptySet, +      used_weapon_ids = EmptySet, +      used_armor_ids = EmptySet, +      used_tile_ids = btl_map:get_used_tile_ids(Map),        map = Map, -      characters = array:from_list(CharactersAsList), -      players = array:from_list(PlayersAsList), +      characters = EmptyDict, +      players = EmptyDict,        current_player_turn = btl_player_turn:new(0, 0)     }. +-spec get_id_field () -> non_neg_integer(). +get_id_field () -> #battle.characters.  -spec get_characters_field () -> non_neg_integer().  get_characters_field () -> #battle.characters. +-spec get_used_portrait_ids_field () -> non_neg_integer(). +get_used_portrait_ids_field () -> #battle.used_portrait_ids. + +-spec get_used_weapon_ids_field () -> non_neg_integer(). +get_used_weapon_ids_field () -> #battle.used_weapon_ids. + +-spec get_used_armor_ids_field () -> non_neg_integer(). +get_used_armor_ids_field () -> #battle.used_armor_ids. +  -spec get_players_field () -> non_neg_integer().  get_players_field () -> #battle.players. diff --git a/src/battle/struct/btl_character.erl b/src/battle/struct/btl_character.erl index 8c04cd8..84eecfb 100644 --- a/src/battle/struct/btl_character.erl +++ b/src/battle/struct/btl_character.erl @@ -56,7 +56,7 @@        get_rank_field/0,        get_weapons_field/0, -      get_locatiupdate_field/0, +      get_location_field/0,        get_current_health_field/0,        get_is_active_field/0,        get_is_defeated_field/0 @@ -255,8 +255,8 @@ new  get_rank_field () -> #character.rank.  -spec get_weapons_field() -> non_neg_integer().  get_weapons_field () -> #character.weapon_ids. --spec get_locatiupdate_field() -> non_neg_integer(). -get_locatiupdate_field () -> #character.location. +-spec get_location_field() -> non_neg_integer(). +get_location_field () -> #character.location.  -spec get_current_health_field() -> non_neg_integer().  get_current_health_field () -> #character.current_health.  -spec get_is_active_field() -> non_neg_integer(). diff --git a/src/battle/struct/btl_map.erl b/src/battle/struct/btl_map.erl index e4aa88b..17a272b 100644 --- a/src/battle/struct/btl_map.erl +++ b/src/battle/struct/btl_map.erl @@ -9,7 +9,7 @@     {        width :: integer(),        height :: integer(), -      tile_ids :: array:array(shr_tile:instance()) +      tile_ids :: shr_tile:instances_tuple()     }  ). @@ -27,7 +27,8 @@        get_width/1,        get_height/1,        get_tile_instances/1, -      get_tile_instance/2 +      get_tile_instance/2, +      get_used_tile_ids/1     ]  ). @@ -35,20 +36,20 @@  (     [        from_list/3, -      from_array/3 +      from_instances_tuple/3     ]  ).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec location_to_array_index +-spec location_to_index     (        non_neg_integer(),        btl_location:type()     )     -> ('error' | non_neg_integer()). -location_to_array_index (ArrayWidth, {X, Y}) -> +location_to_index (ArrayWidth, {X, Y}) ->     if        (X < 0) -> error;        (Y < 0) -> error; @@ -66,13 +67,13 @@ get_width (Map) -> Map#map.width.  -spec get_height (type()) -> integer().  get_height (Map) -> Map#map.height. --spec get_tile_instances (type()) -> array:array(shr_tile:instance()). +-spec get_tile_instances (type()) -> shr_tile:instances_tuple().  get_tile_instances (Map) -> Map#map.tile_ids.  -spec get_tile_instance (btl_location:type(), type()) -> shr_tile:instance().  get_tile_instance (Location, Map) -> -   TileIX = location_to_array_index(Map#map.width, Location), -   array:get(TileIX, Map#map.tile_ids). +   TileIX = location_to_index(Map#map.width, Location), +   element((TileIX + 1), Map#map.tile_ids).  -spec from_list     ( @@ -88,20 +89,38 @@ from_list (Width, Height, List) ->     {        width = Width,        height = Height, -      tile_ids = array:from_list(TileInstances) +      tile_ids = list_to_tuple(TileInstances)     }. --spec from_array +-spec from_instances_tuple     (        non_neg_integer(),        non_neg_integer(), -      array:array(shr_tile:instance()) +      shr_tile:instances_tuple()     )     -> type(). -from_array (Width, Height, TileInstances) -> +from_instances_tuple (Width, Height, TileInstances) ->     #map     {        width = Width,        height = Height,        tile_ids = TileInstances     }. + +-spec get_used_tile_ids (type()) -> ordsets:ordset(shr_tile:class_id()). +get_used_tile_ids (Map) -> +   UsedTileIDs = +      lists:foldl +      ( +         fun (TileInstance, CurrentTileIDs) -> +            ordsets:add_element +            ( +               shr_tile:extract_main_class_id(TileInstance), +               CurrentTileIDs +            ) +         end, +         ordsets:new(), +         tuple_to_list(Map#map.tile_ids) +      ), + +   UsedTileIDs. diff --git a/src/battle/struct/btl_player_turn.erl b/src/battle/struct/btl_player_turn.erl index e0665f4..6bd823f 100644 --- a/src/battle/struct/btl_player_turn.erl +++ b/src/battle/struct/btl_player_turn.erl @@ -43,14 +43,14 @@  -spec next_valid_player     (        non_neg_integer(), -      array:array(btl_player:type()), +      orddict:orddict(non_neg_integer(), btl_player:type()),        non_neg_integer(),        non_neg_integer()     ) -> non_neg_integer().  next_valid_player (StartingPoint, _Players, _PlayersCount, StartingPoint) ->     StartingPoint;  next_valid_player (CandidateIX, Players, PlayersCount, StartingPoint) -> -   Candidate = array:get(CandidateIX, Players), +   Candidate = orddict:fetch(CandidateIX, Players),     case btl_player:get_is_active(Candidate) of        true -> CandidateIX; @@ -82,11 +82,16 @@ get_number (PlayerTurn) -> PlayerTurn#player_turn.number.  -spec get_player_ix (type()) -> non_neg_integer().  get_player_ix (PlayerTurn) -> PlayerTurn#player_turn.player_ix. --spec next (array:array(btl_player:type()), type()) -> type(). +-spec next +   ( +      orddict:orddict(non_neg_integer(), btl_player:type()), +      type() +   ) +   -> type().  next (Players, CurrentPlayerTurn) ->     CurrentPlayerIX = CurrentPlayerTurn#player_turn.player_ix,     CurrentTurnNumber = CurrentPlayerTurn#player_turn.number, -   PlayersCount = array:size(Players), +   PlayersCount = orddict:size(Players),     NextPlayerIX =        next_valid_player | 


