summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/battlemap/game-logic/bm_next_turn.erl')
-rw-r--r-- | src/battlemap/game-logic/bm_next_turn.erl | 108 |
1 files changed, 61 insertions, 47 deletions
diff --git a/src/battlemap/game-logic/bm_next_turn.erl b/src/battlemap/game-logic/bm_next_turn.erl index abe286e..79cea14 100644 --- a/src/battlemap/game-logic/bm_next_turn.erl +++ b/src/battlemap/game-logic/bm_next_turn.erl @@ -16,20 +16,27 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec set_player_turn_to_next (bm_battle:type()) -> bm_battle:type(). +-spec set_player_turn_to_next (bm_battle:type()) + -> {bm_battle:type(), sh_db_query:op()}. set_player_turn_to_next (Battle) -> Players = bm_battle:get_players(Battle), CurrentPlayerTurn = bm_battle:get_current_player_turn(Battle), NextPlayerTurn = bm_player_turn:next(array:size(Players), CurrentPlayerTurn), - bm_battle:set_current_player_turn(NextPlayerTurn, Battle). + UpdatedBattle = bm_battle:set_current_player_turn(NextPlayerTurn, Battle), --spec reset_next_player_timeline - ( - bm_battle:type() - ) - -> {bm_battle:type(), bm_player:type()}. + DBQuery = + sh_db_query:set_field + ( + bm_battle:get_current_player_turn_field(), + NextPlayerTurn + ), + + {UpdatedBattle, DBQuery}. + +-spec reset_next_player_timeline (bm_battle:type()) + -> {bm_battle:type(), bm_player:type(), sh_db_query:op()}. reset_next_player_timeline (Battle) -> NextPlayerTurn = bm_battle:get_current_player_turn(Battle), NextPlayerIX = bm_player_turn:get_player_ix(NextPlayerTurn), @@ -39,21 +46,25 @@ reset_next_player_timeline (Battle) -> UpdatedBattle = bm_battle:set_player(NextPlayerIX, UpdatedNextPlayer, Battle), - {UpdatedBattle, UpdatedNextPlayer}. + DBQuery = + sh_db_query:update_indexed + ( + bm_battle:get_players_field(), + NextPlayerIX, + [ sh_db_query:set_field(bm_player:get_timeline_field(), []) ] + ), + {UpdatedBattle, UpdatedNextPlayer, DBQuery}. --spec activate_next_players_characters - ( - bm_battle:type(), - bm_player:type() - ) - -> {bm_battle:type(), list(non_neg_integer())}. + +-spec activate_next_players_characters (bm_battle:type(), bm_player:type()) + -> {bm_battle:type(), list(sh_db_query:op())}. activate_next_players_characters (Battle, NextPlayer) -> NextPlayerID = bm_player:get_id(NextPlayer), Characters = bm_battle:get_characters(Battle), {UpdatedCharacters, ModifiedIXs} = - array_util:mapiff + sh_array_util:mapiff ( fun (Character) -> (bm_character:get_owner_id(Character) == NextPlayerID) @@ -64,33 +75,29 @@ activate_next_players_characters (Battle, NextPlayer) -> Characters ), - UpdatedBattle = bm_battle:set_characters(UpdatedCharacters, Battle), + DBQueries = + lists:map + ( + fun (IX) -> + sh_db_query:update_indexed + ( + bm_battle:get_characters_field(), + IX, + [ + sh_db_query:set_field + ( + bm_character:get_active_field(), + true + ) + ] + ) + end, + ModifiedIXs + ), - {UpdatedBattle, ModifiedIXs}. + UpdatedBattle = bm_battle:set_characters(UpdatedCharacters, Battle), --spec add_activation_updates - ( - list(non_neg_integer()), - bm_character_turn_update:type() - ) - -> bm_character_turn_update:type(). -add_activation_updates ([], Update) -> - Update; -add_activation_updates ([IX|NextIXs], Update) -> - add_activation_updates - ( - NextIXs, - bm_character_turn_update:add_to_db - ( - sh_db_query:update_indexed - ( - bm_battle:get_characters_field(), - IX, - [sh_db_query:set_field(bm_character:get_active_field(), true)] - ), - Update - ) - ). + {UpdatedBattle, DBQueries}. -spec update ( @@ -101,16 +108,23 @@ update (Update) -> Data = bm_character_turn_update:get_data(Update), Battle = bm_character_turn_data:get_battle(Data), - S0Battle = set_player_turn_to_next(Battle), - {S1Battle, NextPlayer} = reset_next_player_timeline(S0Battle), - {S2Battle, ActivatedCharactersIX} = + {S0Battle, DBQuery0} = set_player_turn_to_next(Battle), + {S1Battle, NextPlayer, DBQuery1} = reset_next_player_timeline(S0Battle), + {S2Battle, DBQueries} = activate_next_players_characters(S1Battle, NextPlayer), - S0Update = add_activation_updates(ActivatedCharactersIX, Update), + S0Data = bm_character_turn_data:set_battle(S2Battle, Data), + S0Update = bm_character_turn_update:set_data(S0Data, Update), - UpdatedData = bm_character_turn_data:set_battle(S2Battle, Data), + S1Update = + lists:foldl + ( + fun bm_character_turn_update:add_to_db/2, + S0Update, + [DBQuery0|[DBQuery1|DBQueries]] + ), - bm_character_turn_update:set_data(UpdatedData, S0Update). + S1Update. -spec requires_update (bm_character_turn_update:type()) -> boolean(). requires_update (Update) -> @@ -118,7 +132,7 @@ requires_update (Update) -> Battle = bm_character_turn_data:get_battle(Data), Characters = bm_battle:get_characters(Battle), - array_util:none(fun bm_character:get_is_active/1, Characters). + sh_array_util:none(fun bm_character:get_is_active/1, Characters). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |