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(battlemap_instance).
-export
(
[
get_char_instances/1,
get_char_instance/2,
set_char_instance/3,
can_play_char_instance/3,
post_play_char_instance/2
]
).
-include("timed_cache_data.hrl").
get_char_instances (BattlemapInstance) ->
lists:map
(
fun ({_K, V}) -> V end,
dict:to_list(BattlemapInstance#battlemap_instance.chars)
).
can_play_char_instance
(
BattlemapInstance,
PlayerID,
CharInstID
) ->
(
(array:get(BattlemapInstance#battlemap_instance.curr_player) =:= PlayerID)
and
lists:member(CharInstID, BattlemapInstance#battlemap_instance.rem_chars)
).
post_play_char_instance (BattlemapInstance, CharInstID) ->
case BattlemapInstance#battlemap_instance.rem_chars of
[CharInstID|[]] ->
NextPlayer =
(
(BattlemapInstance#battlemap_instance.curr_player + 1)
rem
array:size(BattlemapInstance#battlemap_instance.players)
),
BattlemapInstance#battlemap_instance
{
curr_player = NextPlayer,
rem_chars =
lists:filtermap
(
fun ({K, V}) ->
case character_instance:get_owner(V) of
NextPlayer -> {true, K};
_ -> false
end
end,
dict:to_list(BattlemapInstance#battlemap_instance.chars)
)
};
_ ->
BattlemapInstance#battlemap_instance
{
rem_chars =
lists:delete
(
CharInstID,
BattlemapInstance#battlemap_instance.rem_chars
)
}
end.
get_char_instance (BattlemapInstance, CharInstID) ->
dict:fetch(CharInstID, BattlemapInstance#battlemap_instance.chars).
set_char_instance (BattlemapInstance, CharInstID, CharInst) ->
BattlemapInstance#battlemap_instance
{
chars =
dict:store
(
CharInstID,
CharInst,
BattlemapInstance#battlemap_instance.chars
)
}.
|