summaryrefslogtreecommitdiff |
diff options
author | nsensfel <SpamShield0@noot-noot.org> | 2019-04-19 19:00:57 +0200 |
---|---|---|
committer | nsensfel <SpamShield0@noot-noot.org> | 2019-04-19 19:00:57 +0200 |
commit | 7ad856639b0d8470728d4e5436c3b1152959fd99 (patch) | |
tree | 0ccb9f855f0e10182977c03dbff0d908b598ebad | |
parent | 2ed5b1f48f7784411bcb0983b3490b7c79032eb7 (diff) |
[Broken] ...
-rw-r--r-- | src/battle/struct/btl_character.erl | 2 | ||||
-rw-r--r-- | src/shared/struct/inventory/shr_equipment.erl | 17 | ||||
-rw-r--r-- | src/shared/struct/inventory/shr_inventory.erl | 36 | ||||
-rw-r--r-- | src/shared/struct/shr_character.erl | 192 |
4 files changed, 194 insertions, 53 deletions
diff --git a/src/battle/struct/btl_character.erl b/src/battle/struct/btl_character.erl index 1136c8f..69904c6 100644 --- a/src/battle/struct/btl_character.erl +++ b/src/battle/struct/btl_character.erl @@ -271,7 +271,7 @@ decode (Map) -> base = shr_character:decode(maps:get(?BASE_CHAR_FIELD, Map)) }. --spec encode (unresolved()) -> unresolved(). +-spec encode (unresolved()) -> {list({binary(), any()})}. encode (CharRef) -> { [ diff --git a/src/shared/struct/inventory/shr_equipment.erl b/src/shared/struct/inventory/shr_equipment.erl index e505d91..11dc19e 100644 --- a/src/shared/struct/inventory/shr_equipment.erl +++ b/src/shared/struct/inventory/shr_equipment.erl @@ -91,8 +91,23 @@ ( [ default/0, - default_unresolved/0, + default_unresolved/0 + ] +). +-export +( + [ + resolve/1, + to_unresolved/1, + encode/1, + decode/1 + ] +). + +-export +( + [ get_primary_weapon_field/0, get_secondary_weapon_field/0, get_armor_field/0, diff --git a/src/shared/struct/inventory/shr_inventory.erl b/src/shared/struct/inventory/shr_inventory.erl index 4f64f68..4ea3e7b 100644 --- a/src/shared/struct/inventory/shr_inventory.erl +++ b/src/shared/struct/inventory/shr_inventory.erl @@ -1,5 +1,11 @@ -module(shr_inventory). +-define(WEAPONS_FIELD, <<"wp">>). +-define(ARMORS_FIELD, <<"ar">>). +-define(PORTRAITS_FIELD, <<"pt">>). +-define(GLYPH_BOARDS_FIELD, <<"gb">>). +-define(GLYPHS_FIELD, <<"gl">>). + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -50,6 +56,14 @@ -export ( [ + encode/1, + decode/1 + ] +). + +-export +( + [ default/0, allows_equipment/2, add_equipment/2, @@ -373,6 +387,28 @@ ataxia_add_equipment (Eq, Inv) -> ) }. +-spec decode (map()) -> type(). +decode (Map) -> + #inventory + { + weapons = ordsets:from_list(maps:get(?WEAPONS_FIELD, Map)), + armors = ordsets:from_list(maps:get(?ARMORS_FIELD, Map)), + portraits = ordsets:from_list(maps:get(?PORTRAITS_FIELD, Map)), + glyph_boards = ordsets:from_list(maps:get(?GLYPH_BOARDS_FIELD, Map)), + glyphs = ordsets:from_list(maps:get(?GLYPHS_FIELD, Map)) + }. + +-spec encode (type()) -> {list({binary(), any()})}. +encode (Inv) -> + { + [ + {?WEAPONS_FIELD, ordsets:to_list(Inv#inventory.weapons)}, + {?ARMORS_FIELD, ordsets:to_list(Inv#inventory.armors)}, + {?PORTRAITS_FIELD, ordsets:to_list(Inv#inventory.portraits)}, + {?GLYPH_BOARDS_FIELD, ordsets:to_list(Inv#inventory.glyph_boards)}, + {?GLYPHS_FIELD, ordsets:to_list(Inv#inventory.glyphs)} + ] + }. -spec get_weapons_field () -> non_neg_integer(). get_weapons_field () -> #inventory.weapons. diff --git a/src/shared/struct/shr_character.erl b/src/shared/struct/shr_character.erl index f82dc17..133a6c2 100644 --- a/src/shared/struct/shr_character.erl +++ b/src/shared/struct/shr_character.erl @@ -1,5 +1,9 @@ -module(shr_character). +-define(NAME_FIELD, <<"nam">>). +-define(EQUIPMENT_FIELD, <<"eq">>). +-define(IS_USING_SECONDARY_FIELD, <<"sec">>). + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -22,8 +26,9 @@ is_using_secondary :: boolean(), statistics :: shr_statistics:type(), attributes :: shr_attributes:type(), - unchanging_omnimods :: shr_omnimods:type(), - omnimods :: shr_omnimods:type() + extra_omnimods :: shr_omnimods:type(), + omnimods :: shr_omnimods:type(), + dirty :: boolean() } ). @@ -48,15 +53,18 @@ get_omnimods/1, set_name/2, + ataxia_set_name/2, set_equipment/2, - dirty_set_equipment/2, + ataxia_set_equipment/3, set_extra_omnimods/2, - dirty_set_extra_omnimods/2, switch_weapons/1, - dirty_switch_weapons/1 + ataxia_switch_weapons/1, + + clean/1, + is_dirty/1 ] ). @@ -64,7 +72,9 @@ ( [ resolve/2, - to_unresolved/1 + to_unresolved/1, + encode/1, + decode/1 ] ). @@ -80,8 +90,6 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec refresh_omnimods (type()) -> type(). -refresh_omnimods (Char) -> Char. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -99,43 +107,79 @@ set_name (Name, Char) when is_record(Char, shr_char) -> set_name (Name, Char) when is_record(Char, shr_char_ref) -> Char#shr_char_ref{ name = Name }. +-spec ataxia_set_name + (binary(), type()) -> {type(), ataxic:basic()}; + (binary(), unresolved()) -> {unresolved(), ataxic:basic()}. +ataxia_set_name (Name, Char) -> + { + set_name(Name, Char), + ataxic:update_field + ( + get_name_field(), + ataxic:constant(Name) + ) + }. + -spec get_equipment (type()) -> shr_equipment:type(); (unresolved()) -> shr_equipment:unresolved(). get_equipment (#shr_char{ equipment = R }) -> R; get_equipment (#shr_char_ref{ equipment = R }) -> R. --spec switch_weapons - (type()) -> type(); - (unresolved()) -> unresolved(). -switch_weapons (Char) when is_record(Char, shr_char) -> - refresh_omnimods +-spec set_equipment + (shr_equipment:type(), type()) -> type(); + (shr_equipment:unresolved(), unresolved()) -> unresolved(). +set_equipment (Eq, Char) when is_record(Char, shr_char) -> + Char#shr_char + { + equipment = Eq, + dirty = true + }; +set_equipment (EqRef, CharRef) when is_record(CharRef, shr_char_ref) -> + CharRef#shr_char_ref{ equipment = EqRef }. + +-spec ataxia_set_equipment + (shr_equipment:type(), ataxic:basic(), type()) -> {type(), ataxic:basic()}; ( - Char#shr_char - { - is_using_secondary = (not Char#shr_char.is_using_secondary) - } - ); -switch_weapons (Char) when is_record(Char, shr_char_ref) -> - Char#shr_char_ref + shr_equipment:unresolved(), + ataxic:basic(), + unresolved() + ) + -> {unresolved(), ataxic:basic()}. +ataxia_set_equipment (Eq, EqUpdate, Char) -> { - is_using_secondary = (not Char#shr_char_ref.is_using_secondary) + set_equipment(Eq, Char), + ataxic:update_field(get_equipment_field(), EqUpdate) }. --spec dirty_switch_weapons +-spec switch_weapons (type()) -> type(); (unresolved()) -> unresolved(). -dirty_switch_weapons (Char) when is_record(Char, shr_char) -> +switch_weapons (Char) when is_record(Char, shr_char) -> Char#shr_char { - is_using_secondary = (not Char#shr_char.is_using_secondary) + is_using_secondary = (not Char#shr_char.is_using_secondary), + dirty = true }; -dirty_switch_weapons (Char) when is_record(Char, shr_char_ref) -> +switch_weapons (Char) when is_record(Char, shr_char_ref) -> Char#shr_char_ref { is_using_secondary = (not Char#shr_char_ref.is_using_secondary) }. +-spec ataxia_switch_weapons + (type()) -> {type(), ataxic:basic()}; + (unresolved()) -> {unresolved(), ataxic:basic()}. +ataxia_switch_weapons (Char) -> + { + switch_weapons(Char), + ataxic:update_field + ( + get_is_using_secondary_field(), + ataxic:neg(ataxic:current_value()) + ) + }. + -spec get_active_weapon (either()) -> shr_weapon:type(). get_active_weapon (#shr_char{ is_using_secondary = B, equipment = E }) -> case B of @@ -171,35 +215,32 @@ get_omnimods (Char) -> Char#shr_char.omnimods. -spec set_extra_omnimods (shr_omnimods:type(), type()) -> type(). set_extra_omnimods (O, Char) -> - refresh_omnimods(Char#shr_char{ extra_omnimods = O }). - --spec dirty_set_extra_omnimods (shr_omnimods:type(), type()) -> type(). -dirty_set_extra_omnimods (O, Char) -> Char#shr_char{ extra_omnimods = O }. + Char#shr_char + { + extra_omnimods = O, + dirty = true + }. --spec resolve (shr_omnimods:type(), unresolved()) -> type(). -resolve (LocalOmnimods, CharRef) -> - ResolvedEquipment = shr_equipment:resolve(CharRef#shr_char_ref.equipment), - UsingSecondary = CharRef#shr_char_ref.is_using_secondary, +-spec clean (type()) -> type(). +clean (Char) when Char#shr_char.dirty -> + Equipment = Char#shr_char.equipment, - UnchangingOmnimods = + Omnimods = shr_omnimods:merge ( - shr_glyph_board:get_omnimods_with_glyphs + shr_omnimods:merge ( - shr_equipment:get_glyphs(ResolvedEquipment), - shr_equipment:get_glyph_board(ResolvedEquipment) + shr_glyph_board:get_omnimods_with_glyphs + ( + shr_equipment:get_glyphs(Equipment), + shr_equipment:get_glyph_board(Equipment) + ), + shr_armor:get_omnimods(shr_equipment:get_armor(Equipment)) ), - get_armor(CharRef) - ), - - Omnimods = - shr_omnimods:merge - ( - UnchangingOmnimods, shr_omnimods:merge ( - get_active_weapon(CharRef), - LocalOmnimods + shr_weapon:get_omnimods(get_active_weapon(Char)), + Char#shr_char.extra_omnimods ) ), @@ -217,21 +258,70 @@ resolve (LocalOmnimods, CharRef) -> Omnimods ), + Char#shr_char + { + dirty = false, + attributes = Attributes, + statistics = Statistics, + omnimods = Omnimods + }; +clean (Char) -> Char. + +-spec is_dirty (type()) -> boolean(). +is_dirty (Char) -> Char#shr_char.dirty. + +-spec resolve (shr_omnimods:type(), unresolved()) -> type(). +resolve (LocalOmnimods, CharRef) -> + Attributes = shr_attributes:default(), + #shr_char { name = CharRef#shr_char_ref.name, - equipment = ResolvedEquipment, - is_using_secondary = UsingSecondary, - statistics = Statistics, + dirty = true, + equipment = shr_equipment:resolve(CharRef#shr_char_ref.equipment), + is_using_secondary = CharRef#shr_char_ref.is_using_secondary, + statistics = shr_statistics:new_raw(Attributes), attributes = Attributes, - unchanging_omnimods = UnchangingOmnimods, - omnimods = Omnimods + omnimods = shr_omnimods:default(), + extra_omnimods = LocalOmnimods }. +-spec to_unresolved (type()) -> unresolved(). +to_unresolved (Char) -> + #shr_char_ref + { + name = Char#shr_char.name, + equipment = shr_equipment:to_unresolved(Char#shr_char.equipment), + is_using_secondary = Char#shr_char.is_using_secondary + }. + +-spec decode (map()) -> unresolved(). +decode (Map) -> + #shr_char_ref + { + name = maps:get(?NAME_FIELD, Map), + equipment = shr_equipment:decode(maps:get(?EQUIPMENT_FIELD, Map)), + is_using_secondary = maps:get(?IS_USING_SECONDARY_FIELD, Map) + }. + +-spec encode (unresolved()) -> {list({binary(), any()})}. +encode (CharRef) -> + { + [ + {?NAME_FIELD, CharRef#shr_char_ref.name}, + { + ?EQUIPMENT_FIELD, + shr_equipment:encode(CharRef#shr_char_ref.equipment) + }, + {?IS_USING_SECONDARY_FIELD, CharRef#shr_char_ref.is_using_secondary} + ] + }. -spec get_name_field() -> non_neg_integer(). get_name_field () -> #shr_char_ref.name. + -spec get_equipment_field() -> non_neg_integer(). get_equipment_field () -> #shr_char_ref.equipment. + -spec get_is_using_secondary_field() -> non_neg_integer(). get_is_using_secondary_field () -> #shr_char_ref.is_using_secondary. |