summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battlemap/src/query/character_turn.erl | 55 | ||||
-rw-r--r-- | src/battlemap/src/struct/player_turn.erl | 27 |
2 files changed, 67 insertions, 15 deletions
diff --git a/src/battlemap/src/query/character_turn.erl b/src/battlemap/src/query/character_turn.erl index 8fdc0ac..94025e9 100644 --- a/src/battlemap/src/query/character_turn.erl +++ b/src/battlemap/src/query/character_turn.erl @@ -17,13 +17,6 @@ %-spec send_to_database (list(database_diff:struct()), character_turn_request:type()) -> 'ok'. --spec generate_reply (character_turn_update:data()) -> binary(). -generate_reply (Update) -> - NewTimelineItems = character_turn_update:get_timeline(Update), - - TurnResultReply = turn_results:generate(NewTimelineItems), - - jiffy:encode([TurnResultReply]). %%%% REQUEST DECODING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -spec decode_request (binary()) -> character_turn_request:type(). @@ -162,14 +155,49 @@ update_timeline (Update) -> character_turn_update:set_data(UpdatedData, Update). +-spec set_player_turn_to_next (battle:type()) -> battle:type(). +set_player_turn_to_next (Battle) -> + Players = battle:get_players(Battle), + CurrentPlayerTurn = battle:get_current_player_turn(Battle), + + NextPlayerTurn = player_turn:next(array:size(Players), CurrentPlayerTurn), + + battle:set_current_player_turn(NextPlayerTurn, Battle). + +-spec reset_next_player_timeline (battle:type()) -> battle:type(). +reset_next_player_timeline (Battle) -> + NextPlayerTurn = battle:get_current_player_turn(Battle), + NextPlayerIX = player_turn:get_player_ix(NextPlayerTurn), + NextPlayer = battle:get_player(NextPlayerIX, Battle), + + UpdatedNextPlayer = player:reset_timeline(NextPlayer), + UpdatedBattle = battle:set_player(NextPlayerIX, UpdatedNextPlayer, Battle), + + {UpdatedBattle, UpdatedNextPlayer}. + +-spec activate_next_players_characters (battle:type(), player:type()) -> +activate_next_players_characters (Battle, NextPlayer) -> + NextPlayerID = player:get_id(NextPlayer), + CharacterInstances = battle:get_character_instances(Battle), + % TODO + ok. + -spec start_next_player_turn ( character_turn_update:type() ) -> character_turn_update:type(). start_next_player_turn (Update) -> - % TODO - Update. + Data = character_turn_update:get_data(Update), + Battle = character_turn_data:get_battle(Data), + + S0Battle = set_player_turn_to_next(Battle), + {S1Battle, NextPlayer} = reset_next_player_timeline(S0Battle), + S2Battle = activate_next_players_characters(S1Battle, NextPlayer), + + UpdatedData = character_turn_data:set_battle(S2Battle, Data), + + character_turn_update:set_data(UpdatedData, Update). -spec check_and_update_for_new_turn ( @@ -265,6 +293,15 @@ disconnect_user (Request) -> ok. +%%%% REPLY GENERATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec generate_reply (character_turn_update:data()) -> binary(). +generate_reply (Update) -> + NewTimelineItems = character_turn_update:get_timeline(Update), + + TurnResultReply = turn_results:generate(NewTimelineItems), + + jiffy:encode([TurnResultReply]). + %%%% MAIN LOGIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -spec handle (binary()) -> binary(). handle (EncodedRequest) -> diff --git a/src/battlemap/src/struct/player_turn.erl b/src/battlemap/src/struct/player_turn.erl index 7795f35..a558bfc 100644 --- a/src/battlemap/src/struct/player_turn.erl +++ b/src/battlemap/src/struct/player_turn.erl @@ -12,9 +12,9 @@ } ). --opaque struct() :: #player_turn{}. +-opaque type() :: #player_turn{}. --export_type([struct/0]). +-export_type([type/0]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -22,7 +22,8 @@ -export ( [ - new/2 + new/2, + next/2 ] ). @@ -43,7 +44,7 @@ %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% Accessors --spec new (non_neg_integer(), non_neg_integer()) -> struct(). +-spec new (non_neg_integer(), non_neg_integer()) -> type(). new (Number, PlayerIX) -> #player_turn { @@ -51,8 +52,22 @@ new (Number, PlayerIX) -> player_ix = PlayerIX }. --spec get_number (struct()) -> non_neg_integer(). +-spec get_number (type()) -> non_neg_integer(). get_number (PlayerTurn) -> PlayerTurn#player_turn.number. --spec get_player_ix (struct()) -> non_neg_integer(). +-spec get_player_ix (type()) -> non_neg_integer(). get_player_ix (PlayerTurn) -> PlayerTurn#player_turn.player_ix. + +-spec next (non_neg_integer(), type()) -> type(). +next (PlayersCount, CurrentPlayerTurn) -> + CurrentPlayerIX = CurrentPlayerTurn#player_turn.player_ix, + CurrentTurnNumber = CurrentPlayerTurn#player_turn.number, + + NextPlayerIX = ((CurrentPlayerIX + 1) rem PlayersCount), + NextTurnNumber = + case NextPlayerIX of + 0 -> (CurrentTurnNumber + 1); + _ -> CurrentTurnNumber + end, + + new(NextTurnNumber, NextPlayerIX). |