summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/battle/query/btl_character_turn.erl3
-rw-r--r--src/battle/query/btl_load.erl13
-rw-r--r--src/battle/struct/btl_battle.erl17
-rw-r--r--src/battle/struct/btl_character_turn_data.erl2
-rw-r--r--src/shared/struct/inventory/shr_equipment.erl64
5 files changed, 80 insertions, 19 deletions
diff --git a/src/battle/query/btl_character_turn.erl b/src/battle/query/btl_character_turn.erl
index b30f02f..b911ae9 100644
--- a/src/battle/query/btl_character_turn.erl
+++ b/src/battle/query/btl_character_turn.erl
@@ -14,9 +14,6 @@
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%-spec send_to_database (list(database_diff:type()), character_turn_request:type()) -> 'ok'.
-
-
%%%% REQUEST DECODING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec decode_request (shr_query:type()) -> btl_character_turn_request:type().
decode_request (Query) ->
diff --git a/src/battle/query/btl_load.erl b/src/battle/query/btl_load.erl
index dae6fbe..583cd4b 100644
--- a/src/battle/query/btl_load.erl
+++ b/src/battle/query/btl_load.erl
@@ -83,6 +83,7 @@ generate_reply (QueryState, Input) ->
PlayerID = Input#input.player_id,
PUser = ataxia_security:user_from_id(PlayerID),
Battle = QueryState#query_state.battle,
+ RelevantInventory = btl_battle:get_relevant_inventory(Battle),
Players = btl_battle:get_players(Battle),
{value, {PlayerIX, _Player}} =
@@ -134,7 +135,7 @@ generate_reply (QueryState, Input) ->
fun (PortraitID) ->
btl_add_portrait:generate(shr_portrait:from_id(PortraitID))
end,
- ordsets:to_list(btl_battle:get_used_portrait_ids(Battle))
+ ordsets:to_list(shr_inventory:get_portraits(RelevantInventory))
),
AddWeaponList =
@@ -143,7 +144,7 @@ generate_reply (QueryState, Input) ->
fun (WeaponID) ->
btl_add_weapon:generate(shr_weapon:from_id(WeaponID))
end,
- ordsets:to_list(btl_battle:get_used_weapon_ids(Battle))
+ ordsets:to_list(shr_inventory:get_weapons(RelevantInventory))
),
AddArmorList =
@@ -152,7 +153,7 @@ generate_reply (QueryState, Input) ->
fun (ArmorID) ->
btl_add_armor:generate(shr_armor:from_id(ArmorID))
end,
- ordsets:to_list(btl_battle:get_used_armor_ids(Battle))
+ ordsets:to_list(shr_inventory:get_armors(RelevantInventory))
),
AddGlyphList =
@@ -161,7 +162,7 @@ generate_reply (QueryState, Input) ->
fun (GlyphID) ->
btl_add_glyph:generate(shr_glyph:from_id(GlyphID))
end,
- ordsets:to_list(btl_battle:get_used_glyph_ids(Battle))
+ ordsets:to_list(shr_inventory:get_glyphs(RelevantInventory))
),
AddGlyphBoardList =
@@ -170,7 +171,7 @@ generate_reply (QueryState, Input) ->
fun (GlyphBoardID) ->
btl_add_glyph_board:generate(shr_glyph_board:from_id(GlyphBoardID))
end,
- ordsets:to_list(btl_battle:get_used_glyph_board_ids(Battle))
+ ordsets:to_list(shr_inventory:get_glyph_boards(RelevantInventory))
),
AddTileList =
@@ -179,7 +180,7 @@ generate_reply (QueryState, Input) ->
fun (TileClassID) ->
btl_add_tile:generate(shr_tile:from_id(TileClassID))
end,
- ordsets:to_list(btl_battle:get_used_tile_ids(Battle))
+ ordsets:to_list(btl_battle:get_related_tile_ids(Battle))
),
OutputList =
diff --git a/src/battle/struct/btl_battle.erl b/src/battle/struct/btl_battle.erl
index a5b5a06..46f8c10 100644
--- a/src/battle/struct/btl_battle.erl
+++ b/src/battle/struct/btl_battle.erl
@@ -12,7 +12,8 @@
related_inventory :: shr_inventory:type(),
related_tile_ids :: ordsets:ordset(shr_tile:id()),
map :: shr_map:type(),
- characters :: orddict:orddict(non_neg_integer(), btl_character:type()),
+ characters ::
+ orddict:orddict(non_neg_integer(), btl_character:unresolved()),
players :: orddict:orddict(non_neg_integer(), btl_player:type()),
current_player_turn :: btl_player_turn:type()
}
@@ -96,10 +97,10 @@ get_map (Battle) -> Battle#battle.map.
(
type()
)
- -> orddict:orddict(non_neg_integer(), btl_character:type()).
+ -> orddict:orddict(non_neg_integer(), btl_character:unresolved()).
get_characters (Battle) -> Battle#battle.characters.
--spec get_character (non_neg_integer(), type()) -> btl_character:type().
+-spec get_character (non_neg_integer(), type()) -> btl_character:unresolved().
get_character (IX, Battle) ->
orddict:fetch(IX, Battle#battle.characters).
@@ -139,7 +140,7 @@ set_map (Map, Battle) ->
-spec set_characters
(
- orddict:orddict(non_neg_integer(), btl_character:type()),
+ orddict:orddict(non_neg_integer(), btl_character:unresolved()),
type()
)
-> type().
@@ -149,7 +150,13 @@ set_characters (Characters, Battle) ->
characters = Characters
}.
--spec set_character (non_neg_integer(), btl_character:type(), type()) -> type().
+-spec set_character
+ (
+ non_neg_integer(),
+ btl_character:unresolved(),
+ type()
+ )
+ -> type().
set_character (IX, Character, Battle) ->
Battle#battle
{
diff --git a/src/battle/struct/btl_character_turn_data.erl b/src/battle/struct/btl_character_turn_data.erl
index 5f44f8a..bd6fcac 100644
--- a/src/battle/struct/btl_character_turn_data.erl
+++ b/src/battle/struct/btl_character_turn_data.erl
@@ -113,7 +113,7 @@ clean_battle (Data) ->
btl_battle:set_character
(
Data#type.character_ix,
- Data#type.character,
+ btl_character:to_unresolved(Data#type.character),
Data#type.battle
)
}.
diff --git a/src/shared/struct/inventory/shr_equipment.erl b/src/shared/struct/inventory/shr_equipment.erl
index 11dc19e..4de05fd 100644
--- a/src/shared/struct/inventory/shr_equipment.erl
+++ b/src/shared/struct/inventory/shr_equipment.erl
@@ -1,5 +1,12 @@
-module(shr_equipment).
+-define(PRIMARY_WEAPON_FIELD, <<"pr">>).
+-define(SECONDARY_WEAPON_FIELD, <<"sc">>).
+-define(ARMOR_FIELD, <<"ar">>).
+-define(PORTRAIT_FIELD, <<"pt">>).
+-define(GLYPH_BOARD_FIELD, <<"gb">>).
+-define(GLYPHS_FIELD, <<"gl">>).
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -286,8 +293,8 @@ set_glyphs (V, Eq) when is_record(Eq, shr_eq_ref) ->
Eq#shr_eq_ref{ glyphs = lists:map(fun shr_glyph:get_id/1, V) }.
-spec ataxia_set_glyphs
- (shr_glyph:type(), type()) -> {type(), ataxic:basic()};
- (shr_glyph:type(), unresolved()) -> {unresolved(), ataxic:basic()}.
+ (list(shr_glyph:type()), type()) -> {type(), ataxic:basic()};
+ (list(shr_glyph:type()), unresolved()) -> {unresolved(), ataxic:basic()}.
ataxia_set_glyphs (V, Eq) ->
{
set_glyphs(V, Eq),
@@ -412,8 +419,8 @@ set_glyph_ids (V, Eq) when is_record(Eq, shr_eq) ->
Eq#shr_eq{ glyphs = lists:map(fun shr_glyph:from_id/1, V) }.
-spec ataxia_set_glyph_ids
- (shr_glyph:id(), type()) -> {type(), ataxic:basic()};
- (shr_glyph:id(), unresolved()) -> {unresolved(), ataxic:basic()}.
+ (list(shr_glyph:id()), type()) -> {type(), ataxic:basic()};
+ (list(shr_glyph:id()), unresolved()) -> {unresolved(), ataxic:basic()}.
ataxia_set_glyph_ids (V, Eq) ->
{
set_glyph_ids(V, Eq),
@@ -448,6 +455,55 @@ default_unresolved () ->
glyphs = []
}.
+-spec decode (map()) -> unresolved().
+decode (Map) ->
+ #shr_eq_ref
+ {
+ primary = maps:get(?PRIMARY_WEAPON_FIELD, Map),
+ secondary = maps:get(?SECONDARY_WEAPON_FIELD, Map),
+ armor = maps:get(?ARMOR_FIELD, Map),
+ portrait = maps:get(?PORTRAIT_FIELD, Map),
+ glyph_board = maps:get(?GLYPH_BOARD_FIELD, Map),
+ glyphs = maps:get(?GLYPHS_FIELD, Map)
+ }.
+
+-spec encode (unresolved()) -> {list({binary(), any()})}.
+encode (EqRef) ->
+ {
+ [
+ {?PRIMARY_WEAPON_FIELD, EqRef#shr_eq_ref.primary},
+ {?SECONDARY_WEAPON_FIELD, EqRef#shr_eq_ref.secondary},
+ {?ARMOR_FIELD, EqRef#shr_eq_ref.armor},
+ {?PORTRAIT_FIELD, EqRef#shr_eq_ref.portrait},
+ {?GLYPH_BOARD_FIELD, EqRef#shr_eq_ref.glyph_board},
+ {?GLYPHS_FIELD, EqRef#shr_eq_ref.glyphs}
+ ]
+ }.
+
+-spec resolve (unresolved()) -> type().
+resolve (EqRef) ->
+ #shr_eq
+ {
+ primary = shr_weapon:from_id(EqRef#shr_eq_ref.primary),
+ secondary = shr_weapon:from_id(EqRef#shr_eq_ref.secondary),
+ armor = shr_armor:from_id(EqRef#shr_eq_ref.armor),
+ portrait = shr_portrait:from_id(EqRef#shr_eq_ref.portrait),
+ glyph_board = shr_glyph_board:from_id(EqRef#shr_eq_ref.glyph_board),
+ glyphs = lists:map(fun shr_glyph:from_id/1, EqRef#shr_eq_ref.glyphs)
+ }.
+
+-spec to_unresolved (type()) -> unresolved().
+to_unresolved (Eq) ->
+ #shr_eq_ref
+ {
+ primary = shr_weapon:get_id(Eq#shr_eq.primary),
+ secondary = shr_weapon:get_id(Eq#shr_eq.secondary),
+ armor = shr_armor:get_id(Eq#shr_eq.armor),
+ portrait = shr_portrait:get_id(Eq#shr_eq.portrait),
+ glyph_board = shr_glyph_board:get_id(Eq#shr_eq.glyph_board),
+ glyphs = lists:map(fun shr_glyph:get_id/1, Eq#shr_eq.glyphs)
+ }.
+
-spec get_primary_weapon_field () -> non_neg_integer().
get_primary_weapon_field () -> #shr_eq_ref.primary.