summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-05-08 15:33:56 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-05-08 15:33:56 +0200
commitcfbf4a1fb7007ba60e8eabd51826bbcdc9feed63 (patch)
treef03d5798b888322538904b89c0edf8c2e20f6a20 /src/battlemap
parente5b297726860cc0f67e9cc11eab3529bc407c7ab (diff)
...
Diffstat (limited to 'src/battlemap')
-rw-r--r--src/battlemap/src/query/character_turn.erl55
-rw-r--r--src/battlemap/src/struct/player_turn.erl27
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).