summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2019-06-06 16:36:13 +0200
committernsensfel <SpamShield0@noot-noot.org>2019-06-06 16:36:13 +0200
commitc3afe2633025641dd02e05d6c55dd9cafc42b8a2 (patch)
tree3f3865aada81ffa88f5c559ca3da1fcf3dd7c254 /src/battle/query/btl_character_turn.erl
parentd6d0920325e77bf39da69006f8e86c2f900ca86b (diff)
It compiles and mostly passes Dialyzer's tests.
Diffstat (limited to 'src/battle/query/btl_character_turn.erl')
-rw-r--r--src/battle/query/btl_character_turn.erl93
1 files changed, 85 insertions, 8 deletions
diff --git a/src/battle/query/btl_character_turn.erl b/src/battle/query/btl_character_turn.erl
index 2048391..1176355 100644
--- a/src/battle/query/btl_character_turn.erl
+++ b/src/battle/query/btl_character_turn.erl
@@ -60,7 +60,7 @@ fetch_data (Request) ->
) -> 'ok'.
assert_user_is_current_player (Update, Request) ->
PlayerID = btl_character_turn_request:get_player_id(Request),
- {_SameUpdate, Battle} = btl_character_turn_update:get_battle(Update),
+ Battle = btl_character_turn_update:get_battle(Update),
CurrentPlayerTurn = btl_battle:get_current_player_turn(Battle),
CurrentPlayerIX = btl_player_turn:get_player_ix(CurrentPlayerTurn),
CurrentPlayer = btl_battle:get_player(CurrentPlayerIX, Battle),
@@ -76,8 +76,9 @@ assert_user_is_current_player (Update, Request) ->
) -> 'ok'.
assert_user_owns_played_character (Update, Request) ->
PlayerID = btl_character_turn_request:get_player_id(Request),
- {_SameUpdateA, Battle} = btl_character_turn_update:get_battle(Update),
- {_SameUpdateB, Character} = btl_character_turn_update:get_character(Update),
+ Battle = btl_character_turn_update:get_battle(Update),
+ CharacterIX = btl_character_turn_update:get_character_ix(Update),
+ Character = btl_battle:get_character(CharacterIX, Battle),
CharacterPlayerIX = btl_character:get_player_index(Character),
CharacterPlayer = btl_battle:get_player(CharacterPlayerIX, Battle),
CharacterPlayerID = btl_player:get_id(CharacterPlayer),
@@ -88,7 +89,9 @@ assert_user_owns_played_character (Update, Request) ->
-spec assert_character_can_be_played (btl_character_turn_update:type()) -> 'ok'.
assert_character_can_be_played (Update) ->
- {_SameUpdate, Character} = btl_character_turn_update:get_character(Update),
+ Battle = btl_character_turn_update:get_battle(Update),
+ CharacterIX = btl_character_turn_update:get_character_ix(Update),
+ Character = btl_battle:get_character(CharacterIX, Battle),
true = btl_character:get_is_active(Character),
@@ -138,7 +141,7 @@ send_to_database (Update, Request) ->
send_to_cache (Update, Request) ->
PlayerID = btl_character_turn_request:get_player_id(Request),
BattleID = btl_character_turn_request:get_battle_id(Request),
- {_SameUpdate, Battle} = btl_character_turn_update:get_battle(Update),
+ Battle = btl_character_turn_update:get_battle(Update),
shr_timed_cache:update
(
@@ -172,6 +175,72 @@ generate_reply (Update) ->
jiffy:encode([TurnResultReply]).
%%%% MAIN LOGIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec deactivate_character
+ (
+ btl_character_turn_update:type()
+ )
+ -> btl_character_turn_update:type().
+deactivate_character (S0Update) ->
+ Battle = btl_character_turn_update:get_battle(S0Update),
+ CharacterIX = btl_character_turn_update:get_character_ix(S0Update),
+ Character = btl_battle:get_character(CharacterIX, Battle),
+
+ {UpdatedCharacter, CharacterAtaxiaUpdate} =
+ btl_character:ataxia_set_is_active(false, Character),
+
+ {UpdatedBattle, BattleAtaxiaUpdate} =
+ btl_battle:ataxia_set_character
+ (
+ CharacterIX,
+ UpdatedCharacter,
+ CharacterAtaxiaUpdate,
+ Battle
+ ),
+
+ S1Update =
+ btl_character_turn_update:ataxia_set_battle
+ (
+ UpdatedBattle,
+ BattleAtaxiaUpdate,
+ S0Update
+ ),
+
+ S1Update.
+
+-spec update_timeline
+ (
+ btl_character_turn_update:type()
+ )
+ -> btl_character_turn_update:type().
+update_timeline (S0Update) ->
+ NewTimelineElements = btl_character_turn_update:get_timeline(S0Update),
+ Battle = btl_character_turn_update:get_battle(S0Update),
+ PlayerTurn = btl_battle:get_current_player_turn(Battle),
+ PlayerIX = btl_player_turn:get_player_ix(PlayerTurn),
+ Player = btl_battle:get_player(PlayerIX, Battle),
+
+ {UpdatedPlayer, PlayerAtaxiaUpdate} =
+ btl_player:ataxia_add_to_timeline(NewTimelineElements, Player),
+
+ {UpdatedBattle, BattleAtaxiaUpdate} =
+ btl_battle:ataxia_set_player
+ (
+ PlayerIX,
+ UpdatedPlayer,
+ PlayerAtaxiaUpdate,
+ Battle
+ ),
+
+ S1Update =
+ btl_character_turn_update:ataxia_set_battle
+ (
+ UpdatedBattle,
+ BattleAtaxiaUpdate,
+ S0Update
+ ),
+
+ S1Update.
+
-spec handle (shr_query:type()) -> binary().
handle (Query) ->
Request = decode_request(Query),
@@ -183,12 +252,20 @@ handle (Query) ->
S0Update = fetch_data(Request),
assert_user_permissions(S0Update, Request),
- S1Update = btl_turn_actions_management:handle(S0Update, Request),
- commit_update(S1Update, Request),
+ S1Update = btl_actions_management:handle
+ (
+ btl_character_turn_request:get_actions(Request),
+ S0Update
+ ),
+ S2Update = deactivate_character(S1Update),
+ S3Update = update_timeline(S2Update),
+ S4Update = btl_turn_progression:handle(S3Update),
+
+ commit_update(S4Update, Request),
shr_security:unlock_queries(PlayerID),
- generate_reply(S1Update);
+ generate_reply(S4Update);
error -> jiffy:encode([shr_disconnected:generate()])
end.