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) -> |