summaryrefslogtreecommitdiff |
diff options
author | nsensfel <SpamShield0@noot-noot.org> | 2018-06-18 18:35:53 +0200 |
---|---|---|
committer | nsensfel <SpamShield0@noot-noot.org> | 2018-06-18 18:35:53 +0200 |
commit | b251f5165ea3530747657b522773c4a8f44b16fa (patch) | |
tree | 68d830acec3fe8c171429ac903a16944ed31120c /src/battlemap/struct | |
parent | a174bc2cc95b94c0b7d786e764c48de72206d7c5 (diff) |
Separates tiles from their icon images IDs.
The client has yet to be updated to support the new exchanges.
Diffstat (limited to 'src/battlemap/struct')
-rw-r--r-- | src/battlemap/struct/bm_battle.erl | 15 | ||||
-rw-r--r-- | src/battlemap/struct/bm_battlemap.erl | 61 | ||||
-rw-r--r-- | src/battlemap/struct/bm_tile.erl | 102 |
3 files changed, 106 insertions, 72 deletions
diff --git a/src/battlemap/struct/bm_battle.erl b/src/battlemap/struct/bm_battle.erl index c4207e8..4c93460 100644 --- a/src/battlemap/struct/bm_battle.erl +++ b/src/battlemap/struct/bm_battle.erl @@ -10,8 +10,9 @@ battle, { id :: id(), - used_armor_ids:: list(sh_armor:id()), + used_armor_ids :: list(sh_armor:id()), used_weapon_ids :: list(sh_weapon:id()), + used_tile_ids :: list(bm_tile:id()), battlemap :: bm_battlemap:type(), characters :: array:array(bm_character:type()), players :: array:array(bm_player:type()), @@ -33,6 +34,7 @@ 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, @@ -57,7 +59,7 @@ -export ( [ - new/6 + new/7 ] ). @@ -90,6 +92,9 @@ 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(bm_tile:id()). +get_used_tile_ids (Battle) -> Battle#battle.used_tile_ids. + -spec get_battlemap (type()) -> bm_battlemap:type(). get_battlemap (Battle) -> Battle#battle.battlemap. @@ -183,15 +188,17 @@ set_current_player_turn (PlayerTurn, Battle) -> bm_battlemap:type(), list(bm_character:type()), list(sh_weapon:id()), - list(sh_armor:id()) + list(sh_armor:id()), + list(bm_tile:id()) ) -> type(). -new (ID, PlayersAsList, Battlemap, CharactersAsList, UWIDs, UAIDs) -> +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), diff --git a/src/battlemap/struct/bm_battlemap.erl b/src/battlemap/struct/bm_battlemap.erl index 6c9fbf9..77d3041 100644 --- a/src/battlemap/struct/bm_battlemap.erl +++ b/src/battlemap/struct/bm_battlemap.erl @@ -12,7 +12,7 @@ id :: id(), width :: integer(), height :: integer(), - tile_ids :: array:array(bm_tile:id()) + tile_class_ids :: array:array(bm_tile:class_id()) } ). @@ -30,15 +30,14 @@ get_id/1, get_width/1, get_height/1, - get_tile_ids/1, - get_tile_id/2 + get_tile_class_ids/1, + get_tile_class_id/2 ] ). -export ( [ - random/3, from_list/4 ] ). @@ -46,27 +45,6 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec generate_random_tile_ids - ( - bm_tile:id(), - list(bm_tile:id()), - non_neg_integer(), - non_neg_integer(), - non_neg_integer() - ) - -> list(bm_tile:id()). -generate_random_tile_ids (_PreviousTileID, Result, _X, 0, _Width) -> - Result; -generate_random_tile_ids (PreviousTileID, Result, 0, Y, Width) -> - generate_random_tile_ids(PreviousTileID, Result, Width, (Y - 1), Width); -generate_random_tile_ids (PreviousTileID, Result, X, Y, Width) -> - NewTile = - case sh_roll:percentage() of - N when (N >= 10) -> PreviousTileID; - _ -> bm_tile:random_id() - end, - generate_random_tile_ids(NewTile, [NewTile|Result], (X - 1), Y, Width). - -spec location_to_array_index ( non_neg_integer(), @@ -94,32 +72,13 @@ get_width (Battlemap) -> Battlemap#battlemap.width. -spec get_height (type()) -> integer(). get_height (Battlemap) -> Battlemap#battlemap.height. --spec get_tile_ids (type()) -> array:array(bm_tile:id()). -get_tile_ids (Battlemap) -> Battlemap#battlemap.tile_ids. +-spec get_tile_class_ids (type()) -> array:array(bm_tile:class_id()). +get_tile_class_ids (Battlemap) -> Battlemap#battlemap.tile_class_ids. --spec get_tile_id (bm_location:type(), type()) -> bm_tile:id(). -get_tile_id (Location, Battlemap) -> +-spec get_tile_class_id (bm_location:type(), type()) -> bm_tile:class_id(). +get_tile_class_id (Location, Battlemap) -> TileIX = location_to_array_index(Battlemap#battlemap.width, Location), - array:get(TileIX, Battlemap#battlemap.tile_ids). - --spec random - ( - non_neg_integer(), - non_neg_integer(), - non_neg_integer() - ) - -> type(). -random (ID, Width, Height) -> - InitialTile = bm_tile:random_id(), - TileIDs = generate_random_tile_ids(InitialTile, [], Width, Height, Width), - - #battlemap - { - id = list_to_binary(integer_to_list(ID)), - width = Width, - height = Height, - tile_ids = array:from_list(TileIDs) - }. + array:get(TileIX, Battlemap#battlemap.tile_class_ids). -spec from_list ( @@ -130,12 +89,12 @@ random (ID, Width, Height) -> ) -> type(). from_list (ID, Width, Height, List) -> - TileIDs = lists:map(fun bm_tile:id_from_int/1, List), + TileClassIDs = lists:map(fun bm_tile:class_id_from_int/1, List), #battlemap { id = list_to_binary(integer_to_list(ID)), width = Width, height = Height, - tile_ids = array:from_list(TileIDs) + tile_class_ids = array:from_list(TileClassIDs) }. diff --git a/src/battlemap/struct/bm_tile.erl b/src/battlemap/struct/bm_tile.erl index ce04898..36c22dc 100644 --- a/src/battlemap/struct/bm_tile.erl +++ b/src/battlemap/struct/bm_tile.erl @@ -3,17 +3,35 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-record +( + tile, + { + id :: id(), + name :: binary(), + cost :: non_neg_integer(), + class_range_min :: non_neg_integer(), + class_range_max :: non_neg_integer() + } +). + -opaque id() :: non_neg_integer(). --opaque type() :: id(). +-opaque class_id() :: non_neg_integer(). +-opaque type() :: #tile{}. --export_type([type/0, id/0]). +-export_type([type/0, class_id/0, id/0]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -export ( [ + get_id/1, + get_name/1, get_cost/1, + get_range_minimum/1, + get_range_maximum/1, + from_id/1, cost_when_oob/0 ] ). @@ -21,8 +39,8 @@ -export ( [ - random_id/0, - id_from_int/1 + class_id_to_type_id/1, + class_id_from_int/1 ] ). @@ -33,21 +51,71 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +-spec class_id_to_type_id (class_id()) -> id(). +class_id_to_type_id (ClassID) -> + case ClassID of + 0 -> 0; + 1 -> 1; + 2 -> 2; + N when ((N >= 3) and (N =< 16)) -> 3 + end. + +-spec from_id (id()) -> type(). +from_id (0) -> + #tile + { + id = 0, + name = <<"[Grassland] Grass">>, + cost = 6, + class_range_min = 1, + class_range_max = 1 + }; +from_id (1) -> + #tile + { + id = 1, + name = <<"[Grassland] Mushroom Infestation">>, + cost = 12, + class_range_min = 1, + class_range_max = 1 + }; +from_id (2) -> + #tile + { + id = 2, + name = <<"[Grassland] Tree Remains">>, + cost = 24, + class_range_min = 2, + class_range_max = 2 + }; +from_id (3) -> + #tile + { + id = 2, + name = <<"[Grassland] Clear Water">>, + cost = cost_when_oob(), + class_range_min = 3, + class_range_max = 17 + }. + -spec cost_when_oob () -> non_neg_integer(). cost_when_oob () -> 255. --spec get_cost (id()) -> non_neg_integer(). -get_cost (N) -> - case N of - 0 -> 6; - 1 -> 12; - 2 -> 24; - _ -> cost_when_oob() - end. +-spec get_id (type()) -> non_neg_integer(). +get_id (Tile) -> Tile#tile.id. + +-spec get_cost (type()) -> non_neg_integer(). +get_cost (Tile) -> Tile#tile.cost. + +-spec get_name (type()) -> binary(). +get_name (Tile) -> Tile#tile.name. + +-spec get_range_minimum (type()) -> non_neg_integer(). +get_range_minimum (Tile) -> Tile#tile.class_range_min. --spec random_id () -> id(). -random_id () -> - sh_roll:between(0, 15). +-spec get_range_maximum (type()) -> non_neg_integer(). +get_range_maximum (Tile) -> Tile#tile.class_range_max. --spec id_from_int (non_neg_integer()) -> id(). -id_from_int (I) -> I. +-spec class_id_from_int (non_neg_integer()) -> id(). +class_id_from_int (I) -> I. |