| 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/battle.erl | |
| parent | 45434f444962ef9c852e8122fe86ae65c9c49436 (diff) | |
Still working on it...
Diffstat (limited to 'src/struct/battle.erl')
| -rw-r--r-- | src/struct/battle.erl | 227 | 
1 files changed, 227 insertions, 0 deletions
| diff --git a/src/struct/battle.erl b/src/struct/battle.erl new file mode 100644 index 0000000..bfa0e8d --- /dev/null +++ b/src/struct/battle.erl @@ -0,0 +1,227 @@ +-module(battle). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-opaque id() :: binary(). + +-record +( +   battle, +   { +      id :: id(), +      battlemap :: battlemap:struct(), +      character_instances :: array:array(character_instance:struct()), +      player_ids :: array:array(player:id()), +      current_player_turn :: player_turn:struct(), +      last_turns_effects :: list(any()) +   } +). + +-opaque struct() :: #battle{}. + +-export_type([struct/0, id/0]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% Accessors +-export +( +   [ +      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 +   ] +). + +-export +( +   [ +      random/4 +   ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% Accessors +-spec get_id (struct()) -> id(). +get_id (Battle) -> Battle#battle.id. + +-spec get_battlemap (struct()) -> battlemap:struct(). +get_battlemap (Battle) -> +   Battle#battle.battlemap. + +-spec get_character_instances (struct()) -> +   array:array(character_instance:struct()). +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 (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 (Battle) -> +   Battle#battle.current_player_turn. + +-spec get_last_turns_effects (struct()) -> list(any()). +get_last_turns_effects (Battle) -> +   Battle#battle.last_turns_effects. + +-spec set_battlemap (battlemap:struct(), struct()) -> struct(). +set_battlemap (Battlemap, Battle) -> +   Battle#battle +   { +      battlemap = Battlemap +   }. + +-spec set_character_instances +   ( +      array:array(character_instance:struct()), +      struct() +   ) +   -> struct(). +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, Battle) -> +   Battle#battle +   { +      player_ids = Players +   }. + +-spec set_current_player_turn +   ( +      player_turn:struct(), +      struct() +   ) +   -> struct(). +set_current_player_turn (PlayerTurn, Battle) -> +   Battle#battle +   { +      current_player_turn = PlayerTurn +   }. + +-spec set_last_turns_effects +   ( +      list(any()), +      struct() +   ) +   -> struct(). +set_last_turns_effects (Effects, Battle) -> +   Battle#battle +   { +      last_turns_effects = Effects +   }. + +-spec random +   ( +      id(), +      list(player:id()), +      battlemap:struct(), +      list(character:struct()) +   ) +   -> struct(). +random (ID, PlayersAsList, Battlemap, Characters) -> +   BattlemapWidth = battlemap:get_width(Battlemap), +   BattlemapHeight = battlemap:get_height(Battlemap), +   {CharacterInstancesAsList, _ForbiddenLocations} = +      lists:mapfoldl +      ( +         fun (Character, ForbiddenLocations) -> +            CharacterOwner = character:get_owner_id(Character), +            NewCharacterInstance = +               character_instance:random +               ( +                  Character, +                  BattlemapWidth, +                  BattlemapHeight, +                  ForbiddenLocations +               ), +            NewCharacterInstanceActive = +               case CharacterOwner of +                  <<"0">> -> +                     character_instance:set_is_active +                     ( +                        true, +                        NewCharacterInstance +                     ); + +                  _ -> +                     NewCharacterInstance +               end, +            NewCharacterInstanceLocation = +               character_instance:get_location(NewCharacterInstanceActive), +            { +               NewCharacterInstanceActive, +               [NewCharacterInstanceLocation|ForbiddenLocations] +            } +         end, +         [], +         Characters +      ), + +   #battle +   { +      id = ID, +      battlemap = Battlemap, +      character_instances = array:from_list(CharacterInstancesAsList), +      player_ids = array:from_list(PlayersAsList), +      current_player_turn = player_turn:new(0, 0), +      last_turns_effects = [] +   }. | 


