summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2019-10-27 21:14:25 +0100
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2019-10-27 21:14:25 +0100
commit95f112f827ffef5605c384b86a9d718c74e9bbbc (patch)
treee7304271b9226b2981dc8d89b5e4db33efc1fd93 /src/battle/struct/btl_character_turn_request.erl
parent86147b01bd6a240fa713dbf3368e324987664f7a (diff)
...
Diffstat (limited to 'src/battle/struct/btl_character_turn_request.erl')
-rw-r--r--src/battle/struct/btl_character_turn_request.erl89
1 files changed, 32 insertions, 57 deletions
diff --git a/src/battle/struct/btl_character_turn_request.erl b/src/battle/struct/btl_character_turn_request.erl
index 3596b4b..9f5747f 100644
--- a/src/battle/struct/btl_character_turn_request.erl
+++ b/src/battle/struct/btl_character_turn_request.erl
@@ -5,10 +5,6 @@
-define(BATTLE_ID_FIELD, <<"bid">>).
-define(CHAR_IX_FIELD, <<"cix">>).
-define(ACTIONS_FIELD, <<"act">>).
--define(ACTIONS_MOVE_FIELD, <<"mov">>).
--define(ACTIONS_WEAPON_SWITCH_FIELD, <<"wps">>).
--define(ACTIONS_SKILL_FIELD, <<"skl">>).
--define(ACTIONS_ATTACK_FIELD, <<"tar">>).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -53,58 +49,28 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec decode_actions (non_neg_integer(), map()) -> list(btl_action:type()).
-decode_actions (CharacterIX, Act) ->
- S0Result = [],
- S1Result =
- case
- btl_action:maybe_decode_move
- (
- CharacterIX,
- maps:get(?ACTIONS_MOVE_FIELD, Act)
- )
- of
- {ok, Move} -> [Move|S0Result];
- none -> S0Result
- end,
-
- S2Result =
- case
- btl_action:maybe_decode_attack
- (
- CharacterIX,
- maps:get(?ACTIONS_ATTACK_FIELD, Act)
- )
- of
- {ok, Atk} -> [Atk|S1Result];
- none -> S1Result
- end,
-
- S3Result =
- case
- btl_action:maybe_decode_weapon_switch
- (
- CharacterIX,
- maps:get(?ACTIONS_WEAPON_SWITCH_FIELD, Act)
- )
- of
- {ok, Wps} -> [Wps|S2Result];
- none -> S2Result
- end,
-
- S4Result =
- case
- btl_action:maybe_decode_skill
- (
- CharacterIX,
- maps:get(?ACTIONS_SKILL_FIELD, Act)
- )
- of
- {ok, Skill} -> [Skill|S3Result];
- none -> S3Result
- end,
-
- lists:reverse(S4Result).
+-spec validate_actions (list(btl_action:type())) -> ok.
+validate_actions (Actions) ->
+ {AreValid, _LastAction} =
+ lists:foldl
+ (
+ fun (Action, {CurrentResult, PrevAction}) ->
+ {
+ case CurrentResult of
+ false -> false;
+ true -> btl_action:can_follow(PrevAction, Action)
+ end,
+ Action
+ }
+ end,
+ {true, nothing},
+ Actions
+ ),
+
+ case AreValid of
+ false -> error({actions, Actions});
+ true -> ok
+ end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -113,7 +79,16 @@ decode_actions (CharacterIX, Act) ->
decode (Map) ->
CharacterIX = maps:get(?CHAR_IX_FIELD, Map),
EncodedActions = maps:get(?ACTIONS_FIELD, Map),
- Actions = decode_actions(CharacterIX, EncodedActions),
+ Actions =
+ lists:map
+ (
+ fun (EncodedAction) ->
+ btl_action:decode(CharacterIX, EncodedAction)
+ end,
+ EncodedActions
+ ),
+
+ validate_actions(Actions),
#type
{