From df54ba490259e1eb1e7c8133903417579ec4f400 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Wed, 12 Jun 2019 09:57:13 +0200 Subject: 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. --- src/shared/struct/map/shr_tile_instance.erl | 80 ++++++++++++++++++++++++++--- 1 file changed, 74 insertions(+), 6 deletions(-) (limited to 'src/shared/struct/map/shr_tile_instance.erl') 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() + ] + ) + ) + }. -- cgit v1.2.3-70-g09d2