| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-10-20 20:59:34 +0200 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-10-20 20:59:34 +0200 | 
| commit | 08fab636c981574a703baffad9ebb52ff4308f17 (patch) | |
| tree | 6fd3742f4b374fb948ecd017be88e5923dc9d611 /src | |
| parent | 4aaf3670c0ff4bc46092e909bb450b6336417ed9 (diff) | |
...
Diffstat (limited to 'src')
| -rw-r--r-- | src/battle/mechanic/action/btl_action_attack.erl | 1 | ||||
| -rw-r--r-- | src/battle/mechanic/action/btl_action_move.erl | 3 | ||||
| -rw-r--r-- | src/battle/mechanic/action/btl_action_switch_weapon.erl | 1 | ||||
| -rw-r--r-- | src/battle/mechanic/btl_actions_management.erl | 64 | ||||
| -rw-r--r-- | src/battle/mechanic/condition/btl_cond_heal.erl | 22 | ||||
| -rw-r--r-- | src/battle/query/btl_character_turn.erl | 24 | ||||
| -rw-r--r-- | src/battle/struct/btl_character_turn_update.erl | 32 | 
7 files changed, 70 insertions, 77 deletions
| diff --git a/src/battle/mechanic/action/btl_action_attack.erl b/src/battle/mechanic/action/btl_action_attack.erl index 91c886b..d155197 100644 --- a/src/battle/mechanic/action/btl_action_attack.erl +++ b/src/battle/mechanic/action/btl_action_attack.erl @@ -1129,6 +1129,7 @@ handle_attack_sequence ([AttackCategory|S0NextElements], Action, S0Update) ->     )     -> btl_character_turn_update:type().  handle (Action, S0Update) -> +   % TODO: assert target & actor are alive.     S0Sequence = [first, counter, second],     {S1Sequence, S1Update} = diff --git a/src/battle/mechanic/action/btl_action_move.erl b/src/battle/mechanic/action/btl_action_move.erl index 897525f..756ebca 100644 --- a/src/battle/mechanic/action/btl_action_move.erl +++ b/src/battle/mechanic/action/btl_action_move.erl @@ -450,6 +450,7 @@ commit_move (CharacterIX, Character, S0Update, Path, NewLocation) ->     )     -> btl_character_turn_update:type().  handle (Action, S0Update) -> +   % TODO: assert actor is alive.     ActorIX = btl_action:get_actor_index(Action),     S0Battle = btl_character_turn_update:get_battle(S0Update), @@ -526,7 +527,7 @@ handle (Action, S0Update) ->        _ ->           btl_character_turn_update:add_actions           ( -            false, +            true,              (                 Interruptions                 ++ diff --git a/src/battle/mechanic/action/btl_action_switch_weapon.erl b/src/battle/mechanic/action/btl_action_switch_weapon.erl index 354c328..10348bc 100644 --- a/src/battle/mechanic/action/btl_action_switch_weapon.erl +++ b/src/battle/mechanic/action/btl_action_switch_weapon.erl @@ -28,6 +28,7 @@     )     -> btl_character_turn_update:type().  handle (Action, S0Update) -> +   % TODO: assert actor is alive.     ActorIX = btl_action:get_actor_index(Action),     S0PerformSwitch = true, diff --git a/src/battle/mechanic/btl_actions_management.erl b/src/battle/mechanic/btl_actions_management.erl index 050ab4e..d7b85c5 100644 --- a/src/battle/mechanic/btl_actions_management.erl +++ b/src/battle/mechanic/btl_actions_management.erl @@ -9,65 +9,31 @@  -export  (     [ -      handle/2 +      handle/1     ]  ).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% 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), +-spec handle (btl_character_turn_update:type()) -> +btl_character_turn_update:type(). +handle (S0Update) -> +   case btl_character_turn_update:pop_next_action(S0Update) of +      none -> S0Update; +      {ok, S1Update, Action} -> +         S2Update = +            case btl_action:get_category(Action) of +               move -> btl_action_move:handle(Action, S1Update); +               attack -> btl_action_attack:handle(Action, S1Update); +               switch_weapon -> +                  btl_action_switch_weapon:handle(Action, S1Update) +            end, -         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 +         handle(S2Update)     end. diff --git a/src/battle/mechanic/condition/btl_cond_heal.erl b/src/battle/mechanic/condition/btl_cond_heal.erl index bbbbc96..897768a 100644 --- a/src/battle/mechanic/condition/btl_cond_heal.erl +++ b/src/battle/mechanic/condition/btl_cond_heal.erl @@ -62,18 +62,12 @@ apply_to_character (Condition, S0Character) ->              (RemainingUses == 1) ->                 { -                  btl_condition:set_remaining_uses -                  ( -                     UpdatedRemainingUses, -                     Condition -                  ),                    remove,                    [{S1Character, CharacterUpdate}]                 };              (RemainingUses == 0) ->                 { -                  Condition,                    remove,                    [{S1Character, CharacterUpdate}]                 }; @@ -108,18 +102,16 @@ handle_context ({Trigger, ReadOnly, VolatileData}, Condition) ->  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  -spec apply     ( -      shr_condition:context(), -      btl_condition:type(), -      btl_character_turn_update:type() +      shr_condition:context(any(), VolatileDataType), +      btl_character_turn_update:type(), +      btl_condition:type()     ) ->     { -      shr_condition:context(), +      VolatileDataType,        btl_character_turn_update:type(),        btl_condition:update_action()     }. -apply (S0Context, S0Condition, S0Update) -> -   S1Context = handle_context(S0Context, S0Condition), - -   {TargetIX, Amount} = btl_condition:get_parameters(S0Condition), +apply (S0Context, S0Update, _S0Condition) -> +   {_Trigger, _ReadOnlyData, VolatileData} = S0Context, -   {S1Context, S0Update, none}. +   {VolatileData, S0Update, none}. diff --git a/src/battle/query/btl_character_turn.erl b/src/battle/query/btl_character_turn.erl index 9534945..d0046b2 100644 --- a/src/battle/query/btl_character_turn.erl +++ b/src/battle/query/btl_character_turn.erl @@ -263,20 +263,24 @@ handle (Query) ->           S0Update = fetch_data(Request),           assert_user_permissions(S0Update, 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), +         S1Update = +            btl_character_turn_update:add_actions +            ( +               true, +               btl_character_turn_request:get_actions(Request), +               S0Update +            ), + +         S2Update = btl_actions_management:handle(S1Update), +         S3Update = deactivate_character(S2Update), +         S4Update = update_timeline(S3Update), +         S5Update = btl_turn_progression:handle(S4Update), -         commit_update(S4Update, Request), +         commit_update(S5Update, Request),           shr_security:unlock_queries(PlayerID), -         generate_reply(S4Update); +         generate_reply(S5Update);        error -> jiffy:encode([shr_disconnected:generate()])     end. diff --git a/src/battle/struct/btl_character_turn_update.erl b/src/battle/struct/btl_character_turn_update.erl index 304f19d..e0d94f1 100644 --- a/src/battle/struct/btl_character_turn_update.erl +++ b/src/battle/struct/btl_character_turn_update.erl @@ -10,7 +10,8 @@        battle :: btl_battle:type(),        character_ix :: non_neg_integer(),        reversed_battle_updates :: list(ataxic:basic()), -      timeline :: list(any()) +      timeline :: list(any()), +      actions :: list(btl_action:type())     }  ). @@ -31,10 +32,13 @@        get_character_ix/1,        get_battle_update/1,        get_timeline/1, +      pop_next_action/1,        set_battle/2,        ataxia_set_battle/3, +      add_actions/3, +        add_to_timeline/2     ]  ). @@ -53,7 +57,8 @@ new (Battle, CharacterIX) ->        battle = Battle,        character_ix = CharacterIX,        reversed_battle_updates = [], -      timeline = [] +      timeline = [], +      actions = []     }.  -spec get_battle (type()) -> btl_battle:type(). @@ -62,6 +67,18 @@ get_battle (Data) -> Data#type.battle.  -spec get_character_ix (type()) -> non_neg_integer().  get_character_ix (Data) -> Data#type.character_ix. +-spec pop_next_action (type()) -> ({ok, type(), btl_action:type()} | none). +pop_next_action (Data) -> +   case Data#type.actions of +      [] -> none; +      [Result|NextActions] -> +         { +            ok, +            Data#type { actions = NextActions }, +            Result +         } +   end. +  -spec set_battle (btl_battle:type(), type()) -> type().  set_battle (Battle, Data) -> Data#type { battle = Battle }. @@ -79,6 +96,17 @@ ataxia_set_battle (Battle, BattleUpdate, Data) ->        reversed_battle_updates = [BattleUpdate|Data#type.reversed_battle_updates]     }. +-spec add_actions (boolean(), list(btl_action:type()), type()) -> type(). +add_actions (IsPrefix, Actions, Data) -> +   Data#type +   { +      actions = +         case IsPrefix of +            true -> (Actions ++ Data#type.actions); +            false -> (Data#type.actions ++ Actions) +         end +   }. +  -spec add_to_timeline (btl_turn_result:type(), type()) -> type().  add_to_timeline (Item, Data) ->     Data#type | 


