summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/battlemap_instance.erl')
-rw-r--r--src/battlemap_instance.erl53
1 files changed, 52 insertions, 1 deletions
diff --git a/src/battlemap_instance.erl b/src/battlemap_instance.erl
index b18fa4e..37811b3 100644
--- a/src/battlemap_instance.erl
+++ b/src/battlemap_instance.erl
@@ -4,7 +4,9 @@
[
get_char_instances/1,
get_char_instance/2,
- set_char_instance/3
+ set_char_instance/3,
+ can_play_char_instance/3,
+ post_play_char_instance/2
]
).
@@ -17,6 +19,55 @@ get_char_instances (BattlemapInstance) ->
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).