1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
-module(shr_tile_instance).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-type display_data() :: list(binary()).
-type trigger_name() :: binary().
-opaque type() ::
{
shr_tile:id(),
shr_tile:variant_id(),
display_data(),
list(trigger_name())
}.
-export_type([type/0, trigger_name/0]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-export
(
[
encode/2,
decode/1,
default/0,
error/0
]
).
-export
(
[
get_tile_id/1,
get_variant_id/1,
get_triggers/1
]
).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec get_tile_id (type()) -> shr_tile:id().
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()).
get_triggers ({_, _, _, Triggers}) -> Triggers.
-spec decode (map()) -> type().
decode (Map) ->
L = maps:get(<<"b">>, Map),
Triggers = maps:get(<<"t">>, Map),
[TileID|[VariantID|DisplayData]] = L,
S0DisplayData =
case (((length(DisplayData) rem 2) == 0)) of
true -> DisplayData;
_ -> []
end,
{TileID, VariantID, S0DisplayData, Triggers}.
-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">>, [], []}.
-spec error () -> type().
error () -> {<<"0">>, <<"0">>, [], []}.
|