| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-06-12 09:57:13 +0200 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-06-12 09:57:13 +0200 | 
| commit | df54ba490259e1eb1e7c8133903417579ec4f400 (patch) | |
| tree | b282afb878facd3039185055274ef3f5d0b4b322 /src/shared/struct/map/shr_tile_instance.erl | |
| parent | d693f287201f3178f9cc36eee15af29694f67263 (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.erl | 80 | 
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() +            ] +         ) +      ) +   }. | 


