summaryrefslogtreecommitdiff |
diff options
author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-10-14 22:44:01 +0200 |
---|---|---|
committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-10-14 22:44:01 +0200 |
commit | 374d81b1cc1b638ae8b2504f8e8c7b4929a679a7 (patch) | |
tree | f47bfa7896da4d24fec106b07e91084b33403078 /src/battle/struct | |
parent | 0e980b08f266b48d9b40f5d58fa40e1a748f8bbf (diff) |
...
Diffstat (limited to 'src/battle/struct')
-rw-r--r-- | src/battle/struct/btl_condition.erl | 124 |
1 files changed, 123 insertions, 1 deletions
diff --git a/src/battle/struct/btl_condition.erl b/src/battle/struct/btl_condition.erl index 13d6387..78ee9b6 100644 --- a/src/battle/struct/btl_condition.erl +++ b/src/battle/struct/btl_condition.erl @@ -65,7 +65,9 @@ -export ( [ - ataxia_apply_trigger/3 + ataxia_apply_trigger/3, + apply_to_character/5, + apply_to_battle/4 ] ). @@ -333,5 +335,125 @@ ataxia_apply_trigger (Context, S0Update, Conditions) -> {LastVolatileData, ConditionsAtaxiaUpdate, LastUpdate}. +-spec apply_to_character + ( + non_neg_integer(), + shr_condition:trigger(), + any(), + VolatileDataType, + btl_character_turn_update:type() + ) + -> {VolatileDataType, btl_character_turn_update:type()}. +apply_to_character +( + ActorIX, + Trigger, + ReadOnlyData, + S0VolatileData, + S0Update +) -> + S0Battle = btl_character_turn_update:get_battle(S0Update), + {S0Actor, S1Battle} = btl_battle:get_resolved_character(ActorIX, S0Battle), + S1Update = btl_character_turn_update:set_battle(S1Battle, S0Update), + + { + S1VolatileContext, + ActorConditionsAtaxicUpdate, + S2Update + } = + ataxia_apply_trigger + ( + {Trigger, ReadOnlyData, S0VolatileData}, + S1Update, + btl_character:get_conditions(S0Actor) + ), + + %%%%% Actor and Battle may have been modified %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + S1Battle = btl_character_turn_update:get_battle(S2Update), + {S1Actor, S2Battle} = btl_battle:get_resolved_character(ActorIX, S1Battle), + S0Conditions = btl_character:get_conditions(S1Actor), + + S1Conditions = + ataxic:basic_apply_to(ActorConditionsAtaxicUpdate, S0Conditions), + + {S2Actor, ActorAtaxicUpdate} = + btl_character:ataxia_set_conditions + ( + S1Conditions, + ActorConditionsAtaxicUpdate, + S1Actor + ), + + {S3Battle, BattleAtaxicUpdate} = + btl_battle:ataxia_set_character + ( + ActorIX, + S2Actor, + ActorAtaxicUpdate, + S2Battle + ), + + S2Update = + btl_character_turn_update:ataxia_set_battle + ( + S3Battle, + BattleAtaxicUpdate, + S1Update + ), + + {S1VolatileContext, S2Update}. + +-spec apply_to_battle + ( + shr_condition:trigger(), + any(), + VolatileDataType, + btl_character_turn_update:type() + ) + -> {VolatileDataType, btl_character_turn_update:type()}. +apply_to_battle +( + Trigger, + ReadOnlyData, + S0VolatileData, + S0Update +) -> + S0Battle = btl_character_turn_update:get_battle(S0Update), + + { + S1VolatileContext, + BattleConditionsAtaxicUpdate, + S1Update + } = + ataxia_apply_trigger + ( + {Trigger, ReadOnlyData, S0VolatileData}, + S0Update, + btl_battle:get_conditions(S0Battle) + ), + + %%%% Battle may have been modified (and very likely has) %%%%%%%%%%%%%%%%%%%% + S1Battle = btl_character_turn_update:get_battle(S1Update), + UpdatedBattleConditions = + ataxic:basic_apply_to + ( + btl_battle:get_conditions(S1Battle), + BattleConditionsAtaxicUpdate + ), + + {S2Battle, BattleAtaxicUpdate} = + btl_battle:ataxia_set_conditions(UpdatedBattleConditions, S1Battle), + + S1Update = + btl_character_turn_update:ataxia_set_battle + ( + S2Battle, + BattleAtaxicUpdate, + S1Update + ), + + {S1VolatileContext, S1Update}. + -spec encode (type()) -> {list({binary(), any()})}. encode (Condition) -> {[]}. % TODO |