| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/battlemap')
| -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). | 


