summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2019-06-12 09:57:13 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2019-06-12 09:57:13 +0200
commitdf54ba490259e1eb1e7c8133903417579ec4f400 (patch)
treeb282afb878facd3039185055274ef3f5d0b4b322 /src/shared/struct/map/shr_tile_instance.erl
parentd693f287201f3178f9cc36eee15af29694f67263 (diff)
Adds more funs to handle map markers.
Using map markers to handle attacks of opportunity appears to be a bad idea: while it does make their detection very cheap, this leads to having frequent (and rather large) updates to the markers.
Diffstat (limited to 'src/shared/struct/map/shr_tile_instance.erl')
-rw-r--r--src/shared/struct/map/shr_tile_instance.erl80
1 files changed, 74 insertions, 6 deletions
diff --git a/src/shared/struct/map/shr_tile_instance.erl b/src/shared/struct/map/shr_tile_instance.erl
index 3c3621f..1739207 100644
--- a/src/shared/struct/map/shr_tile_instance.erl
+++ b/src/shared/struct/map/shr_tile_instance.erl
@@ -4,17 +4,16 @@
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-type display_data() :: list(binary()).
--type trigger_name() :: binary().
-opaque type() ::
{
shr_tile:id(),
shr_tile:variant_id(),
display_data(),
- list(trigger_name())
+ ordsets:ordset(shr_map_marker:name())
}.
--export_type([type/0, trigger_name/0]).
+-export_type([type/0]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -33,7 +32,12 @@
[
get_tile_id/1,
get_variant_id/1,
- get_triggers/1
+ get_triggers/1,
+
+ add_trigger/2, % TODO
+ remove_trigger/2, % TODO
+ ataxia_add_trigger/2, % TODO
+ ataxia_remove_trigger/2 % TODO
]
).
@@ -41,6 +45,9 @@
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec get_triggers_field () -> non_neg_integer().
+get_triggers_field () -> 3.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -50,7 +57,7 @@ get_tile_id ({TileID, _, _, _}) -> TileID.
-spec get_variant_id (type()) -> shr_tile:variant_id().
get_variant_id ({_, VariantID, _, _}) -> VariantID.
--spec get_triggers (type()) -> list(trigger_name()).
+-spec get_triggers (type()) -> list(shr_map_marker:name()).
get_triggers ({_, _, _, Triggers}) -> Triggers.
-spec decode (map()) -> type().
@@ -68,7 +75,12 @@ decode (Map) ->
{TileID, VariantID, S0DisplayData, Triggers}.
--spec encode (fun ((trigger_name()) -> boolean()), type()) -> {list(any())}.
+-spec encode
+ (
+ fun ((shr_map_marker:name()) -> boolean()),
+ type()
+ )
+ -> {list(any())}.
encode (VisibilityFun, {TileID, VariantID, DisplayData, Triggers}) ->
{
[
@@ -82,3 +94,59 @@ default () -> {<<"1">>, <<"0">>, [], []}.
-spec error () -> type().
error () -> {<<"0">>, <<"0">>, [], []}.
+
+-spec add_trigger (shr_map_marker:name(), type()) -> type().
+add_trigger (TriggerName, {TileID, VariantID, DisplayData, Triggers}) ->
+ {TileID, VariantID, DisplayData, ordsets:add_element(TriggerName, Triggers)}.
+
+-spec ataxia_add_trigger
+ (
+ shr_map_marker:name(),
+ type()
+ )
+ -> {type(), ataxic:basic()}.
+ataxia_add_trigger (TriggerName, TileInstance) ->
+ {
+ add_trigger(TriggerName, TileInstance),
+ ataxic:update_field
+ (
+ get_triggers_field(),
+ ataxic:apply_function
+ (
+ ordsets,
+ add_element,
+ [
+ ataxic:constant(TriggerName),
+ ataxic:current_value()
+ ]
+ )
+ )
+ }.
+
+-spec remove_trigger (shr_map_marker:name(), type()) -> type().
+remove_trigger (TriggerName, {TileID, VariantID, DisplayData, Triggers}) ->
+ {TileID, VariantID, DisplayData, ordsets:del_element(TriggerName, Triggers)}.
+
+-spec ataxia_remove_trigger
+ (
+ shr_map_marker:name(),
+ type()
+ )
+ -> {type(), ataxic:basic()}.
+ataxia_remove_trigger (TriggerName, TileInstance) ->
+ {
+ remove_trigger(TriggerName, TileInstance),
+ ataxic:update_field
+ (
+ get_triggers_field(),
+ ataxic:apply_function
+ (
+ ordsets,
+ del_element,
+ [
+ ataxic:constant(TriggerName),
+ ataxic:current_value()
+ ]
+ )
+ )
+ }.