summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle')
-rw-r--r--src/battle/btl_shim.erl6
-rw-r--r--src/battle/game-logic/btl_movement.erl4
-rw-r--r--src/battle/reply/btl_set_map.erl4
-rw-r--r--src/battle/struct/btl_battle.erl6
-rw-r--r--src/battle/struct/btl_map.erl18
-rw-r--r--src/battle/struct/btl_tile.erl49
-rw-r--r--src/battle/struct/btl_tile.erl.m449
7 files changed, 85 insertions, 51 deletions
diff --git a/src/battle/btl_shim.erl b/src/battle/btl_shim.erl
index e13660c..ec5627a 100644
--- a/src/battle/btl_shim.erl
+++ b/src/battle/btl_shim.erl
@@ -158,15 +158,15 @@ generate_random_battle () ->
UsedTileIDs =
array:sparse_foldl
(
- fun (_IX, TileID, CurrentTileIDs) ->
+ fun (_IX, TileInstance, CurrentTileIDs) ->
sets:add_element
(
- btl_tile:extract_main_class_id(TileID),
+ btl_tile:extract_main_class_id(TileInstance),
CurrentTileIDs
)
end,
sets:new(),
- btl_map:get_tile_ids(Map)
+ btl_map:get_tile_instances(Map)
),
Battle =
diff --git a/src/battle/game-logic/btl_movement.erl b/src/battle/game-logic/btl_movement.erl
index e19e7f7..ec903e8 100644
--- a/src/battle/game-logic/btl_movement.erl
+++ b/src/battle/game-logic/btl_movement.erl
@@ -30,8 +30,8 @@ cross (_Map, _ForbiddenLocations, [], Cost, Location) ->
{Location, Cost};
cross (Map, ForbiddenLocations, [Step|NextSteps], Cost, Location) ->
NextLocation = btl_location:apply_direction(Step, Location),
- NextTileID = btl_map:get_tile_id(NextLocation, Map),
- NextTileClassID = btl_tile:extract_main_class_id(NextTileID),
+ NextTileInstance = btl_map:get_tile_instance(NextLocation, Map),
+ NextTileClassID = btl_tile:extract_main_class_id(NextTileInstance),
NextTile = btl_tile:from_class_id(NextTileClassID),
NextCost = (Cost + btl_tile:get_cost(NextTile)),
IsForbidden =
diff --git a/src/battle/reply/btl_set_map.erl b/src/battle/reply/btl_set_map.erl
index e7e4f25..c0dd2ca 100644
--- a/src/battle/reply/btl_set_map.erl
+++ b/src/battle/reply/btl_set_map.erl
@@ -27,8 +27,8 @@ generate (Map) ->
<<"t">>,
lists:map
(
- fun btl_tile:id_to_int_list/1,
- array:sparse_to_list(btl_map:get_tile_ids(Map))
+ fun btl_tile:instance_to_int_list/1,
+ array:sparse_to_list(btl_map:get_tile_instances(Map))
)
}
]
diff --git a/src/battle/struct/btl_battle.erl b/src/battle/struct/btl_battle.erl
index 22c96f6..b7f158a 100644
--- a/src/battle/struct/btl_battle.erl
+++ b/src/battle/struct/btl_battle.erl
@@ -12,7 +12,7 @@
id :: id(),
used_armor_ids :: list(shr_armor:id()),
used_weapon_ids :: list(shr_weapon:id()),
- used_tile_ids :: list(btl_tile:id()),
+ used_tile_ids :: list(btl_tile:class_id()),
map :: btl_map:type(),
characters :: array:array(btl_character:type()),
players :: array:array(btl_player:type()),
@@ -92,7 +92,7 @@ get_used_weapon_ids (Battle) -> Battle#battle.used_weapon_ids.
-spec get_used_armor_ids (type()) -> list(shr_armor:id()).
get_used_armor_ids (Battle) -> Battle#battle.used_armor_ids.
--spec get_used_tile_ids (type()) -> list(btl_tile:id()).
+-spec get_used_tile_ids (type()) -> list(btl_tile:class_id()).
get_used_tile_ids (Battle) -> Battle#battle.used_tile_ids.
-spec get_map (type()) -> btl_map:type().
@@ -189,7 +189,7 @@ set_current_player_turn (PlayerTurn, Battle) ->
list(btl_character:type()),
list(shr_weapon:id()),
list(shr_armor:id()),
- list(btl_tile:id())
+ list(btl_tile:class_id())
)
-> type().
new (ID, PlayersAsList, Map, CharactersAsList, UWIDs, UAIDs, UTIDs) ->
diff --git a/src/battle/struct/btl_map.erl b/src/battle/struct/btl_map.erl
index ce39b19..cfa8c1e 100644
--- a/src/battle/struct/btl_map.erl
+++ b/src/battle/struct/btl_map.erl
@@ -12,7 +12,7 @@
id :: id(),
width :: integer(),
height :: integer(),
- tile_ids :: array:array(btl_tile:id())
+ tile_ids :: array:array(btl_tile:instance())
}
).
@@ -30,8 +30,8 @@
get_id/1,
get_width/1,
get_height/1,
- get_tile_ids/1,
- get_tile_id/2
+ get_tile_instances/1,
+ get_tile_instance/2
]
).
@@ -72,11 +72,11 @@ get_width (Map) -> Map#map.width.
-spec get_height (type()) -> integer().
get_height (Map) -> Map#map.height.
--spec get_tile_ids (type()) -> array:array(btl_tile:id()).
-get_tile_ids (Map) -> Map#map.tile_ids.
+-spec get_tile_instances (type()) -> array:array(btl_tile:instance()).
+get_tile_instances (Map) -> Map#map.tile_ids.
--spec get_tile_id (btl_location:type(), type()) -> btl_tile:id().
-get_tile_id (Location, Map) ->
+-spec get_tile_instance (btl_location:type(), type()) -> btl_tile:instance().
+get_tile_instance (Location, Map) ->
TileIX = location_to_array_index(Map#map.width, Location),
array:get(TileIX, Map#map.tile_ids).
@@ -89,12 +89,12 @@ get_tile_id (Location, Map) ->
)
-> type().
from_list (ID, Width, Height, List) ->
- TileIDs = lists:map(fun btl_tile:id_from_ints/1, List),
+ TileInstances = lists:map(fun btl_tile:instance_from_ints/1, List),
#map
{
id = list_to_binary(integer_to_list(ID)),
width = Width,
height = Height,
- tile_ids = array:from_list(TileIDs)
+ tile_ids = array:from_list(TileInstances)
}.
diff --git a/src/battle/struct/btl_tile.erl b/src/battle/struct/btl_tile.erl
index 60886ca..45e8ad3 100644
--- a/src/battle/struct/btl_tile.erl
+++ b/src/battle/struct/btl_tile.erl
@@ -14,11 +14,14 @@
).
-opaque class_id() :: non_neg_integer().
--opaque id() :: {class_id(), class_id(), non_neg_integer()}.
+-opaque instance() :: (
+ {class_id(), class_id(), non_neg_integer()}
+ | non_neg_integer()
+).
-opaque type() :: #tile{}.
--export_type([type/0, class_id/0, id/0]).
+-export_type([type/0, class_id/0, instance/0]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -36,8 +39,8 @@
-export
(
[
- id_to_int_list/1,
- id_from_ints/1
+ instance_to_int_list/1,
+ instance_from_ints/1
]
).
@@ -58,14 +61,23 @@
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec extract_main_class_id (id()) -> class_id().
-extract_main_class_id ({M, _, _}) -> M.
+-spec extract_main_class_id (instance()) -> class_id().
+extract_main_class_id (M) when is_integer(M) ->
+ M;
+extract_main_class_id ({M, _, _}) ->
+ M.
--spec extract_border_class_id (id()) -> class_id().
-extract_border_class_id ({_, B, _}) -> B.
+-spec extract_border_class_id (instance()) -> class_id().
+extract_border_class_id (M) when is_integer(M) ->
+ M;
+extract_border_class_id ({_, B, _}) ->
+ B.
--spec extract_variant_ix (id()) -> class_id().
-extract_variant_ix ({_, _, V}) -> V.
+-spec extract_variant_ix (instance()) -> non_neg_integer().
+extract_variant_ix (M) when is_integer(M) ->
+ 0;
+extract_variant_ix ({_, _, V}) ->
+ V.
-spec from_class_id (class_id()) -> type().
@@ -112,11 +124,16 @@ get_cost (Tile) -> Tile#tile.cost.
-spec get_name (type()) -> binary().
get_name (Tile) -> Tile#tile.name.
--spec id_from_ints
+-spec instance_from_ints
(
{non_neg_integer(), non_neg_integer(), non_neg_integer()}
- ) -> id().
-id_from_ints ({M, B, V}) -> {M, B, V}.
-
--spec id_to_int_list (id()) -> list(non_neg_integer()).
-id_to_int_list ({M, B, V}) -> [M, B, V].
+ ) -> instance().
+instance_from_ints ({M, B, V}) ->
+ case (M == B) of
+ true -> M;
+ _ -> {M, B, V}
+ end.
+
+-spec instance_to_int_list (instance()) -> list(non_neg_integer()).
+instance_to_int_list (M) when is_integer(M) -> [M];
+instance_to_int_list ({M, B, V}) -> [M, B, V].
diff --git a/src/battle/struct/btl_tile.erl.m4 b/src/battle/struct/btl_tile.erl.m4
index 170b855..3b3ee53 100644
--- a/src/battle/struct/btl_tile.erl.m4
+++ b/src/battle/struct/btl_tile.erl.m4
@@ -14,11 +14,14 @@
).
-opaque class_id() :: non_neg_integer().
--opaque id() :: {class_id(), class_id(), non_neg_integer()}.
+-opaque instance() :: (
+ {class_id(), class_id(), non_neg_integer()}
+ | non_neg_integer()
+).
-opaque type() :: #tile{}.
--export_type([type/0, class_id/0, id/0]).
+-export_type([type/0, class_id/0, instance/0]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -36,8 +39,8 @@
-export
(
[
- id_to_int_list/1,
- id_from_ints/1
+ instance_to_int_list/1,
+ instance_from_ints/1
]
).
@@ -58,14 +61,23 @@
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec extract_main_class_id (id()) -> class_id().
-extract_main_class_id ({M, _, _}) -> M.
+-spec extract_main_class_id (instance()) -> class_id().
+extract_main_class_id (M) when is_integer(M) ->
+ M;
+extract_main_class_id ({M, _, _}) ->
+ M.
--spec extract_border_class_id (id()) -> class_id().
-extract_border_class_id ({_, B, _}) -> B.
+-spec extract_border_class_id (instance()) -> class_id().
+extract_border_class_id (M) when is_integer(M) ->
+ M;
+extract_border_class_id ({_, B, _}) ->
+ B.
--spec extract_variant_ix (id()) -> class_id().
-extract_variant_ix ({_, _, V}) -> V.
+-spec extract_variant_ix (instance()) -> non_neg_integer().
+extract_variant_ix (M) when is_integer(M) ->
+ 0;
+extract_variant_ix ({_, _, V}) ->
+ V.
-spec from_class_id (class_id()) -> type().
m4_include(__MAKEFILE_DATA_DIR/tile/global.m4.conf)m4_dnl
@@ -86,11 +98,16 @@ get_cost (Tile) -> Tile#tile.cost.
-spec get_name (type()) -> binary().
get_name (Tile) -> Tile#tile.name.
--spec id_from_ints
+-spec instance_from_ints
(
{non_neg_integer(), non_neg_integer(), non_neg_integer()}
- ) -> id().
-id_from_ints ({M, B, V}) -> {M, B, V}.
-
--spec id_to_int_list (id()) -> list(non_neg_integer()).
-id_to_int_list ({M, B, V}) -> [M, B, V].
+ ) -> instance().
+instance_from_ints ({M, B, V}) ->
+ case (M == B) of
+ true -> M;
+ _ -> {M, B, V}
+ end.
+
+-spec instance_to_int_list (instance()) -> list(non_neg_integer()).
+instance_to_int_list (M) when is_integer(M) -> [M];
+instance_to_int_list ({M, B, V}) -> [M, B, V].