| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2018-03-02 15:43:23 +0100 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2018-03-02 15:43:23 +0100 | 
| commit | dc119102df0076e45ee6c484e361c3fff3e6e2dd (patch) | |
| tree | ff9d0ad5787ceac83decf5066e9969ea01388a45 /src/struct | |
| parent | 45434f444962ef9c852e8122fe86ae65c9c49436 (diff) | |
Still working on it...
Diffstat (limited to 'src/struct')
| -rw-r--r-- | src/struct/battle.erl (renamed from src/struct/battlemap_instance.erl) | 81 | ||||
| -rw-r--r-- | src/struct/battle_action.erl | 123 | 
2 files changed, 125 insertions, 79 deletions
| diff --git a/src/struct/battlemap_instance.erl b/src/struct/battle.erl index c3b411b..bfa0e8d 100644 --- a/src/struct/battlemap_instance.erl +++ b/src/struct/battle.erl @@ -1,4 +1,4 @@ --module(battlemap_instance). +-module(battle).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -7,7 +7,7 @@  -record  ( -   battlemap_instance, +   battle,     {        id :: id(),        battlemap :: battlemap:struct(), @@ -18,7 +18,7 @@     }  ). --opaque struct() :: #battlemap_instance{}. +-opaque struct() :: #battle{}.  -export_type([struct/0, id/0]). @@ -32,12 +32,15 @@        get_id/1,        get_battlemap/1,        get_character_instances/1, +      get_character_instance/2,        get_player_ids/1, +      get_player_id/2,        get_current_player_turn/1,        get_last_turns_effects/1,        set_battlemap/2,        set_character_instances/2, +      set_character_instance/3,        set_player_ids/2,        set_current_player_turn/2,        set_last_turns_effects/2 @@ -60,32 +63,41 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%% Accessors  -spec get_id (struct()) -> id(). -get_id (BattlemapInstance) -> BattlemapInstance#battlemap_instance.id. +get_id (Battle) -> Battle#battle.id.  -spec get_battlemap (struct()) -> battlemap:struct(). -get_battlemap (BattlemapInstance) -> -   BattlemapInstance#battlemap_instance.battlemap. +get_battlemap (Battle) -> +   Battle#battle.battlemap.  -spec get_character_instances (struct()) ->     array:array(character_instance:struct()). -get_character_instances (BattlemapInstance) -> -   BattlemapInstance#battlemap_instance.character_instances. +get_character_instances (Battle) -> +   Battle#battle.character_instances. + +-spec get_character_instance (non_neg_integer(), struct()) -> +   character_instance:struct(). +get_character_instance (IX, Battle) -> +   array:get(IX, Battle#battle.character_instances).  -spec get_player_ids (struct()) -> array:array(player:id()). -get_player_ids (BattlemapInstance) -> -   BattlemapInstance#battlemap_instance.player_ids. +get_player_ids (Battle) -> +   Battle#battle.player_ids. + +-spec get_player_id (non_neg_integer(), struct()) -> player:id(). +get_player_id (IX, Battle) -> +   array:get(IX, Battle#battle.player_ids).  -spec get_current_player_turn (struct()) -> player_turn:struct(). -get_current_player_turn (BattlemapInstance) -> -   BattlemapInstance#battlemap_instance.current_player_turn. +get_current_player_turn (Battle) -> +   Battle#battle.current_player_turn.  -spec get_last_turns_effects (struct()) -> list(any()). -get_last_turns_effects (BattlemapInstance) -> -   BattlemapInstance#battlemap_instance.last_turns_effects. +get_last_turns_effects (Battle) -> +   Battle#battle.last_turns_effects.  -spec set_battlemap (battlemap:struct(), struct()) -> struct(). -set_battlemap (Battlemap, BattlemapInstance) -> -   BattlemapInstance#battlemap_instance +set_battlemap (Battlemap, Battle) -> +   Battle#battle     {        battlemap = Battlemap     }. @@ -96,20 +108,39 @@ set_battlemap (Battlemap, BattlemapInstance) ->        struct()     )     -> struct(). -set_character_instances (CharacterInstances, BattlemapInstance) -> -   BattlemapInstance#battlemap_instance +set_character_instances (CharacterInstances, Battle) -> +   Battle#battle     {        character_instances = CharacterInstances     }. +-spec set_character_instance +   ( +      non_neg_integer(), +      character_instance:struct(), +      struct() +   ) +   -> struct(). +set_character_instance (IX, CharacterInstance, Battle) -> +   Battle#battle +   { +      character_instances = +         array:set +         ( +            IX, +            CharacterInstance, +            Battle#battle.character_instances +         ) +   }. +  -spec set_player_ids     (        array:array(player:id()),        struct()     )     -> struct(). -set_player_ids (Players, BattlemapInstance) -> -   BattlemapInstance#battlemap_instance +set_player_ids (Players, Battle) -> +   Battle#battle     {        player_ids = Players     }. @@ -120,8 +151,8 @@ set_player_ids (Players, BattlemapInstance) ->        struct()     )     -> struct(). -set_current_player_turn (PlayerTurn, BattlemapInstance) -> -   BattlemapInstance#battlemap_instance +set_current_player_turn (PlayerTurn, Battle) -> +   Battle#battle     {        current_player_turn = PlayerTurn     }. @@ -132,8 +163,8 @@ set_current_player_turn (PlayerTurn, BattlemapInstance) ->        struct()     )     -> struct(). -set_last_turns_effects (Effects, BattlemapInstance) -> -   BattlemapInstance#battlemap_instance +set_last_turns_effects (Effects, Battle) -> +   Battle#battle     {        last_turns_effects = Effects     }. @@ -185,7 +216,7 @@ random (ID, PlayersAsList, Battlemap, Characters) ->           Characters        ), -   #battlemap_instance +   #battle     {        id = ID,        battlemap = Battlemap, diff --git a/src/struct/battle_action.erl b/src/struct/battle_action.erl index 7287a95..c1bccc7 100644 --- a/src/struct/battle_action.erl +++ b/src/struct/battle_action.erl @@ -22,7 +22,7 @@  (     attack,     { -      target :: non_neg_integer() +      target_ix :: non_neg_integer()     }  ). @@ -57,18 +57,76 @@ decode_mov_action (JSONMap) ->  decode_atk_action (JSONMap) ->     TargetIX = maps:get(<<"tix">>, JSONMap), -   #attack { target = TargetIX }. +   #attack { target_ix = TargetIX }.  -spec decode_swp_action (map()) -> struct().  decode_swp_action (_JSONMap) ->     #switch_weapon{}. + +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}; +            _ -> +               { +                  [AttackResult|AttackValidEffects], +                  NewAttackerHealth, +                  NewDefenderHealth +               } +         end +      end, +      { +         [], +         character_instance:get_current_health(CharacterInstance), +         character_instance:get_current_health(TargetCharacterInstance) +      }, +      AttackPlannedEffects +   ). +  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  -spec decode (binary()) -> struct().  decode (EncodedAction) -> -   JSONActionMap = jiffy:decode(EncodedAction, [return_maps]), +   JSONActionMap = EncodedAction, %jiffy:decode(EncodedAction, [return_maps]),     ActionType = maps:get(<<"t">>, JSONActionMap),     case ActionType of        <<"mov">> -> decode_mov_action(JSONActionMap); @@ -175,16 +233,13 @@ when is_record(BattleAction, move) ->        ],        UpdatedCharacterInstance,        Battle -   }. -handle (Battle, CharacterInstance, CharacterInstanceIX, BattleAction) +   }; +handle (Battle, CharacterInstance, _CharacterInstanceIX, BattleAction)  when is_record(BattleAction, attack) ->     Character = character_instance:get_character(CharacterInstance), -   CharacterStatistics = character:get_statistics(Character), -   Battlemap = battle:get_battlemap(Battle),     TargetIX = BattleAction#attack.target_ix,     TargetCharacterInstance = battle:get_character_instance(TargetIX, Battle),     TargetCharacter = character_instance:get_character(TargetCharacterInstance), -   TargetCharacterStatistics = character:get_statistics(TargetCharacter),     Range =        location:dist @@ -202,54 +257,14 @@ when is_record(BattleAction, attack) ->     AttackSequence =        attack:get_sequence(Range, AttackingWeapon, DefendingWeapon), -   AttackPlannedEffects = -      lists:map +   {AttackEffects, RemainingAttackerHealth, RemainingDefenderHealth} = +      handle_attack_sequence        ( -         fun (AttackStep) -> -            attack:get_description_of -            ( -               AttackStep, -               CharacterStatistics, -               TargetCharacterStatistics -            ) -         end, +         CharacterInstance, +         TargetCharacterInstance,           AttackSequence        ), -   % FIXME: may warrant a separate function -   {AttackEffects, RemainingAttakerHealth, RemainingDefenderHealth} = -      lists:foldl -      ( -         fun -         ( -            AttackEffectCandidate, -            {AttackValidEffects, AttackerHealth, DefenderHealth } -         ) -> -            {AttackResult, NewAttackerHealth, NewDefenderHealth} = -               attack:apply_to_healths -               ( -                  AttackPlannedEffect, -                  AttackerHealth, -                  DefenderHealth -               ), -            case AttackResult of -               nothing -> {AttackValidEffects, AttackerHealth, DefenderHealth}; -               _ -> -                  { -                     [AttackResult|AttackValidEffects], -                     NewAttackerHealth, -                     NewDefenderHealth -                  } -            end, -         end, -         { -            [], -            character_instance:get_current_health(CharacterInstance), -            character_instance:get_current_health(TargetCharacterInstance) -         }, -         AttackPlannedEffects -      ), -     UpdatedCharacterInstance =        character_instance:set_current_health        ( @@ -267,12 +282,12 @@ when is_record(BattleAction, attack) ->              TargetCharacterInstance           ),           Battle -      ) +      ),     {        % TODO: hide that into database_diff structs.        [], % TODO        % TODO: hide that into turn_result structs. -      AttackEffets, +      AttackEffects,        UpdatedCharacterInstance,        UpdatedBattle     }. | 


