summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2019-04-01 18:02:12 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2019-04-01 18:02:12 +0200
commit567ad4994492f4d53325260c63638cf12fe928e4 (patch)
tree98183a7f0b520764cf84f5c872e5a117005e1a81 /src/shared/struct/inventory
parentada321442febcee20e0d4e6d29238cf10e6fca6a (diff)
[Broken] Refactoring...
Diffstat (limited to 'src/shared/struct/inventory')
-rw-r--r--src/shared/struct/inventory/shr_armor.erl.m412
-rw-r--r--src/shared/struct/inventory/shr_equipment.erl257
-rw-r--r--src/shared/struct/inventory/shr_glyph.erl.m416
-rw-r--r--src/shared/struct/inventory/shr_glyph_board.erl.m412
-rw-r--r--src/shared/struct/inventory/shr_inventory.erl175
-rw-r--r--src/shared/struct/inventory/shr_portrait.erl.m46
-rw-r--r--src/shared/struct/inventory/shr_weapon.erl.m412
7 files changed, 476 insertions, 14 deletions
diff --git a/src/shared/struct/inventory/shr_armor.erl.m4 b/src/shared/struct/inventory/shr_armor.erl.m4
index 18d203a..0594577 100644
--- a/src/shared/struct/inventory/shr_armor.erl.m4
+++ b/src/shared/struct/inventory/shr_armor.erl.m4
@@ -35,7 +35,8 @@
-export
(
[
- none/0,
+ default/0,
+ default_id/0,
from_id/1
]
).
@@ -62,7 +63,10 @@ get_omnimods (Ar) -> Ar#armor.omnimods.
m4_include(__MAKEFILE_DATA_DIR/armor/global.m4.conf)m4_dnl
m4_include(__MAKEFILE_DATA_DIR/armor/basic.m4d)m4_dnl
from_id(_) ->
- none().
+ default().
--spec none () -> type().
-none () -> from_id(<<"0">>).
+-spec default () -> type().
+default () -> from_id(<<"0">>).
+
+-spec default_id () -> id().
+default_id () -> <<"0">>.
diff --git a/src/shared/struct/inventory/shr_equipment.erl b/src/shared/struct/inventory/shr_equipment.erl
new file mode 100644
index 0000000..f5eba8f
--- /dev/null
+++ b/src/shared/struct/inventory/shr_equipment.erl
@@ -0,0 +1,257 @@
+-module(shr_equipment).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-record
+(
+ shr_eq_ref,
+ {
+ primary :: shr_weapon:id(),
+ secondary :: shr_weapon:id(),
+ armor :: shr_armor:id(),
+ portrait :: shr_portrait:id(),
+ glyph_board :: shr_glyph_board:id(),
+ glyphs :: list(shr_glyph:id())
+ }
+).
+
+-record
+(
+ shr_eq,
+ {
+ primary :: shr_weapon:type(),
+ secondary :: shr_weapon:type(),
+ armor :: shr_armor:type(),
+ portrait :: shr_portrait:type(),
+ glyph_board :: shr_glyph_board:type(),
+ glyphs :: list(shr_glyph:type())
+ }
+).
+
+-opaque type() :: #shr_eq{}.
+-opaque unresolved() :: #shr_eq_ref{}.
+-type either() :: (type() | unresolved()).
+
+-export_type([type/0, unresolved/0]).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%% Accessors
+-export
+(
+ [
+ get_primary_weapon/1,
+ get_secondary_weapon/1,
+ get_armor/1,
+ get_portrait/1,
+ get_glyph_board/1,
+ get_glyphs/1,
+
+ set_primary_weapon/2,
+ set_secondary_weapon/2,
+ set_armor/2,
+ set_portrait/2,
+ set_glyph_board/2,
+ set_glyphs/2,
+
+ get_primary_weapon_id/1,
+ get_secondary_weapon_id/1,
+ get_armor_id/1,
+ get_portrait_id/1,
+ get_glyph_board_id/1,
+ get_glyph_ids/1,
+
+ set_primary_weapon_id/2,
+ set_secondary_weapon_id/2,
+ set_armor_id/2,
+ set_portrait_id/2,
+ set_glyph_board_id/2,
+ set_glyph_ids/2
+ ]
+).
+
+%%%% Accessors
+-export
+(
+ [
+ default/0,
+ default_unresolved/0
+ ]
+).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec get_primary_weapon (either()) -> shr_weapon:type().
+get_primary_weapon (#shr_eq{ primary = R }) -> R;
+get_primary_weapon (#shr_eq_ref{ primary = R }) -> shr_weapon:from_id(R).
+
+-spec get_secondary_weapon (either()) -> shr_weapon:type().
+get_secondary_weapon (#shr_eq{ secondary = R }) -> R;
+get_secondary_weapon (#shr_eq_ref{ secondary = R }) -> shr_weapon:from_id(R).
+
+-spec get_armor (either()) -> shr_armor:type().
+get_armor (#shr_eq{ armor = R }) -> R;
+get_armor (#shr_eq_ref{ armor = R }) -> shr_armor:from_id(R).
+
+-spec get_portrait (either()) -> shr_portrait:type().
+get_portrait (#shr_eq{ portrait = R }) -> R;
+get_portrait (#shr_eq_ref{ portrait = R }) -> shr_portrait:from_id(R).
+
+-spec get_glyph_board (either()) -> shr_glyph_board:type().
+get_glyph_board (#shr_eq{ glyph_board = R }) -> R;
+get_glyph_board (#shr_eq_ref{ glyph_board = R }) -> shr_glyph_board:from_id(R).
+
+-spec get_glyphs (either()) -> list(shr_glyph:type()).
+get_glyphs (#shr_eq{ glyphs = R }) -> R;
+get_glyphs (#shr_eq_ref{ glyphs = R }) -> lists:map(fun shr_glyph:from_id/1, R).
+
+-spec get_primary_weapon_id (either()) -> shr_weapon:id().
+get_primary_weapon_id (#shr_eq_ref{ primary = R }) -> R;
+get_primary_weapon_id (#shr_eq{ primary = R }) -> shr_weapon:get_id(R).
+
+-spec get_secondary_weapon_id (either()) -> shr_weapon:id().
+get_secondary_weapon_id (#shr_eq_ref{ secondary = R }) -> R;
+get_secondary_weapon_id (#shr_eq{ secondary = R }) -> shr_weapon:get_id(R).
+
+-spec get_armor_id (either()) -> shr_armor:id().
+get_armor_id (#shr_eq_ref{ armor = R }) -> R;
+get_armor_id (#shr_eq{ armor = R }) -> shr_armor:get_id(R).
+
+-spec get_portrait_id (either()) -> shr_portrait:id().
+get_portrait_id (#shr_eq_ref{ portrait = R }) -> R;
+get_portrait_id (#shr_eq{ portrait = R }) -> shr_portrait:get_id(R).
+
+-spec get_glyph_board_id (either()) -> shr_glyph_board:id().
+get_glyph_board_id (#shr_eq_ref{ glyph_board = R }) -> R;
+get_glyph_board_id (#shr_eq{ glyph_board = R }) -> shr_glyph_board:get_id(R).
+
+-spec get_glyph_ids (type()) -> list(shr_glyph:id()).
+get_glyph_ids (#shr_eq_ref{ glyphs = R }) -> R;
+get_glyph_ids (#shr_eq{ glyphs = R }) -> lists:map(fun shr_glyph:get_id/1, R).
+
+-spec set_primary_weapon
+ (shr_weapon:type(), type()) -> type();
+ (shr_weapon:type(), unresolved()) -> unresolved().
+set_primary_weapon (V, Eq) when is_record(Eq, shr_eq) ->
+ Eq#shr_eq{ primary = V };
+set_primary_weapon (V, Eq) when is_record(Eq, shr_eq_ref) ->
+ Eq#shr_eq_ref{ primary = shr_weapon:get_id(V) }.
+
+-spec set_secondary_weapon
+ (shr_weapon:type(), type()) -> type();
+ (shr_weapon:type(), unresolved()) -> unresolved().
+set_secondary_weapon (V, Eq) when is_record(Eq, shr_eq) ->
+ Eq#shr_eq{ secondary = V };
+set_secondary_weapon (V, Eq) when is_record(Eq, shr_eq_ref) ->
+ Eq#shr_eq_ref{ secondary = shr_weapon:get_id(V) }.
+
+-spec set_armor
+ (shr_armor:type(), type()) -> type();
+ (shr_armor:type(), unresolved()) -> unresolved().
+set_armor (V, Eq) when is_record(Eq, shr_eq) ->
+ Eq#shr_eq{ armor = V };
+set_armor (V, Eq) when is_record(Eq, shr_eq_ref) ->
+ Eq#shr_eq_ref{ armor = shr_armor:get_id(V) }.
+
+-spec set_portrait
+ (shr_portrait:type(), type()) -> type();
+ (shr_portrait:type(), unresolved()) -> unresolved().
+set_portrait (V, Eq) when is_record(Eq, shr_eq) ->
+ Eq#shr_eq{ portrait = V };
+set_portrait (V, Eq) when is_record(Eq, shr_eq_ref) ->
+ Eq#shr_eq_ref{ portrait = shr_portrait:get_id(V) }.
+
+-spec set_glyph_board
+ (shr_glyph_board:type(), type()) -> type();
+ (shr_glyph_board:type(), unresolved()) -> unresolved().
+set_glyph_board (V, Eq) when is_record(Eq, shr_eq) ->
+ Eq#shr_eq{ glyph_board = V };
+set_glyph_board (V, Eq) when is_record(Eq, shr_eq_ref) ->
+ Eq#shr_eq_ref{ glyph_board = shr_glyph_board:get_id(V) }.
+
+-spec set_glyphs
+ (list(shr_glyph:type()), type()) -> type();
+ (list(shr_glyph:type()), unresolved()) -> unresolved().
+set_glyphs (V, Eq) when is_record(Eq, shr_eq) ->
+ Eq#shr_eq{ glyphs = V };
+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 set_primary_weapon_id
+ (shr_weapon:id(), type()) -> type();
+ (shr_weapon:id(), unresolved()) -> unresolved().
+set_primary_weapon_id (V, Eq) when is_record(Eq, shr_eq_ref) ->
+ Eq#shr_eq_ref{ primary = V };
+set_primary_weapon_id (V, Eq) when is_record(Eq, shr_eq) ->
+ Eq#shr_eq{ primary = shr_weapon:from_id(V) }.
+
+-spec set_secondary_weapon_id
+ (shr_weapon:id(), type()) -> type();
+ (shr_weapon:id(), unresolved()) -> unresolved().
+set_secondary_weapon_id (V, Eq) when is_record(Eq, shr_eq_ref) ->
+ Eq#shr_eq_ref{ secondary = V };
+set_secondary_weapon_id (V, Eq) when is_record(Eq, shr_eq) ->
+ Eq#shr_eq{ secondary = shr_weapon:from_id(V) }.
+
+-spec set_armor_id
+ (shr_armor:id(), type()) -> type();
+ (shr_armor:id(), unresolved()) -> unresolved().
+set_armor_id (V, Eq) when is_record(Eq, shr_eq_ref) ->
+ Eq#shr_eq_ref{ armor = V };
+set_armor_id (V, Eq) when is_record(Eq, shr_eq) ->
+ Eq#shr_eq{ armor = shr_armor:from_id(V) }.
+
+-spec set_portrait_id
+ (shr_portrait:id(), type()) -> type();
+ (shr_portrait:id(), unresolved()) -> unresolved().
+set_portrait_id (V, Eq) when is_record(Eq, shr_eq_ref) ->
+ Eq#shr_eq_ref{ portrait = V };
+set_portrait_id (V, Eq) when is_record(Eq, shr_eq) ->
+ Eq#shr_eq{ portrait = shr_portrait:from_id(V) }.
+
+-spec set_glyph_board_id
+ (shr_glyph_board:id(), type()) -> type();
+ (shr_glyph_board:id(), unresolved()) -> unresolved().
+set_glyph_board_id (V, Eq) when is_record(Eq, shr_eq_ref) ->
+ Eq#shr_eq_ref{ glyph_board = V };
+set_glyph_board_id (V, Eq) when is_record(Eq, shr_eq) ->
+ Eq#shr_eq{ glyph_board = shr_glyph_board:from_id(V) }.
+
+-spec set_glyph_ids
+ (list(shr_glyph:id()), type()) -> type();
+ (list(shr_glyph:id()), unresolved()) -> unresolved().
+set_glyph_ids (V, Eq) when is_record(Eq, shr_eq_ref) ->
+ Eq#shr_eq_ref{ glyphs = V };
+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 default () -> type().
+default () ->
+ #shr_eq
+ {
+ primary = shr_weapon:default(),
+ secondary = shr_weapon:default(),
+ armor = shr_armor:default(),
+ portrait = shr_portrait:default(),
+ glyph_board = shr_glyph_board:default(),
+ glyphs = []
+ }.
+
+-spec default_unresolved () -> unresolved().
+default_unresolved () ->
+ #shr_eq_ref
+ {
+ primary = shr_weapon:default_id(),
+ secondary = shr_weapon:default_id(),
+ armor = shr_armor:default_id(),
+ portrait = shr_portrait:default_id(),
+ glyph_board = shr_glyph_board:default_id(),
+ glyphs = []
+ }.
diff --git a/src/shared/struct/inventory/shr_glyph.erl.m4 b/src/shared/struct/inventory/shr_glyph.erl.m4
index cd59a27..0ce4c47 100644
--- a/src/shared/struct/inventory/shr_glyph.erl.m4
+++ b/src/shared/struct/inventory/shr_glyph.erl.m4
@@ -35,7 +35,15 @@
[
get_id/1,
get_name/1,
- get_omnimods/1
+ get_omnimods/1,
+ ]
+).
+
+-export
+(
+ [
+ default/0,
+ default_id/0
]
).
@@ -60,3 +68,9 @@ m4_include(__MAKEFILE_DATA_DIR/glyph/global.m4.conf)m4_dnl
m4_include(__MAKEFILE_DATA_DIR/glyph/basic.m4d)m4_dnl
from_id(_) ->
from_id(<<"0">>).
+
+-spec default () -> type().
+default () -> from_id(<<"0">>).
+
+-spec default_id () -> id().
+default_id () -> <<"0">>.
diff --git a/src/shared/struct/inventory/shr_glyph_board.erl.m4 b/src/shared/struct/inventory/shr_glyph_board.erl.m4
index 7fe77b1..c2128a9 100644
--- a/src/shared/struct/inventory/shr_glyph_board.erl.m4
+++ b/src/shared/struct/inventory/shr_glyph_board.erl.m4
@@ -43,7 +43,8 @@
-export
(
[
- none/0,
+ default/0,
+ default_id/0,
get_omnimods_with_glyphs/2
]
).
@@ -91,10 +92,10 @@ get_slots (GlyphBoard) -> GlyphBoard#glyph_board.slots.
m4_include(__MAKEFILE_DATA_DIR/glyph_board/global.m4.conf)m4_dnl
m4_include(__MAKEFILE_DATA_DIR/glyph_board/basic.m4d)m4_dnl
from_id(_) ->
- none().
+ default().
--spec none () -> type().
-none () -> from_id(<<"0">>).
+-spec default () -> type().
+default () -> from_id(<<"0">>).
-spec get_omnimods_with_glyphs
(
@@ -107,3 +108,6 @@ get_omnimods_with_glyphs (Glyphs, GlyphBoard) ->
BoardSlots = GlyphBoard#glyph_board.slots,
get_omnimods_with_glyphs_internals(BoardOmnimods, Glyphs, BoardSlots).
+
+-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
new file mode 100644
index 0000000..d6e6dbe
--- /dev/null
+++ b/src/shared/struct/inventory/shr_inventory.erl
@@ -0,0 +1,175 @@
+-module(shr_inventory).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-record
+(
+ inventory,
+ {
+ weapons :: ordsets:ordset(shr_weapon:id()),
+ armors :: ordsets:ordset(shr_armor:id()),
+ portraits :: ordsets:ordset(shr_portrait:id()),
+ glyph_boards :: ordsets:ordset(shr_glyph_board:id()),
+ glyphs :: ordsets:ordset(shr_glyph:id())
+ }
+).
+
+-opaque type() :: #inventory{}.
+
+-export_type([type/0]).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%% Accessors
+-export
+(
+ [
+ get_weapons/1,
+ get_armors/1,
+ get_portraits/1,
+ get_glyph_boards/1,
+ get_glyphs/1,
+
+ set_weapons/2,
+ set_armors/2,
+ set_portraits/2,
+ set_glyph_boards/2,
+ set_glyphs/2
+ ]
+).
+
+%%%% Accessors
+-export
+(
+ [
+ default/0,
+ allows_equipment/2,
+ add_equipment/2
+ ]
+).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec get_weapons (type()) -> ordsets:ordset(shr_weapon:id()).
+get_weapons (Inv) -> Inv#inventory.weapons.
+
+-spec get_armors (type()) -> ordsets:ordset(shr_armor:id()).
+get_armors (Inv) -> Inv#inventory.armors.
+
+-spec get_portraits (type()) -> ordsets:ordset(shr_portrait:id()).
+get_portraits (Inv) -> Inv#inventory.portraits.
+
+-spec get_glyph_boards (type()) -> ordsets:ordset(shr_glyph_board:id()).
+get_glyph_boards (Inv) -> Inv#inventory.glyph_boards.
+
+-spec get_glyphs (type()) -> ordsets:ordset(shr_glyph:id()).
+get_glyphs (Inv) -> Inv#inventory.glyphs.
+
+-spec set_weapons (ordsets:ordset(shr_weapon:id()), type()) -> type().
+set_weapons (V, Inv) -> Inv#inventory{ weapons = V }.
+
+-spec set_armors (ordsets:ordset(shr_armor:id()), type()) -> type().
+set_armors (V, Inv) -> Inv#inventory{ armors = V }.
+
+-spec set_portraits (ordsets:ordset(shr_portrait:id()), type()) -> type().
+set_portraits (V, Inv) -> Inv#inventory{ portraits = V }.
+
+-spec set_glyph_boards (ordsets:ordset(shr_glyph_board:id()), type()) -> type().
+set_glyph_boards (V, Inv) -> Inv#inventory{ glyph_boards = V }.
+
+-spec set_glyphs (ordsets:ordset(shr_glyph:id()), type()) -> type().
+set_glyphs (V, Inv) -> Inv#inventory{ glyphs = V }.
+
+-spec default () -> type().
+default () ->
+ EmptySet = ordsets:new(),
+ #inventory
+ {
+ weapons = EmptySet,
+ armors = EmptySet,
+ portraits = EmptySet,
+ glyph_boards = EmptySet,
+ glyphs = EmptySet
+ }.
+
+-spec allows_equipment (shr_equipment:type(), type()) -> boolean().
+allows_equipment (Eq, Inv) ->
+ Weapons = Inv#inventory.weapons,
+ Glyphs = Inv#inventory.glyphs,
+
+ (
+ ordsets:is_element(shr_equipment:get_primary_weapon_id(Eq), Weapons)
+ and ordsets:is_element(shr_equipment:get_secondary_weapon_id(Eq), Weapons)
+ and
+ ordsets:is_element
+ (
+ shr_equipment:get_armor_id(Eq),
+ Inv#inventory.armors
+ )
+ and
+ ordsets:is_element
+ (
+ shr_equipment:get_portrait_id(Eq),
+ Inv#inventory.portraits
+ )
+ and
+ ordsets:is_element
+ (
+ shr_equipment:get_glyph_board_id(Eq),
+ Inv#inventory.glyph_boards
+ )
+ and
+ lists:all
+ (
+ fun (G) -> ordsets:is_element(G, Glyphs) end,
+ shr_equipment:get_glyph_ids(Eq)
+ )
+ ).
+
+-spec add_equipment (shr_equipment:type(), type()) -> type().
+add_equipment (Eq, Inv) ->
+ Inv#inventory
+ {
+ weapons =
+ ordsets:add_element
+ (
+ shr_equipment:get_primary_weapon_id(Eq),
+ ordsets:add_element
+ (
+ shr_equipment:get_secondary_weapon_id(Eq),
+ Inv#inventory.weapons
+ )
+ ),
+ armors =
+ ordsets:add_element
+ (
+ shr_equipment:get_armor_id(Eq),
+ Inv#inventory.armors
+ ),
+ portraits =
+ ordsets:add_element
+ (
+ shr_equipment:get_portrait_id(Eq),
+ Inv#inventory.portraits
+ ),
+ glyph_boards =
+ ordsets:add_element
+ (
+ shr_equipment:get_glyph_board_id(Eq),
+ Inv#inventory.glyph_boards
+ ),
+ glyphs =
+ lists:foldl
+ (
+ fun ordsets:add_element/2,
+ Inv#inventory.glyph_boards,
+ shr_equipment:get_glyph_ids(Eq)
+ )
+ }.
diff --git a/src/shared/struct/inventory/shr_portrait.erl.m4 b/src/shared/struct/inventory/shr_portrait.erl.m4
index fefc434..1e65263 100644
--- a/src/shared/struct/inventory/shr_portrait.erl.m4
+++ b/src/shared/struct/inventory/shr_portrait.erl.m4
@@ -38,7 +38,8 @@
(
[
from_id/1,
- default/0
+ default/0,
+ default_id/0
]
).
@@ -71,3 +72,6 @@ from_id(_) ->
-spec default () -> type().
default () -> from_id(<<"cat">>).
+
+-spec default_id () -> id().
+default_id () -> <<"cat">>.
diff --git a/src/shared/struct/inventory/shr_weapon.erl.m4 b/src/shared/struct/inventory/shr_weapon.erl.m4
index 1a2dcf5..189afa7 100644
--- a/src/shared/struct/inventory/shr_weapon.erl.m4
+++ b/src/shared/struct/inventory/shr_weapon.erl.m4
@@ -40,7 +40,8 @@
-export
(
[
- none/0,
+ default/0,
+ default/0,
from_id/1
]
).
@@ -73,7 +74,10 @@ m4_include(__MAKEFILE_DATA_DIR/weapon/global.m4.conf)m4_dnl
m4_include(__MAKEFILE_DATA_DIR/weapon/basic.m4d)m4_dnl
m4_include(__MAKEFILE_DATA_DIR/weapon/secondary.m4d)m4_dnl
from_id (_) ->
- none().
+ default().
--spec none () -> type().
-none () -> from_id(<<"0">>).
+-spec default () -> type().
+default () -> from_id(<<"0">>).
+
+-spec default_id () -> id().
+default_id () -> <<"0">>.