summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/reply/shr_set_inventory.erl10
-rw-r--r--src/shared/struct/inventory/shr_equipment.erl26
-rw-r--r--src/shared/struct/inventory/shr_glyph.erl.m42
-rw-r--r--src/shared/struct/inventory/shr_glyph_board.erl.m49
-rw-r--r--src/shared/struct/inventory/shr_inventory.erl48
-rw-r--r--src/shared/struct/inventory/shr_weapon.erl.m42
-rw-r--r--src/shared/struct/map/shr_inventory.erl153
-rw-r--r--src/shared/struct/map/shr_map.erl6
-rw-r--r--src/shared/struct/shr_character.erl24
-rw-r--r--src/shared/struct/shr_omnimods.erl4
10 files changed, 68 insertions, 216 deletions
diff --git a/src/shared/reply/shr_set_inventory.erl b/src/shared/reply/shr_set_inventory.erl
index 61ba336..415beca 100644
--- a/src/shared/reply/shr_set_inventory.erl
+++ b/src/shared/reply/shr_set_inventory.erl
@@ -23,10 +23,10 @@ generate (Inventory) ->
{
[
{<<"msg">>, <<"set_inventory">>},
- {<<"pts">>, encode_set(shr_inventory:get_portrait_ids(Inventory))},
- {<<"gls">>, encode_set(shr_inventory:get_glyph_ids(Inventory))},
- {<<"gbs">>, encode_set(shr_inventory:get_glyph_board_ids(Inventory))},
- {<<"wps">>, encode_set(shr_inventory:get_weapon_ids(Inventory))},
- {<<"ars">>, encode_set(shr_inventory:get_armor_ids(Inventory))}
+ {<<"pts">>, encode_set(shr_inventory:get_portraits(Inventory))},
+ {<<"gls">>, encode_set(shr_inventory:get_glyphs(Inventory))},
+ {<<"gbs">>, encode_set(shr_inventory:get_glyph_boards(Inventory))},
+ {<<"wps">>, encode_set(shr_inventory:get_weapons(Inventory))},
+ {<<"ars">>, encode_set(shr_inventory:get_armors(Inventory))}
]
}.
diff --git a/src/shared/struct/inventory/shr_equipment.erl b/src/shared/struct/inventory/shr_equipment.erl
index cbd4381..a931444 100644
--- a/src/shared/struct/inventory/shr_equipment.erl
+++ b/src/shared/struct/inventory/shr_equipment.erl
@@ -40,7 +40,7 @@
-opaque unresolved() :: #shr_eq_ref{}.
-type either() :: (type() | unresolved()).
--export_type([type/0, unresolved/0]).
+-export_type([type/0, unresolved/0, either/0]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -84,7 +84,6 @@
set_portrait_id/2,
set_glyph_board_id/2,
set_glyph_ids/2,
- set_glyph_ids/2,
ataxia_set_primary_weapon_id/2,
ataxia_set_secondary_weapon_id/2,
@@ -299,14 +298,12 @@ set_glyphs (V, Eq) when is_record(Eq, shr_eq_ref) ->
(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),
- ataxic:update_field
- (
- get_glyphs_field(),
- ataxic:constant(shr_glyph:get_id(V))
- )
- }.
+ ataxia_set_glyphs
+ (
+ V,
+ ataxic:constant(lists:map(fun shr_glyph:get_id/1, V)),
+ Eq
+ ).
-spec ataxia_set_glyphs
(
@@ -448,14 +445,7 @@ set_glyph_ids (V, Eq) when is_record(Eq, shr_eq) ->
(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),
- ataxic:update_field
- (
- get_glyphs_field(),
- ataxic:constant(V)
- )
- }.
+ ataxia_set_glyph_ids(V, ataxic:constant(V), Eq).
-spec ataxia_set_glyph_ids
(
diff --git a/src/shared/struct/inventory/shr_glyph.erl.m4 b/src/shared/struct/inventory/shr_glyph.erl.m4
index 0ce4c47..a451cc0 100644
--- a/src/shared/struct/inventory/shr_glyph.erl.m4
+++ b/src/shared/struct/inventory/shr_glyph.erl.m4
@@ -35,7 +35,7 @@
[
get_id/1,
get_name/1,
- get_omnimods/1,
+ get_omnimods/1
]
).
diff --git a/src/shared/struct/inventory/shr_glyph_board.erl.m4 b/src/shared/struct/inventory/shr_glyph_board.erl.m4
index c2128a9..3324997 100644
--- a/src/shared/struct/inventory/shr_glyph_board.erl.m4
+++ b/src/shared/struct/inventory/shr_glyph_board.erl.m4
@@ -58,7 +58,7 @@
list(shr_glyph:type()),
list(integer())
)
- -> ({'ok', shr_omnimods:type()} | 'error').
+ -> ('error' | {'ok', shr_omnimods:type()}).
get_omnimods_with_glyphs_internals (Omnimods, [], []) ->
{ok, Omnimods};
get_omnimods_with_glyphs_internals (_Omnimods, [], _) ->
@@ -102,12 +102,15 @@ default () -> from_id(<<"0">>).
list(shr_glyph:type()),
type()
)
- -> ({'ok', shr_omnimods:type()} | 'error').
+ -> shr_omnimods:type().
get_omnimods_with_glyphs (Glyphs, GlyphBoard) ->
BoardOmnimods = GlyphBoard#glyph_board.omnimods,
BoardSlots = GlyphBoard#glyph_board.slots,
- get_omnimods_with_glyphs_internals(BoardOmnimods, Glyphs, BoardSlots).
+ {ok, Omnimods} =
+ get_omnimods_with_glyphs_internals(BoardOmnimods, Glyphs, BoardSlots),
+
+ Omnimods.
-spec default_id () -> id().
default_id () -> <<"0">>.
diff --git a/src/shared/struct/inventory/shr_inventory.erl b/src/shared/struct/inventory/shr_inventory.erl
index 4ea3e7b..884c213 100644
--- a/src/shared/struct/inventory/shr_inventory.erl
+++ b/src/shared/struct/inventory/shr_inventory.erl
@@ -22,8 +22,9 @@
).
-opaque type() :: #inventory{}.
+-type id() :: ataxia_id:type().
--export_type([type/0]).
+-export_type([type/0, id/0]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -95,19 +96,27 @@ get_glyphs (Inv) -> Inv#inventory.glyphs.
-spec add_weapon (shr_weapon:id(), type()) -> type().
-add_weapon (V, Inv) -> Inv#inventory{ weapons = V }.
+add_weapon (V, Inv) ->
+ Inv#inventory{ weapons = ordsets:add_element(V, Inv#inventory.weapons) }.
-spec add_armor (shr_armor:id(), type()) -> type().
-add_armor (V, Inv) -> Inv#inventory{ armors = V }.
+add_armor (V, Inv) ->
+ Inv#inventory{ armors = ordsets:add_element(V, Inv#inventory.armors) }.
-spec add_portrait (shr_portrait:id(), type()) -> type().
-add_portrait (V, Inv) -> Inv#inventory{ portraits = V }.
+add_portrait (V, Inv) ->
+ Inv#inventory{ portraits = ordsets:add_element(V, Inv#inventory.portraits) }.
-spec add_glyph_board (shr_glyph_board:id(), type()) -> type().
-add_glyph_board (V, Inv) -> Inv#inventory{ glyph_boards = V }.
+add_glyph_board (V, Inv) ->
+ Inv#inventory
+ {
+ glyph_boards = ordsets:add_element(V, Inv#inventory.glyph_boards)
+ }.
-spec add_glyph (shr_glyph:id(), type()) -> type().
-add_glyph (V, Inv) -> Inv#inventory{ glyphs = V }.
+add_glyph (V, Inv) ->
+ Inv#inventory{ glyphs = ordsets:add_element(V, Inv#inventory.glyphs) }.
-spec ataxia_add_weapon
@@ -115,12 +124,12 @@ add_glyph (V, Inv) -> Inv#inventory{ glyphs = V }.
shr_weapon:id(),
type()
)
- -> {type(), list(ataxic:basic())}.
+ -> {type(), ataxic:basic()}.
ataxia_add_weapon (V, Inv) ->
CurrentWeapons = Inv#inventory.weapons,
case ordsets:is_element(V, CurrentWeapons) of
- true -> Inv;
+ true -> {Inv, ataxic:current_value()};
false ->
{
Inv#inventory{ weapons = ordsets:add_element(V, CurrentWeapons) },
@@ -142,12 +151,12 @@ ataxia_add_weapon (V, Inv) ->
shr_armor:id(),
type()
)
- -> {type(), list(ataxic:basic())}.
+ -> {type(), ataxic:basic()}.
ataxia_add_armor (V, Inv) ->
CurrentArmors = Inv#inventory.armors,
case ordsets:is_element(V, CurrentArmors) of
- true -> Inv;
+ true -> {Inv, ataxic:current_value()};
false ->
{
Inv#inventory{ armors = ordsets:add_element(V, CurrentArmors) },
@@ -169,12 +178,12 @@ ataxia_add_armor (V, Inv) ->
shr_portrait:id(),
type()
)
- -> {type(), list(ataxic:basic())}.
+ -> {type(), ataxic:basic()}.
ataxia_add_portrait (V, Inv) ->
CurrentPortraits = Inv#inventory.portraits,
case ordsets:is_element(V, CurrentPortraits) of
- true -> Inv;
+ true -> {Inv, ataxic:current_value()};
false ->
{
Inv#inventory
@@ -199,12 +208,12 @@ ataxia_add_portrait (V, Inv) ->
shr_glyph_board:id(),
type()
)
- -> {type(), list(ataxic:basic())}.
+ -> {type(), ataxic:basic()}.
ataxia_add_glyph_board (V, Inv) ->
CurrentGlyphBoards = Inv#inventory.glyph_boards,
case ordsets:is_element(V, CurrentGlyphBoards) of
- true -> Inv;
+ true -> {Inv, ataxic:current_value()};
false ->
{
Inv#inventory
@@ -229,12 +238,12 @@ ataxia_add_glyph_board (V, Inv) ->
shr_glyph:id(),
type()
)
- -> {type(), list(ataxic:basic())}.
+ -> {type(), ataxic:basic()}.
ataxia_add_glyph (V, Inv) ->
CurrentGlyphs = Inv#inventory.glyphs,
case ordsets:is_element(V, CurrentGlyphs) of
- true -> Inv;
+ true -> {Inv, ataxic:current_value()};
false ->
{
Inv#inventory{ glyphs = ordsets:add_element(V, CurrentGlyphs) },
@@ -354,7 +363,7 @@ add_equipment (Eq, Inv) ->
(shr_equipment:type()|shr_equipment:unresolved()),
type()
)
- -> {type(), list(ataxic:basic())}.
+ -> {type(), ataxic:basic()}.
ataxia_add_equipment (Eq, Inv) ->
{S0Inv, Ataxic0} =
ataxia_add_weapon(shr_equipment:get_primary_weapon_id(Eq), Inv),
@@ -380,10 +389,9 @@ ataxia_add_equipment (Eq, Inv) ->
{
S4Inv,
- lists:flatten
+ ataxic:optimize
(
- [Ataxic0, Ataxic1, Ataxic2, Ataxic3],
- lists:flatten(Ataxic4s)
+ ataxic:sequence([Ataxic0, Ataxic1, Ataxic2, Ataxic3|Ataxic4s])
)
}.
diff --git a/src/shared/struct/inventory/shr_weapon.erl.m4 b/src/shared/struct/inventory/shr_weapon.erl.m4
index 189afa7..a18c48e 100644
--- a/src/shared/struct/inventory/shr_weapon.erl.m4
+++ b/src/shared/struct/inventory/shr_weapon.erl.m4
@@ -41,7 +41,7 @@
(
[
default/0,
- default/0,
+ default_id/0,
from_id/1
]
).
diff --git a/src/shared/struct/map/shr_inventory.erl b/src/shared/struct/map/shr_inventory.erl
deleted file mode 100644
index 1f04533..0000000
--- a/src/shared/struct/map/shr_inventory.erl
+++ /dev/null
@@ -1,153 +0,0 @@
--module(shr_inventory).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--type id() :: ataxia_id:type().
--record
-(
- inventory,
- {
- owner_id :: shr_player:id(),
- portrait_ids :: ordsets:ordset(binary()),
- glyph_ids :: ordsets:ordset(binary()),
- glyph_board_ids :: ordsets:ordset(binary()),
- weapon_ids :: ordsets:ordset(binary()),
- armor_ids :: ordsets:ordset(binary())
- }
-).
-
--opaque type() :: #inventory{}.
-
--export_type([type/0, id/0]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% Accessors
--export
-(
- [
- get_owner_id/1,
-
- get_portrait_ids/1,
- get_glyph_ids/1,
- get_glyph_board_ids/1,
- get_weapon_ids/1,
- get_armor_ids/1,
-
- set_portrait_ids/2,
- set_glyph_ids/2,
- set_glyph_board_ids/2,
- set_weapon_ids/2,
- set_armor_ids/2
- ]
-).
-
--export
-(
- [
- get_portrait_ids_field/0,
- get_glyph_ids_field/0,
- get_glyph_board_ids_field/0,
- get_weapon_ids_field/0,
- get_armor_ids_field/0
- ]
-).
-
--export
-(
- [
- new/1
- ]
-).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% Accessors
--spec get_owner_id (type()) -> shr_player:id().
-get_owner_id (Inv) -> Inv#inventory.owner_id.
-
--spec get_portrait_ids (type()) -> ordsets:ordset(binary()).
-get_portrait_ids (Inv) -> Inv#inventory.portrait_ids.
-
--spec get_glyph_ids (type()) -> ordsets:ordset(binary()).
-get_glyph_ids (Inv) -> Inv#inventory.glyph_ids.
-
--spec get_glyph_board_ids (type()) -> ordsets:ordset(binary()).
-get_glyph_board_ids (Inv) -> Inv#inventory.glyph_board_ids.
-
--spec get_weapon_ids (type()) -> ordsets:ordset(binary()).
-get_weapon_ids (Inv) -> Inv#inventory.weapon_ids.
-
--spec get_armor_ids (type()) -> ordsets:ordset(binary()).
-get_armor_ids (Inv) -> Inv#inventory.armor_ids.
-
--spec set_portrait_ids (ordsets:ordset(binary()), type()) -> type().
-set_portrait_ids (Value, Inv) ->
- Inv#inventory
- {
- portrait_ids = Value
- }.
-
--spec set_glyph_ids (ordsets:ordset(binary()), type()) -> type().
-set_glyph_ids (Value, Inv) ->
- Inv#inventory
- {
- glyph_ids = Value
- }.
-
--spec set_glyph_board_ids (ordsets:ordset(binary()), type()) -> type().
-set_glyph_board_ids (Value, Inv) ->
- Inv#inventory
- {
- glyph_board_ids = Value
- }.
-
--spec set_weapon_ids (ordsets:ordset(binary()), type()) -> type().
-set_weapon_ids (Value, Inv) ->
- Inv#inventory
- {
- weapon_ids = Value
- }.
-
--spec set_armor_ids (ordsets:ordset(binary()), type()) -> type().
-set_armor_ids (Value, Inv) ->
- Inv#inventory
- {
- armor_ids = Value
- }.
-
--spec get_portrait_ids_field () -> non_neg_integer().
-get_portrait_ids_field () -> #inventory.portrait_ids.
-
--spec get_glyph_ids_field () -> non_neg_integer().
-get_glyph_ids_field () -> #inventory.glyph_ids.
-
--spec get_glyph_board_ids_field () -> non_neg_integer().
-get_glyph_board_ids_field () -> #inventory.glyph_board_ids.
-
--spec get_weapon_ids_field () -> non_neg_integer().
-get_weapon_ids_field () -> #inventory.weapon_ids.
-
--spec get_armor_ids_field () -> non_neg_integer().
-get_armor_ids_field () -> #inventory.armor_ids.
-
--spec new (shr_player:id()) -> type().
-new (OwnerID) ->
- EmptySet = ordsets:new(),
-
- #inventory
- {
- owner_id = OwnerID,
- portrait_ids = EmptySet,
- glyph_ids = EmptySet,
- glyph_board_ids = EmptySet,
- weapon_ids = EmptySet,
- armor_ids = EmptySet
- }.
diff --git a/src/shared/struct/map/shr_map.erl b/src/shared/struct/map/shr_map.erl
index c0bf385..6db984b 100644
--- a/src/shared/struct/map/shr_map.erl
+++ b/src/shared/struct/map/shr_map.erl
@@ -36,7 +36,7 @@
get_markers/1,
get_marker/2,
- get_used_tile_ids/1
+ get_related_tile_ids/1
]
).
@@ -136,8 +136,8 @@ get_markers_field () -> #map.markers.
get_tile_instances_field () -> #map.tile_instances.
%%%% Utility
--spec get_used_tile_ids (type()) -> ordsets:ordset(shr_tile:id()).
-get_used_tile_ids (Map) ->
+-spec get_related_tile_ids (type()) -> ordsets:ordset(shr_tile:id()).
+get_related_tile_ids (Map) ->
UsedTileIDs =
lists:foldl
(
diff --git a/src/shared/struct/shr_character.erl b/src/shared/struct/shr_character.erl
index d5dec75..ea8e857 100644
--- a/src/shared/struct/shr_character.erl
+++ b/src/shared/struct/shr_character.erl
@@ -164,15 +164,15 @@ set_equipment (Eq, Char) when is_record(Char, shr_char) ->
NewAttributes =
shr_omnimods:apply_to_attributes
(
- shr_attributes:default(),
- NewOmnimods
+ NewOmnimods,
+ shr_attributes:default()
),
NewStatistics =
shr_omnimods:apply_to_statistics
(
- shr_statistics:new_raw(NewAttributes),
- NewOmnimods
+ NewOmnimods,
+ shr_statistics:new_raw(NewAttributes)
),
Char#shr_char
@@ -239,15 +239,15 @@ switch_weapons (Char) when is_record(Char, shr_char) ->
NewAttributes =
shr_omnimods:apply_to_attributes
(
- shr_attributes:default(),
- NewOmnimods
+ NewOmnimods,
+ shr_attributes:default()
),
NewStatistics =
shr_omnimods:apply_to_statistics
(
- shr_statistics:new_raw(NewAttributes),
- NewOmnimods
+ NewOmnimods,
+ shr_statistics:new_raw(NewAttributes)
),
Char#shr_char
@@ -325,15 +325,15 @@ set_extra_omnimods (O, Char) ->
NewAttributes =
shr_omnimods:apply_to_attributes
(
- shr_attributes:default(),
- NewOmnimods
+ NewOmnimods,
+ shr_attributes:default()
),
NewStatistics =
shr_omnimods:apply_to_statistics
(
- shr_statistics:new_raw(NewAttributes),
- NewOmnimods
+ NewOmnimods,
+ shr_statistics:new_raw(NewAttributes)
),
Char#shr_char
diff --git a/src/shared/struct/shr_omnimods.erl b/src/shared/struct/shr_omnimods.erl
index bfd9d25..8d82287 100644
--- a/src/shared/struct/shr_omnimods.erl
+++ b/src/shared/struct/shr_omnimods.erl
@@ -28,6 +28,7 @@
-export
(
[
+ default/0,
new/4,
new_dirty/4
]
@@ -115,6 +116,9 @@ new (AttributeMods, StatisticMods, AttackMods, DefenseMods) ->
defmods = dict:from_list(DefenseMods)
}.
+-spec default () -> type().
+default () -> new([], [], [], []).
+
-spec new_dirty
(
list(entry()),