| 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/game-logic | |
| parent | c69fe90821bba84c70b020a2504fe4ed63072158 (diff) | |
Removes any use of arrays.
Diffstat (limited to 'src/battle/game-logic')
| -rw-r--r-- | src/battle/game-logic/btl_next_turn.erl | 67 | ||||
| -rw-r--r-- | src/battle/game-logic/btl_turn_actions.erl | 2 | ||||
| -rw-r--r-- | src/battle/game-logic/btl_turn_actions_attack.erl | 4 | ||||
| -rw-r--r-- | src/battle/game-logic/btl_turn_actions_move.erl | 11 | ||||
| -rw-r--r-- | src/battle/game-logic/btl_turn_actions_switch_weapon.erl | 2 | ||||
| -rw-r--r-- | src/battle/game-logic/btl_victory.erl | 136 | 
6 files changed, 123 insertions, 99 deletions
diff --git a/src/battle/game-logic/btl_next_turn.erl b/src/battle/game-logic/btl_next_turn.erl index a0ea499..ed6eadd 100644 --- a/src/battle/game-logic/btl_next_turn.erl +++ b/src/battle/game-logic/btl_next_turn.erl @@ -50,7 +50,7 @@ reset_next_player_timeline (Battle) ->        ataxic:update_field        (           btl_battle:get_players_field(), -         ataxic_sugar:update_array_cell +         ataxic_sugar:update_orddict_element           (              NextPlayerIX,              ataxic:update_field @@ -70,15 +70,36 @@ activate_next_players_characters (Battle, NextPlayer) ->     NextPlayerIX = btl_player:get_index(NextPlayer),     Characters = btl_battle:get_characters(Battle), -   {UpdatedCharacters, ModifiedIXs} = -      shr_array_util:mapiff +   {UpdatedCharacters, AtaxicUpdates} = +      orddict:fold        ( -         fun (Character) -> -            (btl_character:get_player_index(Character) == NextPlayerIX) -         end, -         fun (Character) -> -            btl_character:set_is_active(true, Character) +         fun (IX, Character, {Prev, Updates}) -> +            case (btl_character:get_player_index(Character) == NextPlayerIX) of +               true -> +                  { +                     orddict:store +                     ( +                        IX, +                        btl_character:set_is_active(true, Character), +                        Prev +                     ), +                     [ +                        ataxic_sugar:update_orddict_element +                        ( +                           IX, +                           ataxic:update_field +                           ( +                              btl_character:get_is_active_field(), +                              ataxic:constant(true) +                           ) +                        ) +                     ] +                  }; + +               false -> {Prev, Updates} +            end           end, +         {Characters, []},           Characters        ), @@ -86,24 +107,7 @@ activate_next_players_characters (Battle, NextPlayer) ->        ataxic:update_field        (           btl_battle:get_characters_field(), -         ataxic:sequence -         ( -            lists:map -            ( -               fun (IX) -> -                  ataxic_sugar:update_array_cell -                  ( -                     IX, -                     ataxic:update_field -                     ( -                        btl_character:get_is_active_field(), -                        ataxic:constant(true) -                     ) -                  ) -               end, -               ModifiedIXs -            ) -         ) +         ataxic:sequence(AtaxicUpdates)        ),     UpdatedBattle = btl_battle:set_characters(UpdatedCharacters, Battle), @@ -154,7 +158,16 @@ requires_update (Update) ->     Battle = btl_character_turn_data:get_battle(Data),     Characters = btl_battle:get_characters(Battle), -   shr_array_util:none(fun btl_character:get_is_active/1, Characters). +   (not +      (lists:any +         ( +            fun ({_IX, Char}) -> +               btl_character:get_is_active(Char) +            end, +            orddict:to_list(Characters) +         ) +      ) +   ).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/battle/game-logic/btl_turn_actions.erl b/src/battle/game-logic/btl_turn_actions.erl index ee39ba1..4e469f1 100644 --- a/src/battle/game-logic/btl_turn_actions.erl +++ b/src/battle/game-logic/btl_turn_actions.erl @@ -46,7 +46,7 @@ mod_current_health (CurrentMaxHealth, PreviousMaxHealth, Update) ->        ataxic:update_field        (           btl_battle:get_characters_field(), -         ataxic_sugar:update_array_cell +         ataxic_sugar:update_orddict_element           (              CharacterIX,              ataxic:update_field diff --git a/src/battle/game-logic/btl_turn_actions_attack.erl b/src/battle/game-logic/btl_turn_actions_attack.erl index 9d1cd87..52dd3fb 100644 --- a/src/battle/game-logic/btl_turn_actions_attack.erl +++ b/src/battle/game-logic/btl_turn_actions_attack.erl @@ -169,7 +169,7 @@ handle (BattleAction, Update) ->        ataxic:update_field        (           btl_battle:get_characters_field(), -         ataxic_sugar:update_array_cell +         ataxic_sugar:update_orddict_element           (              TargetIX,              ataxic:update_field @@ -184,7 +184,7 @@ handle (BattleAction, Update) ->        ataxic:update_field        (           btl_battle:get_characters_field(), -         ataxic_sugar:update_array_cell +         ataxic_sugar:update_orddict_element           (              CharacterIX,              ataxic:update_field diff --git a/src/battle/game-logic/btl_turn_actions_move.erl b/src/battle/game-logic/btl_turn_actions_move.erl index f94f8aa..80e5170 100644 --- a/src/battle/game-logic/btl_turn_actions_move.erl +++ b/src/battle/game-logic/btl_turn_actions_move.erl @@ -29,17 +29,18 @@ get_path_cost_and_destination (Data, Path) ->     Map = btl_battle:get_map(Battle),     ForbiddenLocations = -      array:foldl +      orddict:fold        (           fun (IX, Char, Prev) ->              IsAlive = btl_character:get_is_alive(Char),              if                 (IX == CharacterIX) -> Prev;                 (not IsAlive) -> Prev; -               true -> [btl_character:get_location(Char)|Prev] +               true -> +                  ordsets:add_element(btl_character:get_location(Char), Prev)              end           end, -         [], +         ordsets:new(),           btl_battle:get_characters(Battle)        ), @@ -97,12 +98,12 @@ commit_move (PreviousCurrentData, Update, Path, NewLocation) ->        ataxic:update_field        (           btl_battle:get_characters_field(), -         ataxic_sugar:update_array_cell +         ataxic_sugar:update_orddict_element           (              CharacterIX,              ataxic:update_field              ( -               btl_character:get_locatiupdate_field(), +               btl_character:get_location_field(),                 ataxic:constant(NewLocation)              )           ) diff --git a/src/battle/game-logic/btl_turn_actions_switch_weapon.erl b/src/battle/game-logic/btl_turn_actions_switch_weapon.erl index 264bcb5..e32a283 100644 --- a/src/battle/game-logic/btl_turn_actions_switch_weapon.erl +++ b/src/battle/game-logic/btl_turn_actions_switch_weapon.erl @@ -54,7 +54,7 @@ handle (Update) ->        ataxic:update_field        (           btl_battle:get_characters_field(), -         ataxic_sugar:update_array_cell +         ataxic_sugar:update_orddict_element           (              CharacterIX,              ataxic:update_field diff --git a/src/battle/game-logic/btl_victory.erl b/src/battle/game-logic/btl_victory.erl index 42a5594..089af81 100644 --- a/src/battle/game-logic/btl_victory.erl +++ b/src/battle/game-logic/btl_victory.erl @@ -20,45 +20,45 @@  -spec mark_players_characters_as_defeated     (        non_neg_integer(), -      array:array(btl_character:type()) -   ) -> {array:array(btl_character:type()), list(non_neg_integer())}. +      orddict:orddict(non_neg_integer(), btl_character:type()) +   ) +   -> +   { +      orddict:orddict(non_neg_integer(), btl_character:type()), +      list(ataxic:basic()) +   }.  mark_players_characters_as_defeated (PlayerIX, Characters) -> -   shr_array_util:mapiff +   orddict:fold     ( -      fun (Character) -> -         (btl_character:get_player_index(Character) == PlayerIX) -      end, -      fun (Character) -> -         btl_character:set_is_defeated(true, Character) +      fun (IX, Character, {Dict, Updates}) -> +         case (btl_character:get_player_index(Character) == PlayerIX) of +            false -> {Dict, Updates}; +            true -> +               { +                  orddict:store +                  ( +                     IX, +                     btl_character:set_is_defeated(true, Character), +                     Dict +                  ), +                  [ +                     ataxic_sugar:update_orddict_element +                     ( +                        IX, +                        ataxic:update_field +                        ( +                           btl_character:get_is_defeated_field(), +                           ataxic:constant(true) +                        ) +                     ) +                  ] +               } +         end        end, +      {Characters, []},        Characters     ). --spec add_db_query_to_mark_character_as_defeated -   ( -      non_neg_integer(), -      btl_character_turn_update:type() -   ) -   -> btl_character_turn_update:type(). -add_db_query_to_mark_character_as_defeated (IX, Update) -> -   btl_character_turn_update:add_to_db -   ( -      ataxic:update_field -      ( -         btl_battle:get_characters_field(), -         ataxic_sugar:update_array_cell -         ( -            IX, -            ataxic:update_field -            ( -               btl_character:get_is_defeated_field(), -               ataxic:constant(true) -            ) -         ) -      ), -      Update -   ). -  -spec handle_player_defeat     (        non_neg_integer(), @@ -72,48 +72,59 @@ handle_player_defeat (PlayerIX, Update) ->     %% FIXME [FUNCTION: battle][MEDIUM]: The controlled character might slip     %% through. -   {UpdatedCharacters, ModifiedIXs} = +   {UpdatedCharacters, AtaxicUpdates} =        mark_players_characters_as_defeated(PlayerIX, Characters), -   S1Update = -      lists:foldl +   S0Battle = btl_battle:set_characters(UpdatedCharacters, Battle), +   S1Battle = +      btl_battle:set_player        ( -         fun add_db_query_to_mark_character_as_defeated/2, -         Update, -         ModifiedIXs +         PlayerIX, +         btl_player:set_is_active +         ( +            false, +            btl_battle:get_player(PlayerIX, S0Battle) +         ), +         S0Battle        ), -   %% TODO [FUNCTION: battle][MEDIUM]: Battle.player[PlayerIX].is_active <- -   %% false - -   UpdatedBattle = btl_battle:set_characters(UpdatedCharacters, Battle), -   UpdatedData = btl_character_turn_data:set_battle(UpdatedBattle, Data), -   S2Update = btl_character_turn_update:set_data(UpdatedData, S1Update), +   UpdatedData = btl_character_turn_data:set_battle(S1Battle, Data), +   S0Update = btl_character_turn_update:set_data(UpdatedData, Update),     DBQuery = -      ataxic:update_field +      ataxic:sequence        ( -         btl_battle:get_players_field(), -         ataxic_sugar:update_array_cell -         ( -            PlayerIX, +         [              ataxic:update_field              ( -               btl_player:get_is_active_field(), -               ataxic:constant(false) +               btl_battle:get_players_field(), +               ataxic_sugar:update_orddict_element +               ( +                  PlayerIX, +                  ataxic:update_field +                  ( +                     btl_player:get_is_active_field(), +                     ataxic:constant(false) +                  ) +               ) +            ), +            ataxic:update_field +            ( +               btl_battle:get_characters_field(), +               ataxic:sequence(AtaxicUpdates)              ) -         ) +         ]        ), -   S3Update = +   S1Update =        btl_character_turn_update:add_to_timeline        (           btl_turn_result:new_player_lost(PlayerIX),           DBQuery, -         S2Update +         S0Update        ), -   S3Update. +   S1Update.  -spec actually_handle_character_lost_health @@ -133,16 +144,16 @@ actually_handle_character_lost_health (CharIX, Update) ->        optional ->           %% Let's not assume there is a commander           StillHasAliveChar = -            shr_array_util:any_indexed +            lists:any              ( -               fun (IX, Char) -> +               fun ({IX, Char}) ->                    (                       (CharacterPlayerIX == btl_character:get_player_index(Char))                       and (IX /= CharIX)                       and btl_character:get_is_alive(Char)                    )                 end, -               Characters +               orddict:to_list(Characters)              ),           case StillHasAliveChar of @@ -154,17 +165,16 @@ actually_handle_character_lost_health (CharIX, Update) ->        target ->           StillHasAliveChar = -            shr_array_util:any_indexed +            lists:any              ( -               fun (IX, Char) -> +               fun ({IX, Char}) ->                    (                       (CharacterPlayerIX == btl_character:get_player_index(Char))                       and (IX /= CharIX)                       and btl_character:get_is_alive(Char) -                     and (btl_character:get_rank(Char) == target)                    )                 end, -               Characters +               orddict:to_list(Characters)              ),           case StillHasAliveChar of  | 


