| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2018-04-10 13:01:12 +0200 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2018-04-10 13:01:12 +0200 | 
| commit | 1001c3f6cfefd880c1721f2b80c1795197d05365 (patch) | |
| tree | 8696137b5684547b80129d308bc854a7e74fa0b0 /src/struct/battle_action.erl | |
| parent | d7032b408c5f66a3cb62c44cf0953abe48c39ef9 (diff) | |
Changing how the server services are organized...
Diffstat (limited to 'src/struct/battle_action.erl')
| -rw-r--r-- | src/struct/battle_action.erl | 300 | 
1 files changed, 0 insertions, 300 deletions
| diff --git a/src/struct/battle_action.erl b/src/struct/battle_action.erl deleted file mode 100644 index 8aaaef9..0000000 --- a/src/struct/battle_action.erl +++ /dev/null @@ -1,300 +0,0 @@ --module(battle_action). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --record -( -   move, -   { -      path :: list(direction:enum()) -   } -). - --record -( -   switch_weapon, -   { -   } -). - --record -( -   attack, -   { -      target_ix :: non_neg_integer() -   } -). - --type category() :: ('move' | 'switch_weapon' | 'attack' | 'nothing'). --opaque struct() :: (#move{} | #switch_weapon{} | #attack{}). - --export_type([category/0, struct/0]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export -( -   [ -      decode/1, -      handle/4, -      can_follow/2 -   ] -). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec decode_mov_action (map()) -> struct(). -decode_mov_action (JSONMap) -> -   PathInBinary = maps:get(<<"p">>, JSONMap), -   Path = lists:map(fun direction:decode/1, PathInBinary), - -   #move { path = Path }. - --spec decode_atk_action (map()) -> struct(). -decode_atk_action (JSONMap) -> -   TargetIX = binary_to_integer(maps:get(<<"tix">>, JSONMap)), - -   #attack { target_ix = TargetIX }. - --spec decode_swp_action (map()) -> struct(). -decode_swp_action (_JSONMap) -> -   #switch_weapon{}. - --spec handle_attack_sequence -   ( -      character_instance:struct(), -      character_instance:struct(), -      list(attack:step()) -   ) -   -> {list(attack:struct()), non_neg_integer(), non_neg_integer()}. -handle_attack_sequence -( -   CharacterInstance, -   TargetCharacterInstance, -   AttackSequence -) -> -   Character = character_instance:get_character(CharacterInstance), -   TargetCharacter = character_instance:get_character(TargetCharacterInstance), -   CharacterStatistics = character:get_statistics(Character), -   TargetCharacterStatistics = character:get_statistics(TargetCharacter), - -   AttackPlannedEffects = -      lists:map -      ( -         fun (AttackStep) -> -            attack:get_description_of -            ( -               AttackStep, -               CharacterStatistics, -               TargetCharacterStatistics -            ) -         end, -         AttackSequence -      ), - -   lists:foldl -   ( -      fun -      ( -         AttackEffectCandidate, -         {AttackValidEffects, AttackerHealth, DefenderHealth} -      ) -> -         {AttackResult, NewAttackerHealth, NewDefenderHealth} = -            attack:apply_to_healths -            ( -               AttackEffectCandidate, -               AttackerHealth, -               DefenderHealth -            ), -         case AttackResult of -            nothing -> {AttackValidEffects, AttackerHealth, DefenderHealth}; -            _ -> -               { -                  (AttackValidEffects ++ [AttackResult]), -                  NewAttackerHealth, -                  NewDefenderHealth -               } -         end -      end, -      { -         [], -         character_instance:get_current_health(CharacterInstance), -         character_instance:get_current_health(TargetCharacterInstance) -      }, -      AttackPlannedEffects -   ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec decode (map()) -> struct(). -decode (EncodedAction) -> -   JSONActionMap = EncodedAction, %jiffy:decode(EncodedAction, [return_maps]), -   ActionType = maps:get(<<"t">>, JSONActionMap), -   case ActionType of -      <<"mov">> -> decode_mov_action(JSONActionMap); -      <<"atk">> -> decode_atk_action(JSONActionMap); -      <<"swp">> -> decode_swp_action(JSONActionMap) -   end. - --spec can_follow (category(), category()) -> boolean(). -can_follow (nothing, attack) -> true; -can_follow (nothing, switch_weapon) -> true; -can_follow (nothing, move) -> true; -can_follow (switch_weapon, attack) -> true; -can_follow (move, attack) -> true; -can_follow (_, _) -> false. - --spec handle -( -   battle:struct(), -   character_instance:struct(), -   non_neg_integer(), -   struct() -) --> -{ -   list(database_diff:struct()), -   list(turn_result:struct()), -   battle:struct(), -   character_instance:struct() -}. -handle (Battle, CharacterInstance, CharacterInstanceIX, BattleAction) -when is_record(BattleAction, switch_weapon) -> -   Character = character_instance:get_character(CharacterInstance), -   CharacterAttributes = character:get_attributes(Character), -   {PrimaryWeaponID, SecondaryWeaponID} = character:get_weapon_ids(Character), - -   UpdatedWeaponIDs = {SecondaryWeaponID, PrimaryWeaponID}, -   UpdatedCharacterStatistics = -      statistics:new(CharacterAttributes, UpdatedWeaponIDs), -   UpdatedCharacter = -      character:set_statistics -      ( -         UpdatedCharacterStatistics, -         character:set_weapon_ids(UpdatedWeaponIDs, Character) -      ), -   UpdatedCharacterInstance = -      character_instance:set_character(UpdatedCharacter, CharacterInstance), - -   { -      % TODO: hide that into database_diff structs. -      [ -         {character_instance, CharacterInstanceIX, wp0, SecondaryWeaponID}, -         {character_instance, CharacterInstanceIX, wp1, PrimaryWeaponID} -         % ... statistics as well. -      ], -      [turn_result:new_character_switched_weapons(CharacterInstanceIX)], -      Battle, -      UpdatedCharacterInstance -   }; -handle (Battle, CharacterInstance, CharacterInstanceIX, BattleAction) -when is_record(BattleAction, move) -> -   Character = character_instance:get_character(CharacterInstance), -   CharacterStatistics = character:get_statistics(Character), -   Battlemap = battle:get_battlemap(Battle), -   Path = BattleAction#move.path, -   CharacterMovementPoints = -      statistics:get_movement_points(CharacterStatistics), - -   ForbiddenLocations = -      array:foldl -      ( -         fun (IX, CharInst, Prev) -> -            case IX of -               CharacterInstanceIX -> Prev; -               _ -> [character_instance:get_location(CharInst)|Prev] -            end -         end, -         [], -         battle:get_character_instances(Battle) -      ), - -   {NewLocation, Cost} = -      movement:cross -      ( -         Battlemap, -         ForbiddenLocations, -         Path, -         character_instance:get_location(CharacterInstance) -      ), - -   true = (Cost =< CharacterMovementPoints), - -   UpdatedCharacterInstance = -      character_instance:set_location(NewLocation, CharacterInstance), - -   { -      % TODO: hide that into database_diff structs. -      [{character_instance, CharacterInstanceIX, loc, NewLocation}], -      % TODO: hide that into turn_result structs. -      [turn_result:new_character_moved(CharacterInstanceIX, Path, NewLocation)], -      Battle, -      UpdatedCharacterInstance -   }; -handle (Battle, CharacterInstance, CharacterInstanceIX, BattleAction) -when is_record(BattleAction, attack) -> -   Character = character_instance:get_character(CharacterInstance), -   TargetIX = BattleAction#attack.target_ix, -   TargetCharacterInstance = battle:get_character_instance(TargetIX, Battle), -   TargetCharacter = character_instance:get_character(TargetCharacterInstance), - -   Range = -      location:dist -      ( -         character_instance:get_location(CharacterInstance), -         character_instance:get_location(TargetCharacterInstance) -      ), - -   {AttackingWeaponID, _} = character:get_weapon_ids(Character), -   {DefendingWeaponID, _} = character:get_weapon_ids(TargetCharacter), - -   AttackingWeapon = weapon:from_id(AttackingWeaponID), -   DefendingWeapon = weapon:from_id(DefendingWeaponID), - -   AttackSequence = -      attack:get_sequence(Range, AttackingWeapon, DefendingWeapon), - -   {AttackEffects, RemainingAttackerHealth, RemainingDefenderHealth} = -      handle_attack_sequence -      ( -         CharacterInstance, -         TargetCharacterInstance, -         AttackSequence -      ), - -   UpdatedCharacterInstance = -      character_instance:set_current_health -      ( -         RemainingAttackerHealth, -         CharacterInstance -      ), - -   UpdatedBattle = -      battle:set_character_instance -      ( -         TargetIX, -         character_instance:set_current_health -         ( -            RemainingDefenderHealth, -            TargetCharacterInstance -         ), -         Battle -      ), -   { -      % TODO: hide that into database_diff structs. -      [], % TODO -      [ -         turn_result:new_character_attacked -         ( -            CharacterInstanceIX, -            TargetIX, -            AttackEffects -         ) -      ], -      UpdatedBattle, -      UpdatedCharacterInstance -   }. | 


