summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/battle/mechanic/turn_action/btl_turn_actions_move.erl4
-rw-r--r--src/battle/query/btl_load.erl9
-rw-r--r--src/battle/reply/btl_add_tile.erl2
-rw-r--r--src/battle/struct/btl_battle.erl4
-rw-r--r--src/battle/struct/btl_character_current_data.erl4
-rw-r--r--src/bounty/bnt_join_battle.erl4
-rw-r--r--src/map/query/map_load.erl2
-rw-r--r--src/map/query/map_update.erl11
-rw-r--r--src/shared/reply/shr_set_map.erl15
-rw-r--r--src/shared/struct/map/shr_map.erl17
-rw-r--r--src/shared/struct/map/shr_tile.erl.m42
-rw-r--r--src/shared/struct/map/shr_tile_instance.erl29
-rw-r--r--src/shared/util/shr_array_tuple.erl4
13 files changed, 62 insertions, 45 deletions
diff --git a/src/battle/mechanic/turn_action/btl_turn_actions_move.erl b/src/battle/mechanic/turn_action/btl_turn_actions_move.erl
index 814239b..db46ef0 100644
--- a/src/battle/mechanic/turn_action/btl_turn_actions_move.erl
+++ b/src/battle/mechanic/turn_action/btl_turn_actions_move.erl
@@ -30,8 +30,8 @@ cross (_Map, _ForbiddenLocations, [], Cost, Location) ->
cross (Map, ForbiddenLocations, [Step|NextSteps], Cost, Location) ->
NextLocation = shr_location:apply_direction(Step, Location),
NextTileInstance = shr_map:get_tile_instance(NextLocation, Map),
- NextTileClassID = shr_tile:extract_main_class_id(NextTileInstance),
- NextTile = shr_tile:from_class_id(NextTileClassID),
+ NextTileClassID = shr_tile_instance:get_tile_id(NextTileInstance),
+ NextTile = shr_tile:from_id(NextTileClassID),
NextCost = (Cost + shr_tile:get_cost(NextTile)),
IsForbidden =
lists:foldl
diff --git a/src/battle/query/btl_load.erl b/src/battle/query/btl_load.erl
index eec8edb..7748c68 100644
--- a/src/battle/query/btl_load.erl
+++ b/src/battle/query/btl_load.erl
@@ -100,7 +100,12 @@ generate_reply (QueryState, Input) ->
btl_battle:get_encoded_last_turns_effects(Battle)
),
- SetMap = shr_set_map:generate(btl_battle:get_map(Battle)),
+ SetMap =
+ shr_set_map:generate
+ (
+ fun (_TriggerName) -> false end,
+ btl_battle:get_map(Battle)
+ ),
AddCharList =
lists:map
@@ -151,7 +156,7 @@ generate_reply (QueryState, Input) ->
lists:map
(
fun (TileClassID) ->
- btl_add_tile:generate(shr_tile:from_class_id(TileClassID))
+ btl_add_tile:generate(shr_tile:from_id(TileClassID))
end,
ordsets:to_list(btl_battle:get_used_tile_ids(Battle))
),
diff --git a/src/battle/reply/btl_add_tile.erl b/src/battle/reply/btl_add_tile.erl
index bf76547..980628d 100644
--- a/src/battle/reply/btl_add_tile.erl
+++ b/src/battle/reply/btl_add_tile.erl
@@ -21,7 +21,7 @@ generate (Tile) ->
{
[
{<<"msg">>, <<"add_tile">>},
- {<<"id">>, shr_tile:get_class_id(Tile)},
+ {<<"id">>, shr_tile:get_id(Tile)},
{<<"nam">>, shr_tile:get_name(Tile)},
{<<"ct">>, shr_tile:get_cost(Tile)},
{<<"omni">>, shr_omnimods:encode(shr_tile:get_omnimods(Tile))}
diff --git a/src/battle/struct/btl_battle.erl b/src/battle/struct/btl_battle.erl
index 7237072..2a09244 100644
--- a/src/battle/struct/btl_battle.erl
+++ b/src/battle/struct/btl_battle.erl
@@ -12,7 +12,7 @@
used_armor_ids :: ordsets:ordset(shr_armor:id()),
used_weapon_ids :: ordsets:ordset(shr_weapon:id()),
used_portrait_ids :: ordsets:ordset(shr_portrait:id()),
- used_tile_ids :: ordsets:ordset(shr_tile:class_id()),
+ used_tile_ids :: ordsets:ordset(shr_tile:id()),
map :: shr_map:type(),
characters :: orddict:orddict(non_neg_integer(), btl_character:type()),
players :: orddict:orddict(non_neg_integer(), btl_player:type()),
@@ -99,7 +99,7 @@ get_used_weapon_ids (Battle) -> Battle#battle.used_weapon_ids.
-spec get_used_armor_ids (type()) -> ordsets:ordset(shr_armor:id()).
get_used_armor_ids (Battle) -> Battle#battle.used_armor_ids.
--spec get_used_tile_ids (type()) -> ordsets:ordset(shr_tile:class_id()).
+-spec get_used_tile_ids (type()) -> ordsets:ordset(shr_tile:id()).
get_used_tile_ids (Battle) -> Battle#battle.used_tile_ids.
-spec get_map (type()) -> shr_map:type().
diff --git a/src/battle/struct/btl_character_current_data.erl b/src/battle/struct/btl_character_current_data.erl
index 0be920b..3f25345 100644
--- a/src/battle/struct/btl_character_current_data.erl
+++ b/src/battle/struct/btl_character_current_data.erl
@@ -48,8 +48,8 @@
-> shr_omnimods:type().
location_to_omnimods (Location, Map) ->
TileInstance = shr_map:get_tile_instance(Location, Map),
- TileClassID = shr_tile:extract_main_class_id(TileInstance),
- Tile = shr_tile:from_class_id(TileClassID),
+ TileClassID = shr_tile_instance:get_tile_id(TileInstance),
+ Tile = shr_tile:from_id(TileClassID),
shr_tile:get_omnimods(Tile).
diff --git a/src/bounty/bnt_join_battle.erl b/src/bounty/bnt_join_battle.erl
index b89627b..78c4ea4 100644
--- a/src/bounty/bnt_join_battle.erl
+++ b/src/bounty/bnt_join_battle.erl
@@ -116,9 +116,9 @@ find_random_location (Map, ForbiddenLocations) ->
_ ->
Tile =
- shr_tile:from_class_id
+ shr_tile:from_id
(
- shr_tile:extract_main_class_id
+ shr_tile_instance:get_tile_id
(
shr_map:get_tile_instance(Candidate, Map)
)
diff --git a/src/map/query/map_load.erl b/src/map/query/map_load.erl
index b8126dd..19facf6 100644
--- a/src/map/query/map_load.erl
+++ b/src/map/query/map_load.erl
@@ -80,7 +80,7 @@ fetch_data (Input) ->
generate_reply (QueryState) ->
Map = QueryState#query_state.map,
- SetMap = shr_set_map:generate(Map),
+ SetMap = shr_set_map:generate(fun (_TriggerName) -> true end, Map),
Output = jiffy:encode([SetMap]),
Output.
diff --git a/src/map/query/map_update.erl b/src/map/query/map_update.erl
index 00f9a29..47d5ac5 100644
--- a/src/map/query/map_update.erl
+++ b/src/map/query/map_update.erl
@@ -12,7 +12,7 @@
map_id :: binary(),
w :: non_neg_integer(),
h :: non_neg_integer(),
- t :: list(list(binary()))
+ t :: list(map())
}
).
@@ -49,15 +49,6 @@ parse_input (Query) ->
true = (MapWidth > 0),
true = (MapHeight > 0),
true = (length(MapContent) == (MapWidth * MapHeight)),
- true =
- lists:all
- (
- fun (T) ->
- [_M|[_V|B]] = T,
- ((length(B) rem 2) == 0)
- end,
- MapContent
- ),
#input
{
diff --git a/src/shared/reply/shr_set_map.erl b/src/shared/reply/shr_set_map.erl
index b335302..0096b52 100644
--- a/src/shared/reply/shr_set_map.erl
+++ b/src/shared/reply/shr_set_map.erl
@@ -7,7 +7,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export([generate/1]).
+-export([generate/2]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -16,8 +16,13 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec generate (shr_map:type()) -> {list(any())}.
-generate (Map) ->
+-spec generate
+ (
+ fun ((shr_tile_instance:trigger_name()) -> boolean()),
+ shr_map:type()
+ )
+ -> {list(any())}.
+generate (TriggerVisibilityFun, Map) ->
{
[
{<<"msg">>, <<"set_map">>},
@@ -27,7 +32,9 @@ generate (Map) ->
<<"t">>,
lists:map
(
- fun shr_tile:instance_to_binary_list/1,
+ fun (E) ->
+ shr_tile_instance:encode(TriggerVisibilityFun, E)
+ end,
tuple_to_list(shr_map:get_tile_instances(Map))
)
}
diff --git a/src/shared/struct/map/shr_map.erl b/src/shared/struct/map/shr_map.erl
index c9f01b4..227c06b 100644
--- a/src/shared/struct/map/shr_map.erl
+++ b/src/shared/struct/map/shr_map.erl
@@ -97,7 +97,12 @@ get_height (Map) -> Map#map.height.
-> shr_array_tuple:array_tuple(shr_tile_instance:type()).
get_tile_instances (Map) -> Map#map.tile_instances.
--spec get_tile_instance (shr_location:type(), type()) -> shr_tile:instance().
+-spec get_tile_instance
+ (
+ shr_location:type(),
+ type()
+ )
+ -> shr_tile_instance:type().
get_tile_instance (Location, Map) ->
TileIX = location_to_index(Map#map.width, Location),
element((TileIX + 1), Map#map.tile_instances).
@@ -128,7 +133,7 @@ get_markers_field () -> #map.markers.
get_tile_instances_field () -> #map.tile_instances.
%%%% Utility
--spec get_used_tile_ids (type()) -> ordsets:ordset(shr_tile:class_id()).
+-spec get_used_tile_ids (type()) -> ordsets:ordset(shr_tile:id()).
get_used_tile_ids (Map) ->
UsedTileIDs =
lists:foldl
@@ -136,7 +141,7 @@ get_used_tile_ids (Map) ->
fun (TileInstance, CurrentTileIDs) ->
ordsets:add_element
(
- shr_tile:extract_main_class_id(TileInstance),
+ shr_tile_instance:get_tile_id(TileInstance),
CurrentTileIDs
)
end,
@@ -152,11 +157,11 @@ get_used_tile_ids (Map) ->
non_neg_integer(),
non_neg_integer(),
shr_map_marker:collection(),
- list(list(binary()))
+ list(map())
)
-> type().
update_from_list (Map, Width, Height, Markers, List) ->
- TileInstances = lists:map(fun shr_tile:instance_from_binary_list/1, List),
+ TileInstances = lists:map(fun shr_tile_instance:decode/1, List),
Map#map
{
@@ -168,7 +173,7 @@ update_from_list (Map, Width, Height, Markers, List) ->
-spec default (binary()) -> type().
default (Owner) ->
- DefaultTileInstance = shr_tile:default_tile_instance(),
+ DefaultTileInstance = shr_tile_instance:default(),
#map
{
diff --git a/src/shared/struct/map/shr_tile.erl.m4 b/src/shared/struct/map/shr_tile.erl.m4
index 5bd8acd..26f9645 100644
--- a/src/shared/struct/map/shr_tile.erl.m4
+++ b/src/shared/struct/map/shr_tile.erl.m4
@@ -57,7 +57,7 @@ from_id(_) ->
-spec cost_when_oob () -> non_neg_integer().
cost_when_oob () -> __TILE_COST_WHEN_OOB.
--spec get_id (type()) -> class_id().
+-spec get_id (type()) -> id().
get_id (Tile) -> Tile#tile.id.
-spec get_cost (type()) -> non_neg_integer().
diff --git a/src/shared/struct/map/shr_tile_instance.erl b/src/shared/struct/map/shr_tile_instance.erl
index 6696f35..9f95378 100644
--- a/src/shared/struct/map/shr_tile_instance.erl
+++ b/src/shared/struct/map/shr_tile_instance.erl
@@ -4,23 +4,24 @@
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-type display_data() :: list(binary()).
+-type trigger_name() :: binary().
-opaque type() ::
{
shr_tile:id(),
shr_tile:variant_id(),
display_data(),
- list(shr_map_trigger:id())
+ list(trigger_name())
}.
--export_type([type/0, border/0]).
+-export_type([type/0, trigger_name/0]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-export
(
[
- encode/1,
+ encode/2,
decode/1,
default/0,
error/0
@@ -48,11 +49,10 @@ get_tile_id ({TileID, _, _, _}) -> TileID.
-spec get_variant_id (type()) -> shr_tile:variant_id().
get_variant_id ({_, VariantID, _, _}) -> VariantID.
--spec decode (list(binary())) -> type().
+-spec decode (map()) -> type().
decode (Map) ->
L = maps:get(<<"b">>, Map),
- T = maps:get(<<"t">>, Map),
-
+ Triggers = maps:get(<<"t">>, Map),
[TileID|[VariantID|DisplayData]] = L,
@@ -62,10 +62,19 @@ decode (Map) ->
_ -> []
end,
- {TileID, VariantID, S0DisplayData, T}.
+ {TileID, VariantID, S0DisplayData, Triggers}.
--spec encode (instance()) -> list(binary()).
-encode (I) -> I.
+-spec encode (fun ((trigger_name()) -> boolean()), type()) -> {list(any())}.
+encode (VisibilityFun, {TileID, VariantID, DisplayData, Triggers}) ->
+ {
+ [
+ {<<"b">>, [TileID|[VariantID|DisplayData]]},
+ {<<"t">>, lists:filter(VisibilityFun, Triggers)}
+ ]
+ }.
-spec default () -> type().
-default () -> [<<"1">>, <<"0">>].
+default () -> {<<"1">>, <<"0">>, [], []}.
+
+-spec error () -> type().
+error () -> {<<"0">>, <<"0">>, [], []}.
diff --git a/src/shared/util/shr_array_tuple.erl b/src/shared/util/shr_array_tuple.erl
index 3effb4c..0ca9ffa 100644
--- a/src/shared/util/shr_array_tuple.erl
+++ b/src/shared/util/shr_array_tuple.erl
@@ -1,8 +1,8 @@
-module(shr_array_tuple).
% My solution to https://stackoverflow.com/questions/53877197/are-there-erlang-arrays-with-a-defined-representation
--opaque array_tuple() :: tuple().
--opaque array_tuple(_Type) :: tuple().
+-type array_tuple() :: tuple().
+-type array_tuple(_Type) :: tuple().
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%