From fde827cba1ff3d889135c74ee1978098465fd200 Mon Sep 17 00:00:00 2001 From: nsensfel Date: Wed, 11 Jul 2018 17:54:14 +0200 Subject: "Battlemap" -> "Battle". --- src/battlemap/game-logic/bm_turn_actions.erl | 391 --------------------------- 1 file changed, 391 deletions(-) delete mode 100644 src/battlemap/game-logic/bm_turn_actions.erl (limited to 'src/battlemap/game-logic/bm_turn_actions.erl') diff --git a/src/battlemap/game-logic/bm_turn_actions.erl b/src/battlemap/game-logic/bm_turn_actions.erl deleted file mode 100644 index c3e091a..0000000 --- a/src/battlemap/game-logic/bm_turn_actions.erl +++ /dev/null @@ -1,391 +0,0 @@ --module(bm_turn_actions). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export -( - [ - handle/2 - ] -). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%% SWITCHING WEAPON %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec handle_switch_weapon - ( - bm_character_turn_update:type() - ) - -> bm_character_turn_update:type(). -handle_switch_weapon (Update) -> - Data = bm_character_turn_update:get_data(Update), - Character = bm_character_turn_data:get_character(Data), - CharacterIX = bm_character_turn_data:get_character_ix(Data), - CharacterAttributes = bm_character:get_attributes(Character), - ArmorID = bm_character:get_armor_id(Character), - {PrimaryWeaponID, SecondaryWeaponID} = bm_character:get_weapon_ids(Character), - - UpdatedWeaponIDs = {SecondaryWeaponID, PrimaryWeaponID}, - UpdatedCharacterStatistics = - sh_statistics:new(CharacterAttributes, UpdatedWeaponIDs, ArmorID), - UpdatedCharacter = - bm_character:set_statistics - ( - UpdatedCharacterStatistics, - bm_character:set_weapon_ids(UpdatedWeaponIDs, Character) - ), - - TimelineItem = bm_turn_result:new_character_switched_weapons(CharacterIX), - - DBQuery = - sh_db_query:update_indexed - ( - bm_battle:get_characters_field(), - CharacterIX, - [ - sh_db_query:set_field - ( - bm_character:get_weapons_field(), - UpdatedWeaponIDs - ), - sh_db_query:set_field - ( - bm_character:get_statistics_field(), - UpdatedCharacterStatistics - ) - ] - ), - - UpdatedData = bm_character_turn_data:set_character(UpdatedCharacter, Data), - - S0Update = bm_character_turn_update:set_data(UpdatedData, Update), - - bm_character_turn_update:add_to_timeline(TimelineItem, DBQuery, S0Update). - -%%%% MOVING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec get_path_cost_and_destination - ( - bm_character_turn_data:type(), - list(bm_direction:type()) - ) - -> {non_neg_integer(), bm_location:type()}. -get_path_cost_and_destination (Data, Path) -> - Character = bm_character_turn_data:get_character(Data), - CharacterIX = bm_character_turn_data:get_character_ix(Data), - Battle = bm_character_turn_data:get_battle(Data), - Battlemap = bm_battle:get_battlemap(Battle), - - ForbiddenLocations = - array:foldl - ( - fun (IX, Char, Prev) -> - IsAlive = bm_character:get_is_alive(Char), - if - (IX == CharacterIX) -> Prev; - (not IsAlive) -> Prev; - true -> [bm_character:get_location(Char)|Prev] - end - end, - [], - bm_battle:get_characters(Battle) - ), - - {NewLocation, Cost} = - bm_movement:cross - ( - Battlemap, - ForbiddenLocations, - Path, - bm_character:get_location(Character) - ), - - {Cost, NewLocation}. - --spec assert_character_can_move - ( - bm_character_turn_data:type(), - non_neg_integer() - ) - -> 'ok'. -assert_character_can_move (Data, Cost) -> - Character = bm_character_turn_data:get_character(Data), - CharacterStatistics = bm_character:get_statistics(Character), - CharacterMovementPoints = - sh_statistics:get_movement_points(CharacterStatistics), - - true = (Cost =< CharacterMovementPoints), - - ok. - --spec commit_move - ( - bm_character_turn_update:type(), - list(bm_direction:type()), - bm_location:type() - ) - -> bm_character_turn_update:type(). -commit_move (Update, Path, NewLocation) -> - Data = bm_character_turn_update:get_data(Update), - Character = bm_character_turn_data:get_character(Data), - CharacterIX = bm_character_turn_data:get_character_ix(Data), - - UpdatedCharacter = bm_character:set_location(NewLocation, Character), - - UpdatedData = bm_character_turn_data:set_character(UpdatedCharacter, Data), - - TimelineItem = - bm_turn_result:new_character_moved(CharacterIX, Path, NewLocation), - - DBQuery = - sh_db_query:update_indexed - ( - bm_battle:get_characters_field(), - CharacterIX, - [ - sh_db_query:set_field - ( - bm_character:get_location_field(), - NewLocation - ) - ] - ), - - S0Update = - bm_character_turn_update:add_to_timeline - ( - TimelineItem, - DBQuery, - Update - ), - - bm_character_turn_update:set_data(UpdatedData, S0Update). - --spec handle_move - ( - bm_battle_action:type(), - bm_character_turn_update:type() - ) - -> bm_character_turn_update:type(). -handle_move (BattleAction, Update) -> - Data = bm_character_turn_update:get_data(Update), - Path = bm_battle_action:get_path(BattleAction), - - {PathCost, NewLocation} = get_path_cost_and_destination(Data, Path), - assert_character_can_move(Data, PathCost), - - commit_move(Update, Path, NewLocation). - -%%%% ATTACKING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec handle_attack_sequence - ( - bm_character:type(), - bm_character:type(), - list(bm_attack:step()) - ) - -> {list(bm_attack:type()), non_neg_integer(), non_neg_integer()}. -handle_attack_sequence -( - Character, - TargetCharacter, - AttackSequence -) -> - AttackPlannedEffects = - lists:map - ( - fun (AttackStep) -> - bm_attack:get_description_of - ( - AttackStep, - Character, - TargetCharacter - ) - end, - AttackSequence - ), - - lists:foldl - ( - fun - ( - AttackEffectCandidate, - {AttackValidEffects, AttackerHealth, DefenderHealth} - ) -> - {AttackResult, NewAttackerHealth, NewDefenderHealth} = - bm_attack:apply_to_healths - ( - AttackEffectCandidate, - AttackerHealth, - DefenderHealth - ), - case AttackResult of - nothing -> {AttackValidEffects, AttackerHealth, DefenderHealth}; - _ -> - { - (AttackValidEffects ++ [AttackResult]), - NewAttackerHealth, - NewDefenderHealth - } - end - end, - { - [], - bm_character:get_current_health(Character), - bm_character:get_current_health(TargetCharacter) - }, - AttackPlannedEffects - ). - --spec get_attack_sequence - ( - bm_character:type(), - bm_character:type() - ) - -> list(bm_attack:step()). -get_attack_sequence (Character, TargetCharacter) -> - Range = - bm_location:dist - ( - bm_character:get_location(Character), - bm_character:get_location(TargetCharacter) - ), - - {AttackingWeaponID, _} = bm_character:get_weapon_ids(Character), - {DefendingWeaponID, _} = bm_character:get_weapon_ids(TargetCharacter), - - AttackingWeapon = sh_weapon:from_id(AttackingWeaponID), - DefendingWeapon = sh_weapon:from_id(DefendingWeaponID), - - bm_attack:get_sequence(Range, AttackingWeapon, DefendingWeapon). - - --spec handle_attack - ( - bm_battle_action:type(), - bm_character_turn_update:type() - ) - -> bm_character_turn_update:type(). -handle_attack (BattleAction, Update) -> - Data = bm_character_turn_update:get_data(Update), - Battle = bm_character_turn_data:get_battle(Data), - Character = bm_character_turn_data:get_character(Data), - CharacterIX = bm_character_turn_data:get_character_ix(Data), - TargetIX = bm_battle_action:get_target_ix(BattleAction), - TargetCharacter = bm_battle:get_character(TargetIX, Battle), - - true = bm_character:get_is_alive(TargetCharacter), - - AttackSequence = get_attack_sequence(Character, TargetCharacter), - - {AttackEffects, RemainingAttackerHealth, RemainingDefenderHealth} = - handle_attack_sequence(Character, TargetCharacter, AttackSequence), - - UpdatedCharacter = - bm_character:set_current_health(RemainingAttackerHealth, Character), - - UpdatedBattle = - bm_battle:set_character - ( - TargetIX, - bm_character:set_current_health - ( - RemainingDefenderHealth, - TargetCharacter - ), - Battle - ), - - S0Data = bm_character_turn_data:set_battle(UpdatedBattle, Data), - S1Data = bm_character_turn_data:set_character(UpdatedCharacter, S0Data), - - TimelineItem = - bm_turn_result:new_character_attacked - ( - CharacterIX, - TargetIX, - AttackEffects - ), - - DBQuery0 = - sh_db_query:update_indexed - ( - bm_battle:get_characters_field(), - TargetIX, - [ - sh_db_query:set_field - ( - bm_character:get_current_health_field(), - RemainingDefenderHealth - ) - ] - ), - - DBQuery1 = - sh_db_query:update_indexed - ( - bm_battle:get_characters_field(), - CharacterIX, - [ - sh_db_query:set_field - ( - bm_character:get_current_health_field(), - RemainingAttackerHealth - ) - ] - ), - - S0Update = - bm_character_turn_update:add_to_timeline - ( - TimelineItem, - DBQuery0, - Update - ), - - S1Update = - bm_character_turn_update:add_to_db - ( - DBQuery1, - S0Update - ), - - S2Update = bm_character_turn_update:set_data(S1Data, S1Update), - - S3Update = - bm_victory:handle_character_lost_health - ( - CharacterIX, - RemainingAttackerHealth, - S2Update - ), - - S4Update = - bm_victory:handle_character_lost_health - ( - TargetIX, - RemainingDefenderHealth, - S3Update - ), - - S4Update. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec handle -( - bm_battle_action:type(), - bm_character_turn_update:type() -) --> bm_character_turn_update:type(). -handle (BattleAction, Update) -> - case bm_battle_action:get_category(BattleAction) of - move -> handle_move(BattleAction, Update); - switch_weapon -> handle_switch_weapon(Update); - attack -> handle_attack(BattleAction, Update) - end. -- cgit v1.2.3-70-g09d2