summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/battlemap.erl22
-rw-r--r--src/character.erl30
-rw-r--r--src/handler.erl1
-rw-r--r--src/timed_cache_data.hrl5
-rw-r--r--www/handler/battlemap/character_turn.yaws3
-rw-r--r--www/handler/battlemap/load_state.yaws99
6 files changed, 78 insertions, 82 deletions
diff --git a/src/battlemap.erl b/src/battlemap.erl
deleted file mode 100644
index 4366852..0000000
--- a/src/battlemap.erl
+++ /dev/null
@@ -1,22 +0,0 @@
--module(battlemap).
--export([encode_in_json/1]).
-
-encode_in_json (
- {
- Width,
- Height,
- Tiles
- }
-) ->
- jiffy:encode(
- {
- [
- {<<"width">>, Width},
- {<<"height">>, Height},
- {
- <<"content">>,
- lists:map((fun ({ID, Cost}) -> [ID, Cost] end), Tiles)
- }
- ]
- }
- ).
diff --git a/src/character.erl b/src/character.erl
deleted file mode 100644
index aa0d5f0..0000000
--- a/src/character.erl
+++ /dev/null
@@ -1,30 +0,0 @@
--module(character).
--export([encode_in_json/1]).
-
-encode_in_json (
- {
- ID,
- Name,
- Icon,
- Portrait,
- {X, Y},
- Team,
- MovementPoints,
- AttackRange
- }
-) ->
- jiffy:encode(
- {
- [
- {<<"id">>, ID},
- {<<"name">>, Name},
- {<<"icon">>, Icon},
- {<<"portrait">>, Portrait},
- {<<"loc_x">>, X},
- {<<"loc_y">>, Y},
- {<<"team">>, Team},
- {<<"mov_pts">>, MovementPoints},
- {<<"atk_rg">>, AttackRange}
- ]
- }
- ).
diff --git a/src/handler.erl b/src/handler.erl
index 9270aa4..5f6ced4 100644
--- a/src/handler.erl
+++ b/src/handler.erl
@@ -6,7 +6,6 @@ start(_YawsParams) ->
gen_server:cast(Pid, {add, battlemap_db, none}),
gen_server:cast(Pid, {add, battlemap_instance_db, none}),
gen_server:cast(Pid, {add, character_db, none}),
- gen_server:cast(Pid, {add, character_instance_db, none}),
gen_server:cast(Pid, {add, character_turn_db, none}),
gen_server:cast(Pid, {add, player_data_db, none}),
ok.
diff --git a/src/timed_cache_data.hrl b/src/timed_cache_data.hrl
index b0d7ba6..e91be25 100644
--- a/src/timed_cache_data.hrl
+++ b/src/timed_cache_data.hrl
@@ -1,6 +1,9 @@
+%% TODO: add types.
-record(battlemap, {id, width, height, content, instances}).
-record(battlemap_instance, {id, chars, curr_player, rem_chars, last_turn}).
-record(character, {id, name, icon, portrait, mov_pts, atk_rg}).
--record(character_instance, {id, x, y, team}).
-record(character_turn, {id, path, target}).
-record(player, {id, battlemaps, characters}).
+
+%% Not stored in its own timed cache.
+-record(character_instance, {x, y, team}).
diff --git a/www/handler/battlemap/character_turn.yaws b/www/handler/battlemap/character_turn.yaws
index c42e26b..ffcf0f9 100644
--- a/www/handler/battlemap/character_turn.yaws
+++ b/www/handler/battlemap/character_turn.yaws
@@ -5,7 +5,8 @@ handle (Req) ->
UserToken = maps:get(<<"user_token">>, JSON_Req_Map),
io:format("~nCharacter Turn for ~p...", [UserToken]),
%% ok = users_manager:ping(UserToken),
- jiffy:encode(
+ jiffy:encode
+ (
{
[
{<<"types">>, [<<"STATUS">>]},
diff --git a/www/handler/battlemap/load_state.yaws b/www/handler/battlemap/load_state.yaws
index fb7cda6..a9be563 100644
--- a/www/handler/battlemap/load_state.yaws
+++ b/www/handler/battlemap/load_state.yaws
@@ -1,42 +1,87 @@
<erl>
--record(input, {battlemap_id}).
+-record(input, {battlemap_id, instance_id}).
parse_input (Req) ->
JSONReqMap = jiffy:decode(Req, [return_maps]),
- #input {
- battlemap_id = maps:get(<<"battlemap_id">>, JSONReqMap)
+ #input
+ {
+ player_id = maps:get(<<"player_id">>, JSONReqMap),
+ battlemap_id = maps:get(<<"battlemap_id">>, JSONReqMap),
+ instance_id = maps:get(<<"instance_id">>, JSONReqMap)
}.
-fetch_battlemap (Input) ->
- {Battlemap, CharList} =
- timed_cache:fetch(
- battlemap_db,
- Input#input.battlemap_id
- ),
+generate_set_map (Battlemap) ->
+ jiffy:encode
+ (
+ {
+ [
+ {<<"width">>, Battlemap#battlemap.width},
+ {<<"height">>, Battlemap#battlemap.height},
+ {<<"content">>, array:to_list(Battlemap#battlemap.content)}
+ ]
+ }
+ ).
-handle (Req) ->
- Input = parse_input(Req),
- io:format("~nLoading Battlemap ~p...~n", [Input#input.battlemap_id]),
-%% ok = users_manager:ping(UserToken),
- jiffy:encode(
- [
+generate_add_char (Char, CharInstance) ->
+ jiffy:encode
+ (
+ {
[
- <<"set_map">>,
- battlemap:encode_in_json(Battlemap)
+ {<<"id">>, Char#character.id},
+ {<<"name">>, Char#character.name},
+ {<<"icon">>, Char#character.icon},
+ {<<"portrait">>, Char#character.portrait},
+ {<<"loc_x">>, CharInstance#character_instance.x},
+ {<<"loc_y">>, CharInstance#character_instance.y},
+ {<<"team">>, CharInstance#character_instance.team},
+ {<<"mov_pts">>, Char#character.mov_pts},
+ {<<"atk_rg">>, Char#character.atk_rg}
]
- |
- lists:map(
- fun (Char) ->
- [
- <<"add_char">>,
- character:encode_in_json(Char)
- ]
- end,
- CharList
- )
+ }
+ ).
+
+generate_reply (Battlemap, _BattlemapInstance, Characters) ->
+ jiffy:encode
+ (
+ [
+ <<"set_map">>,
+ generate_set_map(Battlemap)
]
+ |
+ lists:map
+ (
+ fun ({CharID, CharInstance}) ->
+ [
+ <<"add_char">>,
+ generate_add_char(CharID, CharInstance)
+ ]
+ end,
+ Characters
+ )
).
+handle (Req) ->
+ Input = parse_input(Req),
+ Battlemap = timed_cache:fetch(battlemap_db, Input#input.battlemap_id),
+ BattlemapInstance =
+ timed_cache:fetch
+ (
+ battlemap_instances_db,
+ {Input#input.battlemap_id, Input#input.battlemap_instance_id}
+ ),
+ Characters =
+ list:map
+ (
+ fun ({CharID, CharInst}) ->
+ {
+ timed_cache:fetch(character_db, CharID),
+ CharInst
+ }
+ end,
+ dict:to_list(BattlemapInstance#battlemap_instance.chars)
+ ),
+ generate_reply(Battlemap, BattlemapInstance, Characters).
+
out(A) ->
{
content,