summaryrefslogtreecommitdiff |
diff options
-rw-r--r-- | src/battlemap_instance.erl | 53 | ||||
-rw-r--r-- | src/timed_cache_data.hrl | 2 | ||||
-rw-r--r-- | www/handler/battlemap/character_turn.yaws | 7 |
3 files changed, 60 insertions, 2 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). diff --git a/src/timed_cache_data.hrl b/src/timed_cache_data.hrl index e91be25..23441d3 100644 --- a/src/timed_cache_data.hrl +++ b/src/timed_cache_data.hrl @@ -1,6 +1,6 @@ %% TODO: add types. -record(battlemap, {id, width, height, content, instances}). --record(battlemap_instance, {id, chars, curr_player, rem_chars, last_turn}). +-record(battlemap_instance, {id, chars, curr_player, players, rem_chars, last_turn}). -record(character, {id, name, icon, portrait, mov_pts, atk_rg}). -record(character_turn, {id, path, target}). -record(player, {id, battlemaps, characters}). diff --git a/www/handler/battlemap/character_turn.yaws b/www/handler/battlemap/character_turn.yaws index 3506e13..e0a60a8 100644 --- a/www/handler/battlemap/character_turn.yaws +++ b/www/handler/battlemap/character_turn.yaws @@ -47,6 +47,13 @@ handle (Req) -> Input#input.char_id ), %%%% Calc + true = + battlemap_instance:can_play_char_instance + ( + BattlemapInstance, + Input#input.char_id, + Input#input.player_id + ), {X, Y} = battlemap:cross ( |