| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2018-02-28 17:46:41 +0100 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2018-02-28 17:46:41 +0100 | 
| commit | 1b59bdfc0d923a1ebfcebf4d6efceb2f2f4579a4 (patch) | |
| tree | d000a796fd61b27d8031cbdf691f1be73fdb5cb0 /src/query/character_turn.erl | |
| parent | 5235345620c0d4a6669ccc6badc387902ea8c92a (diff) | |
Moved the mess from 'character_turn' into 'attack'.
Diffstat (limited to 'src/query/character_turn.erl')
| -rw-r--r-- | src/query/character_turn.erl | 146 | 
1 files changed, 145 insertions, 1 deletions
| diff --git a/src/query/character_turn.erl b/src/query/character_turn.erl index c920745..b24e038 100644 --- a/src/query/character_turn.erl +++ b/src/query/character_turn.erl @@ -233,7 +233,151 @@ handle_character_instance_switching_weapons (QueryState, Input) ->        UpdatedQueryState     }. --include("character_turn/handle_character_instance_attacking_2.erl"). +-spec set_new_healths_in_query_state +   ( +      non_neg_integer(), +      non_neg_integer(), +      query_state(), +      input() +   ) +   -> query_state(). +set_new_healths_in_query_state +( +   RemainingAttackerHealth, +   RemainingDefenderHealth, +   QueryState, +   Input +) -> +   BattlemapInstance = QueryState#query_state.battlemap_instance, +   ControlledCharacterInstance = QueryState#query_state.character_instance, +   CharacterInstances = +      battlemap_instance:get_character_instances(BattlemapInstance), +   TargettedCharacterInstanceIX = Input#input.target_ix, +   TargettedCharacterInstance = +      array:get +      ( +         TargettedCharacterInstanceIX, +         CharacterInstances +      ), + +   QueryState#query_state +   { +      battlemap_instance = +         battlemap_instance:set_character_instances +         ( +            array:set +            ( +               TargettedCharacterInstanceIX, +               character_instance:set_current_health +               ( +                  RemainingDefenderHealth, +                  TargettedCharacterInstance +               ), +               CharacterInstances +            ), +            BattlemapInstance +         ), +      character_instance = +         character_instance:set_current_health +         ( +            RemainingAttackerHealth, +            ControlledCharacterInstance +         ) +   }. + +-spec handle_character_instance_attacking +   ( +      query_state(), +      input() +   ) +   -> {list(attack:attack_desc()), query_state()}. +handle_character_instance_attacking (QueryState, Input) -> +   BattlemapInstance = QueryState#query_state.battlemap_instance, +   ControlledCharacterInstance = QueryState#query_state.character_instance, +   ControlledCharacter = +      character_instance:get_character(ControlledCharacterInstance), +   ControlledCharacterStatistics = +      character:get_statistics(ControlledCharacter), +   TargettedCharacterInstance = +      array:get +      ( +         Input#input.target_ix, +         battlemap_instance:get_character_instances(BattlemapInstance) +      ), +   TargettedCharacter = +      character_instance:get_character(TargettedCharacterInstance), +   TargettedCharacterStatistics = character:get_statistics(TargettedCharacter), +   RequiredRange = +      movement:steps_between +      ( +         character_instance:get_location(ControlledCharacterInstance), +         character_instance:get_location(TargettedCharacterInstance) +      ), +   {AttackingWeaponID, _} = character:get_weapon_ids(ControlledCharacter), +   AttackingWeapon = weapon:from_id(AttackingWeaponID), +   {DefendingWeaponID, _} = character:get_weapon_ids(TargettedCharacter), +   DefendingWeapon = weapon:from_id(DefendingWeaponID), +   BaseAttackerHealth = +      character_instance:get_current_health(ControlledCharacterInstance), +   BaseDefenderHealth = +      character_instance:get_current_health(TargettedCharacterInstance), + +   AttackSequence = +      attack:get_sequence(RequiredRange, AttackingWeapon, DefendingWeapon), + +   AttackEffects = +      lists:map +      ( +         fun (AttackOrder) -> +            attack:get_description_of +            ( +               AttackOrder, +               ControlledCharacterStatistics, +               TargettedCharacterStatistics +            ) +         end, +         AttackSequence +      ), + +   {AttackSummary, RemainingAttackerHealth, RemainingDefenderHealth} = +      lists:foldl +      ( +         fun +         ( +            AttackEffect, +            { +               CurrentAttackEffects, +               CurrentAttackerHealth, +               CurrentDefenderHealth +            } +         ) -> +            {AttackTrueEffect, NewAttackerHealth, NewDefenderHealth} = +               attack:apply_to_healths +               ( +                  AttackEffect, +                  CurrentAttackerHealth, +                  CurrentDefenderHealth +               ), +            { +               [AttackTrueEffect|CurrentAttackEffects], +               NewAttackerHealth, +               NewDefenderHealth +            } +         end, +         {[], BaseAttackerHealth, BaseDefenderHealth}, +         AttackEffects +      ), + +   { +      AttackSummary, +      set_new_healths_in_query_state +      ( +         RemainingAttackerHealth, +         RemainingDefenderHealth, +         QueryState, +         Input +      ) +   }.  -spec get_type_of_turn (input()) -> list(atom()).  get_type_of_turn (Input) -> | 


