summaryrefslogtreecommitdiff
blob: 37811b3417b68ee03a468295e69f2179574d9a37 (plain)
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
         )
   }.