summaryrefslogtreecommitdiff |
diff options
author | nsensfel <SpamShield0@noot-noot.org> | 2018-03-12 17:55:25 +0100 |
---|---|---|
committer | nsensfel <SpamShield0@noot-noot.org> | 2018-03-12 17:55:25 +0100 |
commit | 68cfa3b73e6f7def9641b08c4acf2f0f96685843 (patch) | |
tree | 5d6bbe4b6f1e777235fcc1235060b5101ca46c4d /src | |
parent | 11a7a03a0088b2c4b8edc394469396d54190dc53 (diff) |
Stores and sends entire turn timelines.
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/battle_turn.erl | 25 | ||||
-rw-r--r-- | src/query/character_turn.erl | 26 | ||||
-rw-r--r-- | src/query/load_state.erl | 3 | ||||
-rw-r--r-- | src/reply/turn_results.erl | 27 | ||||
-rw-r--r-- | src/shim/database_shim.erl | 2 | ||||
-rw-r--r-- | src/struct/battle.erl | 23 | ||||
-rw-r--r-- | src/struct/player.erl | 2 |
7 files changed, 82 insertions, 26 deletions
diff --git a/src/battle/battle_turn.erl b/src/battle/battle_turn.erl index 6e8d226..638e8f9 100644 --- a/src/battle/battle_turn.erl +++ b/src/battle/battle_turn.erl @@ -10,7 +10,8 @@ -export ( [ - handle_post_play/1 + handle_post_play/1, + store_timeline/2 ] ). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -75,7 +76,7 @@ start_next_players_turn (Battle) -> ), NextPlayer = array:get(NextPlayerIX, Players), - UpdatedNextPlayer = player:reset_timeline(), + UpdatedNextPlayer = player:reset_timeline(NextPlayer), {ActivatedCharacterInstanceIXs, UpdatedCharacterInstances} = activate_relevant_character_instances @@ -107,8 +108,24 @@ start_next_players_turn (Battle) -> %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec handle_post_play (battle:struct()) -> - {database_diff:struct(), battle:struct()}. +-spec store_timeline + ( + list(any()), + battle:struct() + ) + -> battle:struct(). +store_timeline (TurnEffects, Battle) -> + PlayerTurn = battle:get_current_player_turn(Battle), + PlayerIX = player_turn:get_player_ix(PlayerTurn), + Player = battle:get_player(PlayerIX, Battle), + + UpdatedPlayer = player:add_to_timeline(TurnEffects, Player), + + battle:set_player(PlayerIX, UpdatedPlayer, Battle). + + +-spec handle_post_play (battle:struct()) + -> {database_diff:struct(), battle:struct()}. handle_post_play (Battle) -> CharacterInstances = battle:get_character_instances(Battle), diff --git a/src/query/character_turn.erl b/src/query/character_turn.erl index e796493..e2b6165 100644 --- a/src/query/character_turn.erl +++ b/src/query/character_turn.erl @@ -145,27 +145,18 @@ update_cache (Battle, Input) -> Battle ). --spec generate_reply - ( - list(turn_result:struct()) - ) - -> binary(). -generate_reply (ClientUpdate) -> +-spec generate_reply ( list(any())) -> binary(). +generate_reply (EncodedClientUpdate) -> jiffy:encode ( [ - { - [ - {<<"msg">>, <<"turn_results">>}, - {<<"cnt">>, lists:map(fun turn_result:encode/1, ClientUpdate)} - ] - } + turn_results:generate(EncodedClientUpdate) ] ). handle_actions (RData, Input) -> Battle = RData#relevant_data.battle, - CharacterInstance= RData#relevant_data.played_character_instance, + CharacterInstance = RData#relevant_data.played_character_instance, CharacterInstanceIX = Input#input.character_instance_ix, Actions = Input#input.actions, @@ -236,10 +227,15 @@ handle (Req) -> {ActionsDiffUpdate, ClientUpdate, UpdatedRData} = handle_actions(RData, Input), + EncodedClientUpdate = lists:map(fun turn_result:encode/1, ClientUpdate), + UpdatedBattle = finalize_and_fuse_relevant_data(UpdatedRData, Input), + UpdatedBattle2 = + battle_turn:store_timeline(EncodedClientUpdate, UpdatedBattle), + {TurnDiffUpdate, FinalizedBattle} = - battle_turn:handle_post_play(UpdatedBattle), + battle_turn:handle_post_play(UpdatedBattle2), DiffUpdate = (TurnDiffUpdate ++ ActionsDiffUpdate), @@ -251,7 +247,7 @@ handle (Req) -> security:unlock_queries(PlayerID), - generate_reply(ClientUpdate). + generate_reply(EncodedClientUpdate). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/query/load_state.erl b/src/query/load_state.erl index cc8f28f..d92c091 100644 --- a/src/query/load_state.erl +++ b/src/query/load_state.erl @@ -74,6 +74,7 @@ generate_reply (QueryState, Input) -> jiffy:encode ( [ + turn_results:generate(battle:get_encoded_last_turns_effects(Battle)), set_map:generate(battle:get_battlemap(Battle)) | array:sparse_to_list @@ -87,8 +88,6 @@ generate_reply (QueryState, Input) -> ) ) ] - ++ - battle:get_encoded_last_turns_effects(Battle) ). -spec handle (binary()) -> binary(). diff --git a/src/reply/turn_results.erl b/src/reply/turn_results.erl new file mode 100644 index 0000000..8402389 --- /dev/null +++ b/src/reply/turn_results.erl @@ -0,0 +1,27 @@ +-module(turn_results). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export([generate/1]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec generate (list(any())) -> {list(any())}. +generate (EncodedClientUpdate) -> + io:format("~nSending timeline:~n~p~n", [EncodedClientUpdate]), + { + [ + {<<"msg">>, <<"turn_results">>}, + {<<"cnt">>, EncodedClientUpdate} + ] + }. diff --git a/src/shim/database_shim.erl b/src/shim/database_shim.erl index e5afd2b..a26087d 100644 --- a/src/shim/database_shim.erl +++ b/src/shim/database_shim.erl @@ -112,7 +112,7 @@ generate_db (Heir) -> BattlemapHeight = roll:between(16, 64), Battlemap = battlemap:random(0, BattlemapWidth, BattlemapHeight), Characters = generate_random_characters(1, 8, 8, 0, []), - PlayersAsList = [<<"0">>, <<"1">>], + PlayersAsList = [player:new(<<"0">>), player:new(<<"1">>)], Battle = battle:random ( diff --git a/src/struct/battle.erl b/src/struct/battle.erl index d668bbb..bf2b010 100644 --- a/src/struct/battle.erl +++ b/src/struct/battle.erl @@ -56,6 +56,18 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +get_all_timelines (Result, CurrentIndex, EndPoint, ArraySize, Players) -> + Player = array:get(CurrentIndex, Players), + Timeline = player:get_timeline(Player), + NextIndex = ((CurrentIndex + 1) rem ArraySize), + NextResult = (Result ++ Timeline), + case CurrentIndex of + EndPoint -> + NextResult; + + _ -> + get_all_timelines(NextResult, NextIndex, EndPoint, ArraySize, Players) + end. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -91,9 +103,14 @@ get_current_player_turn (Battle) -> Battle#battle.current_player_turn. -spec get_encoded_last_turns_effects (struct()) -> list(any()). -get_encoded_last_turns_effects (_Battle) -> - % TODO - []. +get_encoded_last_turns_effects (Battle) -> + CurrentPlayerTurn = Battle#battle.current_player_turn, + Players = Battle#battle.players, + CurrentPlayerIX = player_turn:get_player_ix(CurrentPlayerTurn), + + PlayersCount = array:size(Players), + StartingPoint = ((CurrentPlayerIX + 1) rem PlayersCount), + get_all_timelines([], StartingPoint, CurrentPlayerIX, PlayersCount, Players). -spec set_battlemap (battlemap:struct(), struct()) -> struct(). set_battlemap (Battlemap, Battle) -> diff --git a/src/struct/player.erl b/src/struct/player.erl index 824e474..857906e 100644 --- a/src/struct/player.erl +++ b/src/struct/player.erl @@ -3,7 +3,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --type id() :: string(). +-type id() :: binary(). -record ( |