summaryrefslogtreecommitdiff |
diff options
author | nsensfel <SpamShield0@noot-noot.org> | 2018-06-07 12:47:34 +0200 |
---|---|---|
committer | nsensfel <SpamShield0@noot-noot.org> | 2018-06-07 12:47:34 +0200 |
commit | 9b55ecea81edbc12196a5818077fd38421f8f1a8 (patch) | |
tree | c6d590615695cacbb5a2a3f21fe20639292d134e /src/battlemap | |
parent | d99f1e8b0efedf1286ab15c656a0ea874823865f (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')
-rw-r--r-- | src/battlemap/game-logic/bm_next_turn.erl | 108 | ||||
-rw-r--r-- | src/battlemap/game-logic/bm_turn_actions.erl | 96 | ||||
-rw-r--r-- | src/battlemap/query/bm_character_turn.erl | 36 | ||||
-rw-r--r-- | src/battlemap/struct/bm_character_turn_update.erl | 20 | ||||
-rw-r--r-- | src/battlemap/struct/bm_player.erl | 6 | ||||
-rw-r--r-- | src/battlemap/util/array_util.erl | 105 |
6 files changed, 154 insertions, 217 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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/battlemap/game-logic/bm_turn_actions.erl b/src/battlemap/game-logic/bm_turn_actions.erl index bf4075f..e94d36a 100644 --- a/src/battlemap/game-logic/bm_turn_actions.erl +++ b/src/battlemap/game-logic/bm_turn_actions.erl @@ -40,6 +40,8 @@ handle_switch_weapon (Update) -> bm_character:set_weapon_ids(UpdatedWeaponIDs, Character) ), + TimelineItem = bm_turn_result:new_character_switched_weapons(CharacterIX), + DBQuery = sh_db_query:update_indexed ( @@ -57,14 +59,8 @@ handle_switch_weapon (Update) -> UpdatedData = bm_character_turn_data:set_character(UpdatedCharacter, Data), S0Update = bm_character_turn_update:set_data(UpdatedData, Update), - S1Update = - bm_character_turn_update:add_to_timeline - ( - bm_turn_result:new_character_switched_weapons(CharacterIX), - S0Update - ), - bm_character_turn_update:add_to_db(DBQuery, S1Update). + bm_character_turn_update:add_to_timeline(TimelineItem, DBQuery, S0Update). %%%% MOVING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -spec get_path_cost_and_destination @@ -137,32 +133,32 @@ commit_move (Update, Path, NewLocation) -> UpdatedData = bm_character_turn_data:set_character(UpdatedCharacter, Data), - S0Update = - bm_character_turn_update:add_to_timeline + TimelineItem = + bm_turn_result:new_character_moved(CharacterIX, Path, NewLocation), + + DBQuery = + sh_db_query:update_indexed ( - bm_turn_result:new_character_moved(CharacterIX, Path, NewLocation), - Update + bm_battle:get_characters_field(), + CharacterIX, + [ + sh_db_query:set_field + ( + bm_character:get_location_field(), + NewLocation + ) + ] ), - S1Update = - bm_character_turn_update:add_to_db + S0Update = + bm_character_turn_update:add_to_timeline ( - sh_db_query:update_indexed - ( - bm_battle:get_characters_field(), - CharacterIX, - [ - sh_db_query:set_field - ( - bm_character:get_location_field(), - NewLocation - ) - ] - ), - S0Update + TimelineItem, + DBQuery, + Update ), - bm_character_turn_update:set_data(UpdatedData, S1Update). + bm_character_turn_update:set_data(UpdatedData, S0Update). -spec handle_move ( @@ -282,19 +278,10 @@ handle_attack (BattleAction, Update) -> AttackSequence = get_attack_sequence(Character, TargetCharacter), {AttackEffects, RemainingAttackerHealth, RemainingDefenderHealth} = - handle_attack_sequence - ( - Character, - TargetCharacter, - AttackSequence - ), + handle_attack_sequence(Character, TargetCharacter, AttackSequence), UpdatedCharacter = - bm_character:set_current_health - ( - RemainingAttackerHealth, - Character - ), + bm_character:set_current_health(RemainingAttackerHealth, Character), UpdatedBattle = bm_battle:set_character @@ -310,26 +297,15 @@ handle_attack (BattleAction, Update) -> S0Data = bm_character_turn_data:set_battle(UpdatedBattle, Data), - S1Data = - bm_character_turn_data:set_character - ( - UpdatedCharacter, - S0Data - ), - + S1Data = bm_character_turn_data:set_character(UpdatedCharacter, S0Data), - S0Update = - bm_character_turn_update:add_to_timeline + TimelineItem = + bm_turn_result:new_character_attacked ( - bm_turn_result:new_character_attacked - ( - CharacterIX, - TargetIX, - AttackEffects - ), - Update + CharacterIX, + TargetIX, + AttackEffects ), - S1Update = bm_character_turn_update:set_data(S1Data, S0Update), DBQuery = sh_db_query:update_indexed @@ -345,7 +321,15 @@ handle_attack (BattleAction, Update) -> ] ), - bm_character_turn_update:add_to_db(DBQuery, S1Update). + S0Update = + bm_character_turn_update:add_to_timeline + ( + TimelineItem, + DBQuery, + Update + ), + + bm_character_turn_update:set_data(S1Data, S0Update). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/battlemap/query/bm_character_turn.erl b/src/battlemap/query/bm_character_turn.erl index 26b8dce..ccd9182 100644 --- a/src/battlemap/query/bm_character_turn.erl +++ b/src/battlemap/query/bm_character_turn.erl @@ -114,7 +114,18 @@ finalize_character (Update) -> UpdatedData = bm_character_turn_data:set_character(DisabledCharacter, Data), FinalizedData = bm_character_turn_data:clean_battle(UpdatedData), - bm_character_turn_update:set_data(FinalizedData, Update). + DBQuery = + sh_db_query:update_indexed + ( + bm_battle:get_characters_field(), + bm_character_turn_data:get_character_ix(Data), + [ sh_db_query:set_field(bm_character:get_active_field(), false) ] + ), + + S0Update = bm_character_turn_update:set_data(FinalizedData, Update), + S1Update = bm_character_turn_update:add_to_db(DBQuery, S0Update), + + S1Update. -spec handle_actions ( @@ -148,7 +159,26 @@ update_timeline (Update) -> UpdatedBattle = bm_battle:set_player(PlayerIX, UpdatedPlayer, Battle), UpdatedData = bm_character_turn_data:set_battle(UpdatedBattle, Data), - bm_character_turn_update:set_data(UpdatedData, Update). + DBQuery = + sh_db_query:update_indexed + ( + bm_battle:get_players_field(), + PlayerIX, + [ + sh_db_query:add_to_field + ( + bm_player:get_timeline_field(), + NewTimelineElements, + true % We add those to the start of the list + ) + ] + ), + + S0Update = bm_character_turn_update:set_data(UpdatedData, Update), + S1Update = bm_character_turn_update:add_to_db(DBQuery, S0Update), + + S1Update. + -spec update_data ( @@ -175,8 +205,6 @@ send_to_database (Update, Request) -> Ops = bm_character_turn_update:get_db(Update), Query = sh_db_query:new(battle_db, BattleID, {user, PlayerID}, Ops), - % TODO: send queries to an actual DB... - sh_database:commit(Query), ok. diff --git a/src/battlemap/struct/bm_character_turn_update.erl b/src/battlemap/struct/bm_character_turn_update.erl index 078075c..1ca5d94 100644 --- a/src/battlemap/struct/bm_character_turn_update.erl +++ b/src/battlemap/struct/bm_character_turn_update.erl @@ -30,7 +30,7 @@ get_db/1, set_data/2, - add_to_timeline/2, + add_to_timeline/3, add_to_db/2 ] ). @@ -64,9 +64,21 @@ get_db (Update) -> Update#type.db. set_data (Data, Update) -> Update#type{ data = Data}. --spec add_to_timeline (bm_turn_result:type(), type()) -> type(). -add_to_timeline (Item, Update) -> - Update#type{ timeline = [bm_turn_result:encode(Item)|Update#type.timeline] }. +-spec add_to_timeline + ( + bm_turn_result:type(), + sh_db_query:op(), + type() + ) -> type(). +add_to_timeline (Item, DBUpdate, Update) -> + add_to_db + ( + DBUpdate, + Update#type + { + timeline = [bm_turn_result:encode(Item)|Update#type.timeline] + } + ). -spec add_to_db (sh_db_query:op(), type()) -> type(). add_to_db (Item, Update) -> diff --git a/src/battlemap/struct/bm_player.erl b/src/battlemap/struct/bm_player.erl index 3f14a6f..fa877c1 100644 --- a/src/battlemap/struct/bm_player.erl +++ b/src/battlemap/struct/bm_player.erl @@ -26,7 +26,9 @@ get_id/1, get_timeline/1, add_to_timeline/2, - reset_timeline/1 + reset_timeline/1, + + get_timeline_field/0 ] ). @@ -70,3 +72,5 @@ new (ID) -> timeline = [] }. +-spec get_timeline_field () -> non_neg_integer(). +get_timeline_field () -> #player.timeline. diff --git a/src/battlemap/util/array_util.erl b/src/battlemap/util/array_util.erl deleted file mode 100644 index 418d9ce..0000000 --- a/src/battlemap/util/array_util.erl +++ /dev/null @@ -1,105 +0,0 @@ --module(array_util). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export -( - [ - any/2, - none/2, - all/2, - - mapiff/3 - ] -). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec any_internals - ( - fun((any()) -> boolean()), - array:array(any()), - non_neg_integer() - ) - -> boolean(). -any_internals (_, _, 0) -> - false; -any_internals (Fun, Array, PrevIX) -> - IX = (PrevIX - 1), - case Fun(array:get(IX, Array)) of - true -> true; - _ -> any_internals(Fun, Array, IX) - end. - --spec all_internals - ( - fun((any()) -> boolean()), - array:array(any()), - non_neg_integer() - ) - -> boolean(). -all_internals (_, _, 0) -> - true; -all_internals (Fun, Array, PrevIX) -> - IX = (PrevIX - 1), - case Fun(array:get(IX, Array)) of - true -> any_internals(Fun, Array, IX); - _ -> false - end. - --spec mapiff_internals - ( - fun((any()) -> boolean()), - fun((any()) -> any()), - array:array(any()), - list(non_neg_integer()), - non_neg_integer() - ) - -> {array:array(any()), list(non_neg_integer())}. -mapiff_internals (_, _, Array, IXList, 0) -> - {Array, IXList}; -mapiff_internals (Cond, Map, Array, IXList, PrevIX) -> - IX = (PrevIX - 1), - Elem = array:get(IX, Array), - - case Cond(Elem) of - false -> mapiff_internals(Cond, Map, Array, IXList, IX); - _ -> - mapiff_internals - ( - Cond, - Map, - array:set(IX, Map(Elem), Array), - [IX|IXList], - IX - ) - end. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec any (fun((any()) -> boolean()), array:array(any())) -> boolean(). -any (Fun, Array) -> - any_internals(Fun, Array, array:size(Array)). - --spec all (fun((any()) -> boolean()), array:array(any())) -> boolean(). -all (Fun, Array) -> - all_internals(Fun, Array, array:size(Array)). - --spec none (fun((any()) -> boolean()), array:array(any())) -> boolean(). -none (Fun, Array) -> - not any(Fun, Array). - --spec mapiff - ( - fun((any()) -> boolean()), - fun((any()) -> any()), - array:array(any()) - ) - -> {array:array(any()), list(non_neg_integer())}. -mapiff (Cond, Map, Array) -> - mapiff_internals(Cond, Map, Array, [], array:size(Array)). |