summaryrefslogtreecommitdiff |
diff options
author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-10-27 21:14:25 +0100 |
---|---|---|
committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-10-27 21:14:25 +0100 |
commit | 95f112f827ffef5605c384b86a9d718c74e9bbbc (patch) | |
tree | e7304271b9226b2981dc8d89b5e4db33efc1fd93 /src/battle/struct/btl_character_turn_request.erl | |
parent | 86147b01bd6a240fa713dbf3368e324987664f7a (diff) |
...
Diffstat (limited to 'src/battle/struct/btl_character_turn_request.erl')
-rw-r--r-- | src/battle/struct/btl_character_turn_request.erl | 89 |
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 { |