summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2018-06-07 12:47:34 +0200
committernsensfel <SpamShield0@noot-noot.org>2018-06-07 12:47:34 +0200
commit9b55ecea81edbc12196a5818077fd38421f8f1a8 (patch)
treec6d590615695cacbb5a2a3f21fe20639292d134e /src/battlemap/game-logic/bm_next_turn.erl
parentd99f1e8b0efedf1286ab15c656a0ea874823865f (diff)
Now it seems to work perfectly.
Getting both nodes to start made some unexpected issues about the hostnames appear, despite both using either "-name" or "-sname".
Diffstat (limited to 'src/battlemap/game-logic/bm_next_turn.erl')
-rw-r--r--src/battlemap/game-logic/bm_next_turn.erl108
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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%