summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-12-21 17:23:56 +0100
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-12-21 17:23:56 +0100
commita81ff643a823dde57ebd0ed5da8a91fb75d32267 (patch)
treedc7dd9e17bb380d05d446b10e7630db340c5998e /src/battle/game-logic
parentc69fe90821bba84c70b020a2504fe4ed63072158 (diff)
Removes any use of arrays.
Diffstat (limited to 'src/battle/game-logic')
-rw-r--r--src/battle/game-logic/btl_next_turn.erl67
-rw-r--r--src/battle/game-logic/btl_turn_actions.erl2
-rw-r--r--src/battle/game-logic/btl_turn_actions_attack.erl4
-rw-r--r--src/battle/game-logic/btl_turn_actions_move.erl11
-rw-r--r--src/battle/game-logic/btl_turn_actions_switch_weapon.erl2
-rw-r--r--src/battle/game-logic/btl_victory.erl136
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