From c3afe2633025641dd02e05d6c55dd9cafc42b8a2 Mon Sep 17 00:00:00 2001 From: nsensfel Date: Thu, 6 Jun 2019 16:36:13 +0200 Subject: It compiles and mostly passes Dialyzer's tests. --- src/battle/mechanic/btl_actions_management.erl | 73 ++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/battle/mechanic/btl_actions_management.erl (limited to 'src/battle/mechanic/btl_actions_management.erl') diff --git a/src/battle/mechanic/btl_actions_management.erl b/src/battle/mechanic/btl_actions_management.erl new file mode 100644 index 0000000..050ab4e --- /dev/null +++ b/src/battle/mechanic/btl_actions_management.erl @@ -0,0 +1,73 @@ +-module(btl_actions_management). +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export +( + [ + handle/2 + ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec perform_action + ( + btl_action:type(), + btl_character:type(), + btl_character_turn_update:type() + ) + -> + ( + {ok, btl_character_turn_update:type()} + | {events, list(btl_action:type()), btl_character_turn_update:type()} + ). +perform_action (Action, Character, Update) -> + case btl_action:get_category(Action) of + move -> btl_action_move:handle(Action, Character, Update); + attack -> btl_action_attack:handle(Action, Character, Update); + switch_weapon -> + btl_action_switch_weapon:handle(Action, Character, Update) + end. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec handle + ( + list(btl_action:type()), + btl_character_turn_update:type() + ) + -> btl_character_turn_update:type(). +handle ([], Update) -> Update; +handle ([BattleAction|FutureBattleActions], S0Update) -> + case btl_action:get_actor_index(BattleAction) of + -1 -> handle(FutureBattleActions, S0Update); + CharacterIX -> + S0Battle = btl_character_turn_update:get_battle(S0Update), + {Character, S1Battle} = + btl_battle:get_resolved_character(CharacterIX, S0Battle), + + S1Update = btl_character_turn_update:set_battle(S1Battle, S0Update), + + case btl_character:get_is_alive(Character) of + false -> handle(FutureBattleActions, S1Update); + true -> + case perform_action(BattleAction, Character, S1Update) of + {ok, S2Update} -> + handle(FutureBattleActions, S2Update); + {events, NewEvents, S2Update} -> + handle + ( + (NewEvents ++ FutureBattleActions), + S2Update + ) + end + end + end. + -- cgit v1.2.3-70-g09d2