| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2019-10-09 17:31:49 +0200 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2019-10-09 17:31:49 +0200 | 
| commit | 85b4344b0aa478ae0a206ba4f0fb9b2e4f14106e (patch) | |
| tree | 84103d02e420f32c778b008b3638079cc1eee2ba /src | |
| parent | 64cab0e171ab13ced4c36ea40bff393d5093e075 (diff) | |
Still trying stuff out...
Diffstat (limited to 'src')
| -rw-r--r-- | src/battle/mechanic/action/btl_action_attack.erl | 110 | ||||
| -rw-r--r-- | src/battle/struct/btl_condition.erl | 28 | 
2 files changed, 127 insertions, 11 deletions
| diff --git a/src/battle/mechanic/action/btl_action_attack.erl b/src/battle/mechanic/action/btl_action_attack.erl index 8dc9d5c..399e050 100644 --- a/src/battle/mechanic/action/btl_action_attack.erl +++ b/src/battle/mechanic/action/btl_action_attack.erl @@ -9,13 +9,39 @@  -export  (     [ -      handle/3 +      handle/2     ]  ).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec apply_conditions +   ( +      shr_condition:trigger(), +      ParameterType, +      btl_character_turn_update:type() +   ) +   -> {ParameterType, btl_character_turn_update:type()}. +apply_conditions +( +   TriggerName, +   S0Parameter, +   Actor, +   S0Update +) -> +   { +      {TriggerName, S1Parameter}, +      S1Update +   } = +      btl_condition:recursive_apply +      ( +         btl_character:get_conditions_on(TriggerName, Actor), +         {TriggerName, S0Parameter}, +         S0Update +      ), +   {S1Parameter, S1Update}. +  -spec roll_precision_modifier     (        shr_attributes:type(), @@ -587,28 +613,94 @@ apply_luck_decay (Luck) ->        _ -> 0     end. +-spec apply_battle_frontier_conditions +   ( +      shr_condition:trigger(), +      shr_condition:trigger(), +      btl_action:type(), +      btl_character_turn_update:type() +   ) +   -> {btl_action:type(), btl_character_turn_update:type()}. +apply_battle_frontier_conditions +( +   OwnTriggerName, +   OtherTriggerName, +   S0Action, +   S0Update +) -> +   CharacterIX = btl_action:get_actor_index(S0Action), +   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), + +   {S1Action, S2Update} = +      apply_conditions +      ( +         OwnTriggerName, +         S0Action, +         Character, +         S1Update +      ), + +   TargetCharacterIX = btl_action:get_target_index(S1Action), +   S2Battle = btl_character_turn_update:get_battle(S2Update), +   {TargetCharacter, S3Battle} = +      btl_battle:get_resolved_character(TargetCharacterIX, S2Battle), + +   S3Update = btl_character_turn_update:set_battle(S3Battle, S2Update), + +   {S2Action, S4Update} = +      apply_conditions +      ( +         OtherTriggerName, +         S1Action, +         TargetCharacter, +         S3Update +      ), + +   {S2Action, S4Update}. +  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  -spec handle     (        btl_action:type(), -      btl_character:type(),        btl_character_turn_update:type()     )     -> {ok, btl_character_turn_update:type()}. -handle (Action, S0Character, S0Update) -> -   S0Battle = btl_character_turn_update:get_battle(S0Update), -   CharacterIX = btl_action:get_actor_index(Action), +handle (S0Action, S0Update) -> +   S1Update = add_targeting_event(S0Action, S0Update), +   {S1Action, S2Update} = +      apply_battle_frontier_conditions +      ( +         ?CONDITION_TRIGGER_START_OF_OWN_ATTACK, +         ?CONDITION_TRIGGER_START_OF_TARGET_ATTACK, +         S0Action, +         S1Update +      ), + +   {AttackSequence, S3Update} = plan_attack_sequence(S1Action, S2Update), +   {S2Action, S4Update} = +      handle_attack_sequence(AttackSequence, S1Action, S3Update), + +   {S3Action, S2Update} = +      apply_battle_frontier_conditions +      ( +         ?CONDITION_TRIGGER_END_OF_OWN_ATTACK, +         ?CONDITION_TRIGGER_END_OF_TARGET_ATTACK, +         S0Action, +         S1Update +      ), + +   {ok, S2Update}.     PlayerIX = btl_character:get_player_index(S0Character),     S0Player = btl_battle:get_player(PlayerIX, S0Battle),     S0PlayerLuck = btl_player:get_luck(S0Player), -   TargetCharacterIX = btl_action:get_target_index(Action), -   {S0TargetCharacter, S1Battle} = -      btl_battle:get_resolved_character(TargetCharacterIX, S0Battle), -     TargetPlayerIX = btl_character:get_player_index(S0TargetCharacter),     S0TargetPlayer = btl_battle:get_player(TargetPlayerIX, S1Battle),     S0TargetPlayerLuck = btl_player:get_luck(S0TargetPlayer), diff --git a/src/battle/struct/btl_condition.erl b/src/battle/struct/btl_condition.erl index 4697a3c..2954c13 100644 --- a/src/battle/struct/btl_condition.erl +++ b/src/battle/struct/btl_condition.erl @@ -132,7 +132,8 @@  (     [        triggers_on/2, -      apply/3 +      apply/3, +      recursive_apply/3     ]  ). @@ -303,7 +304,7 @@ get_parameters_field () -> #btl_cond.parameters.     (        type(),        trigger(), -      btl_character_turn_update() +      btl_character_turn_update:type()     )     -> {trigger(), btl_character_turn_update:type()}.  apply (S0Condition, S0Trigger, S0Update) -> @@ -324,5 +325,28 @@ apply (S0Condition, S0Trigger, S0Update) ->     end. +-spec recursive_apply +   ( +      list(type()), +      trigger(), +      btl_character_turn_update:type() +   ) +   -> {trigger(), btl_character_turn_update:type()}. +recursive_apply (Conditions, S0Trigger, S0Update) -> +   [LastTrigger, LastUpdate] = +      lists:foldl +      ( +         fun (Condition, Parameters) -> +            {NextTrigger, NextUpdate} = +               erlang:apply(btl_condition, apply, [Condition|Parameters]), + +            [NextTrigger, NextUpdate] +         end, +         [S0Trigger, S0Update], +         Conditions +      ), + +   {LastTrigger, LastUpdate}. +  -spec encode (type()) -> {list({binary(), any()})}.  encode (Condition) -> {[]} % TODO. | 


