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/shr_character.erl
parentada321442febcee20e0d4e6d29238cf10e6fca6a (diff)
[Broken] Refactoring...
Diffstat (limited to 'src/shared/struct/shr_character.erl')
-rw-r--r--src/shared/struct/shr_character.erl175
1 files changed, 175 insertions, 0 deletions
diff --git a/src/shared/struct/shr_character.erl b/src/shared/struct/shr_character.erl
new file mode 100644
index 0000000..33081bb
--- /dev/null
+++ b/src/shared/struct/shr_character.erl
@@ -0,0 +1,175 @@
+-module(shr_character).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-record
+(
+ shr_char_ref,
+ {
+ name :: binary(),
+ equipment :: shr_equipment:unresolved(),
+ is_using_secondary :: boolean()
+ }
+).
+
+-record
+(
+ shr_char,
+ {
+ name :: binary(),
+ equipment :: shr_equipment:type(),
+ is_using_secondary :: boolean(),
+ statistics :: shr_statistics:type(),
+ attributes :: shr_attributes:type(),
+ omnimods :: shr_omnimods:type(),
+ extra_omnimods :: shr_omnimods:type()
+ }
+).
+
+-opaque type() :: #shr_char{}.
+-opaque unresolved() :: #shr_char_ref{}.
+-type either() :: (type() | unresolved()).
+
+-export_type([type/0, unresolved/0, either/0]).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%% Accessors
+-export
+(
+ [
+ get_name/1,
+ get_equipment/1,
+ get_attributes/1,
+ get_statistics/1,
+ get_active_weapon/1,
+ get_inactive_weapon/1,
+ get_omnimods/1,
+
+ set_name/2,
+
+ set_equipment/2,
+ dirty_set_equipment/2,
+
+ set_extra_omnimods/2,
+ dirty_set_extra_omnimods/2,
+
+ switch_weapons/1,
+ dirty_switch_weapons/1
+ ]
+).
+
+-export
+(
+ [
+ resolve/1,
+ to_unresolved/1
+ ]
+).
+
+-export
+(
+ [
+ validate/2
+ ]
+).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec refresh_omnimods (type()) -> type().
+refresh_omnimods (Char) -> Char.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%% Accessors
+-spec get_name (either()) -> binary().
+get_name (#shr_char{ name = R }) -> R;
+get_name (#shr_char_ref{ name = R }) -> R.
+
+-spec set_name
+ (binary(), type()) -> type();
+ (binary(), unresolved()) -> unresolved().
+set_name (Name, Char) when is_record(Char, shr_char) ->
+ Char#shr_char { name = Name };
+set_name (Name, Char) when is_record(Char, shr_char_ref) ->
+ Char#shr_char_ref{ name = 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
+ (
+ 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
+ {
+ is_using_secondary = (not Char#shr_char_ref.is_using_secondary)
+ }.
+
+-spec dirty_switch_weapons
+ (type()) -> type();
+ (unresolved()) -> unresolved().
+dirty_switch_weapons (Char) when is_record(Char, shr_char) ->
+ Char#shr_char
+ {
+ is_using_secondary = (not Char#shr_char.is_using_secondary)
+ };
+dirty_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 get_active_weapon (either()) -> shr_weapon:type().
+get_active_weapon (#shr_char{ is_using_secondary = B, equipment = E }) ->
+ case B of
+ true -> shr_equipment:get_secondary_weapon(E);
+ false -> shr_equipment:get_primary_weapon(E)
+ end;
+get_active_weapon (#shr_char_ref{ is_using_secondary = B, equipment = E }) ->
+ case B of
+ true -> shr_equipment:get_secondary_weapon(E);
+ false -> shr_equipment:get_primary_weapon(E)
+ end.
+
+-spec get_inactive_weapon (either()) -> shr_weapon:type().
+get_inactive_weapon (#shr_char{ is_using_secondary = B, equipment = E }) ->
+ case B of
+ false -> shr_equipment:get_secondary_weapon(E);
+ true -> shr_equipment:get_primary_weapon(E)
+ end;
+get_inactive_weapon (#shr_char_ref{ is_using_secondary = B, equipment = E }) ->
+ case B of
+ false -> shr_equipment:get_secondary_weapon(E);
+ true -> shr_equipment:get_primary_weapon(E)
+ end.
+
+-spec get_attributes (type()) -> shr_attributes:type().
+get_attributes (Char) -> Char#shr_char.attributes.
+
+-spec get_statistics (type()) -> shr_statistics:type().
+get_statistics (Char) -> Char#shr_char.statistics.
+
+-spec get_omnimods (type()) -> shr_omnimods:type().
+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 }.