summaryrefslogtreecommitdiff |
diff options
author | nsensfel <SpamShield0@noot-noot.org> | 2018-07-11 17:54:14 +0200 |
---|---|---|
committer | nsensfel <SpamShield0@noot-noot.org> | 2018-07-11 17:54:14 +0200 |
commit | fde827cba1ff3d889135c74ee1978098465fd200 (patch) | |
tree | d6022f800aa8226bf79a26a19189965c8cbfb2fe /src/battle/struct/btl_battle.erl | |
parent | df59024199c387903e3d4a901171939a358489d3 (diff) |
"Battlemap" -> "Battle".
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. |