| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/battle/struct/btl_battle.erl')
| -rw-r--r-- | src/battle/struct/btl_battle.erl | 216 | 
1 files changed, 216 insertions, 0 deletions
| diff --git a/src/battle/struct/btl_battle.erl b/src/battle/struct/btl_battle.erl new file mode 100644 index 0000000..8befc4e --- /dev/null +++ b/src/battle/struct/btl_battle.erl @@ -0,0 +1,216 @@ +-module(btl_battle). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-type id() :: binary(). + +-record +( +   battle, +   { +      id :: id(), +      used_armor_ids :: list(sh_armor:id()), +      used_weapon_ids :: list(sh_weapon:id()), +      used_tile_ids :: list(btl_tile:id()), +      battlemap :: btl_battlemap:type(), +      characters :: array:array(btl_character:type()), +      players :: array:array(btl_player:type()), +      current_player_turn :: btl_player_turn:type() +   } +). + +-opaque type() :: #battle{}. + +-export_type([type/0, id/0]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% Accessors +-export +( +   [ +      get_id/1, +      get_used_weapon_ids/1, +      get_used_armor_ids/1, +      get_used_tile_ids/1, +      get_battlemap/1, +      get_characters/1, +      get_character/2, +      get_players/1, +      get_player/2, +      get_current_player_turn/1, +      get_encoded_last_turns_effects/1, + +      set_battlemap/2, +      set_characters/2, +      set_character/3, +      set_players/2, +      set_player/3, +      set_current_player_turn/2, + +      get_characters_field/0, +      get_players_field/0, +      get_current_player_turn_field/0 +   ] +). + +-export +( +   [ +      new/7 +   ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +get_all_timelines (Result, CurrentIndex, EndPoint, ArraySize, Players) -> +   Player = array:get(CurrentIndex, Players), +   Timeline = btl_player:get_timeline(Player), +   NextIndex = ((CurrentIndex + 1) rem ArraySize), +   NextResult = (Timeline ++ Result), +   case CurrentIndex of +      EndPoint -> +         NextResult; + +      _ -> +         get_all_timelines(NextResult, NextIndex, EndPoint, ArraySize, Players) +   end. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% Accessors +-spec get_id (type()) -> id(). +get_id (Battle) -> Battle#battle.id. + +-spec get_used_weapon_ids (type()) -> list(sh_weapon:id()). +get_used_weapon_ids (Battle) -> Battle#battle.used_weapon_ids. + +-spec get_used_armor_ids (type()) -> list(sh_armor:id()). +get_used_armor_ids (Battle) -> Battle#battle.used_armor_ids. + +-spec get_used_tile_ids (type()) -> list(btl_tile:id()). +get_used_tile_ids (Battle) -> Battle#battle.used_tile_ids. + +-spec get_battlemap (type()) -> btl_battlemap:type(). +get_battlemap (Battle) -> Battle#battle.battlemap. + +-spec get_characters (type()) -> array:array(btl_character:type()). +get_characters (Battle) -> Battle#battle.characters. + +-spec get_character (non_neg_integer(), type()) -> btl_character:type(). +get_character (IX, Battle) -> +   array:get(IX, Battle#battle.characters). + +-spec get_players (type()) -> array:array(btl_player:type()). +get_players (Battle) -> +   Battle#battle.players. + +-spec get_player (non_neg_integer(), type()) -> btl_player:type(). +get_player (IX, Battle) -> +   array:get(IX, Battle#battle.players). + +-spec get_current_player_turn (type()) -> btl_player_turn:type(). +get_current_player_turn (Battle) -> +   Battle#battle.current_player_turn. + +-spec get_encoded_last_turns_effects (type()) -> list(any()). +get_encoded_last_turns_effects (Battle) -> +   CurrentPlayerTurn = Battle#battle.current_player_turn, +   Players = Battle#battle.players, +   CurrentPlayerIX = btl_player_turn:get_player_ix(CurrentPlayerTurn), + +   PlayersCount = array:size(Players), +   StartingPoint = ((CurrentPlayerIX + 1) rem PlayersCount), +   get_all_timelines([], StartingPoint, CurrentPlayerIX, PlayersCount, Players). + +-spec set_battlemap (btl_battlemap:type(), type()) -> type(). +set_battlemap (Battlemap, Battle) -> +   Battle#battle +   { +      battlemap = Battlemap +   }. + +-spec set_characters (array:array(btl_character:type()), type()) -> type(). +set_characters (Characters, Battle) -> +   Battle#battle +   { +      characters = Characters +   }. + +-spec set_character (non_neg_integer(), btl_character:type(), type()) -> type(). +set_character (IX, Character, Battle) -> +   Battle#battle +   { +      characters = +         array:set +         ( +            IX, +            Character, +            Battle#battle.characters +         ) +   }. + +-spec set_players (array:array(btl_player:type()), type()) -> type(). +set_players (Players, Battle) -> +   Battle#battle +   { +      players = Players +   }. + +-spec set_player (non_neg_integer(), btl_player:type(), type()) -> type(). +set_player (IX, Player, Battle) -> +   Battle#battle +   { +      players = +         array:set +         ( +            IX, +            Player, +            Battle#battle.players +         ) +   }. + +-spec set_current_player_turn (btl_player_turn:type(), type()) -> type(). +set_current_player_turn (PlayerTurn, Battle) -> +   Battle#battle +   { +      current_player_turn = PlayerTurn +   }. + +-spec new +   ( +      id(), +      list(btl_player:type()), +      btl_battlemap:type(), +      list(btl_character:type()), +      list(sh_weapon:id()), +      list(sh_armor:id()), +      list(btl_tile:id()) +   ) +   -> type(). +new (ID, PlayersAsList, Battlemap, CharactersAsList, UWIDs, UAIDs, UTIDs) -> +   #battle +   { +      id = ID, +      used_weapon_ids = UWIDs, +      used_armor_ids = UAIDs, +      used_tile_ids = UTIDs, +      battlemap = Battlemap, +      characters = array:from_list(CharactersAsList), +      players = array:from_list(PlayersAsList), +      current_player_turn = btl_player_turn:new(0, 0) +   }. + + +-spec get_characters_field () -> non_neg_integer(). +get_characters_field () -> #battle.characters. + +-spec get_players_field () -> non_neg_integer(). +get_players_field () -> #battle.players. + +-spec get_current_player_turn_field () -> non_neg_integer(). +get_current_player_turn_field () -> #battle.current_player_turn. | 


