summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/battlemap/src/game-logic/movement.erl4
-rw-r--r--src/battlemap/src/game-logic/turn_actions.erl262
-rw-r--r--src/battlemap/src/query/character_turn.erl2
-rw-r--r--src/battlemap/src/query/load_state.erl2
-rw-r--r--src/battlemap/src/reply/add_char.erl4
-rw-r--r--src/battlemap/src/reply/set_map.erl2
-rw-r--r--src/battlemap/src/shim/database_shim.erl4
-rw-r--r--src/battlemap/src/struct/attack.erl36
-rw-r--r--src/battlemap/src/struct/attributes.erl28
-rw-r--r--src/battlemap/src/struct/battle.erl70
-rw-r--r--src/battlemap/src/struct/battle_action.erl227
-rw-r--r--src/battlemap/src/struct/battlemap.erl14
-rw-r--r--src/battlemap/src/struct/character.erl34
-rw-r--r--src/battlemap/src/struct/character_instance.erl32
-rw-r--r--src/battlemap/src/struct/character_turn_data.erl8
-rw-r--r--src/battlemap/src/struct/character_turn_request.erl4
-rw-r--r--src/battlemap/src/struct/player.erl12
-rw-r--r--src/battlemap/src/struct/statistics.erl26
-rw-r--r--src/battlemap/src/struct/tile.erl2
-rw-r--r--src/battlemap/src/struct/turn_result.erl14
-rw-r--r--src/battlemap/src/struct/weapon.erl20
21 files changed, 428 insertions, 379 deletions
diff --git a/src/battlemap/src/game-logic/movement.erl b/src/battlemap/src/game-logic/movement.erl
index 588fad9..467f87b 100644
--- a/src/battlemap/src/game-logic/movement.erl
+++ b/src/battlemap/src/game-logic/movement.erl
@@ -19,7 +19,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec cross
(
- battlemap:struct(),
+ battlemap:type(),
list(location:type()),
list(direction:enum()),
non_neg_integer(),
@@ -48,7 +48,7 @@ cross (Battlemap, ForbiddenLocations, [Step|NextSteps], Cost, Location) ->
-spec cross
(
- battlemap:struct(),
+ battlemap:type(),
list(location:type()),
list(direction:enum()),
location:type()
diff --git a/src/battlemap/src/game-logic/turn_actions.erl b/src/battlemap/src/game-logic/turn_actions.erl
new file mode 100644
index 0000000..f0e2e8f
--- /dev/null
+++ b/src/battlemap/src/game-logic/turn_actions.erl
@@ -0,0 +1,262 @@
+-module(turn_actions).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-export
+(
+ [
+ handle/2
+ ]
+).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec handle_attack_sequence
+ (
+ character_instance:type(),
+ character_instance:type(),
+ list(attack:step())
+ )
+ -> {list(attack:type()), non_neg_integer(), non_neg_integer()}.
+handle_attack_sequence
+(
+ CharacterInstance,
+ TargetCharacterInstance,
+ AttackSequence
+) ->
+ Character = character_instance:get_character(CharacterInstance),
+ TargetCharacter = character_instance:get_character(TargetCharacterInstance),
+ CharacterStatistics = character:get_statistics(Character),
+ TargetCharacterStatistics = character:get_statistics(TargetCharacter),
+
+ AttackPlannedEffects =
+ lists:map
+ (
+ fun (AttackStep) ->
+ attack:get_description_of
+ (
+ AttackStep,
+ CharacterStatistics,
+ TargetCharacterStatistics
+ )
+ end,
+ AttackSequence
+ ),
+
+ lists:foldl
+ (
+ fun
+ (
+ AttackEffectCandidate,
+ {AttackValidEffects, AttackerHealth, DefenderHealth}
+ ) ->
+ {AttackResult, NewAttackerHealth, NewDefenderHealth} =
+ attack:apply_to_healths
+ (
+ AttackEffectCandidate,
+ AttackerHealth,
+ DefenderHealth
+ ),
+ case AttackResult of
+ nothing -> {AttackValidEffects, AttackerHealth, DefenderHealth};
+ _ ->
+ {
+ (AttackValidEffects ++ [AttackResult]),
+ NewAttackerHealth,
+ NewDefenderHealth
+ }
+ end
+ end,
+ {
+ [],
+ character_instance:get_current_health(CharacterInstance),
+ character_instance:get_current_health(TargetCharacterInstance)
+ },
+ AttackPlannedEffects
+ ).
+
+-spec handle_switch_weapon
+ (
+ character_turn_update:type()
+ )
+ -> character_turn_update:type().
+handle_switch_weapon (Update) ->
+ Data = character_turn_update:get_data(Update),
+ CharacterInstance = character_turn_data:get_character_instance(Data),
+ CharacterInstanceIX = character_turn_data:get_character_instance_ix(Data),
+ Character = character_instance:get_character(CharacterInstance),
+ CharacterAttributes = character:get_attributes(Character),
+ {PrimaryWeaponID, SecondaryWeaponID} = character:get_weapon_ids(Character),
+
+ UpdatedWeaponIDs = {SecondaryWeaponID, PrimaryWeaponID},
+ UpdatedCharacterStatistics =
+ statistics:new(CharacterAttributes, UpdatedWeaponIDs),
+ UpdatedCharacter =
+ character:set_statistics
+ (
+ UpdatedCharacterStatistics,
+ character:set_weapon_ids(UpdatedWeaponIDs, Character)
+ ),
+ UpdatedCharacterInstance =
+ character_instance:set_character(UpdatedCharacter, CharacterInstance),
+
+ % TODO: db update entries...
+ % {character_instance, CharacterInstanceIX, wp0, SecondaryWeaponID},
+ % {character_instance, CharacterInstanceIX, wp1, PrimaryWeaponID}
+ S0Update =
+ character_turn_update:add_to_timeline
+ (
+ turn_result:new_character_switched_weapons(CharacterInstanceIX),
+ Update
+ ),
+
+ UpdatedData =
+ character_turn_data:set_character_instance
+ (
+ UpdatedCharacterInstance,
+ Data
+ ),
+
+ character_turn_update:set_data(UpdatedData, S0Update).
+
+-spec handle_move
+ (
+ character_turn_update:type(),
+ battle_action:type()
+ )
+ -> character_turn_update:type().
+handle_move (Update, BattleAction) ->
+ Character = character_instance:get_character(CharacterInstance),
+ CharacterStatistics = character:get_statistics(Character),
+ Battlemap = battle:get_battlemap(Battle),
+ Path = BattleAction#move.path,
+ CharacterMovementPoints =
+ statistics:get_movement_points(CharacterStatistics),
+
+ ForbiddenLocations =
+ array:foldl
+ (
+ fun (IX, CharInst, Prev) ->
+ IsAlive = character_instance:get_is_alive(CharInst),
+ if
+ (IX == CharacterInstanceIX) -> Prev;
+ (not IsAlive) -> Prev;
+ true -> [character_instance:get_location(CharInst)|Prev]
+ end
+ end,
+ [],
+ battle:get_character_instances(Battle)
+ ),
+
+ {NewLocation, Cost} =
+ movement:cross
+ (
+ Battlemap,
+ ForbiddenLocations,
+ Path,
+ character_instance:get_location(CharacterInstance)
+ ),
+
+ true = (Cost =< CharacterMovementPoints),
+
+ UpdatedCharacterInstance =
+ character_instance:set_location(NewLocation, CharacterInstance),
+
+ {
+ % TODO: hide that into database_diff structs.
+ [{character_instance, CharacterInstanceIX, loc, NewLocation}],
+ % TODO: hide that into turn_result structs.
+ [turn_result:new_character_moved(CharacterInstanceIX, Path, NewLocation)],
+ Battle,
+ UpdatedCharacterInstance
+ }.
+
+-spec handle_attack
+ (
+ character_turn_update:type(),
+ battle_action:type()
+ )
+ -> character_turn_update:type().
+handle_attack (Update, BattleAction) ->
+ Character = character_instance:get_character(CharacterInstance),
+ TargetIX = BattleAction#attack.target_ix,
+ TargetCharacterInstance = battle:get_character_instance(TargetIX, Battle),
+ TargetCharacter = character_instance:get_character(TargetCharacterInstance),
+
+ Range =
+ location:dist
+ (
+ character_instance:get_location(CharacterInstance),
+ character_instance:get_location(TargetCharacterInstance)
+ ),
+
+ {AttackingWeaponID, _} = character:get_weapon_ids(Character),
+ {DefendingWeaponID, _} = character:get_weapon_ids(TargetCharacter),
+
+ AttackingWeapon = weapon:from_id(AttackingWeaponID),
+ DefendingWeapon = weapon:from_id(DefendingWeaponID),
+
+ AttackSequence =
+ attack:get_sequence(Range, AttackingWeapon, DefendingWeapon),
+
+ {AttackEffects, RemainingAttackerHealth, RemainingDefenderHealth} =
+ handle_attack_sequence
+ (
+ CharacterInstance,
+ TargetCharacterInstance,
+ AttackSequence
+ ),
+
+ UpdatedCharacterInstance =
+ character_instance:set_current_health
+ (
+ RemainingAttackerHealth,
+ CharacterInstance
+ ),
+
+ UpdatedBattle =
+ battle:set_character_instance
+ (
+ TargetIX,
+ character_instance:set_current_health
+ (
+ RemainingDefenderHealth,
+ TargetCharacterInstance
+ ),
+ Battle
+ ),
+ {
+ % TODO: hide that into database_diff structs.
+ [], % TODO
+ [
+ turn_result:new_character_attacked
+ (
+ CharacterInstanceIX,
+ TargetIX,
+ AttackEffects
+ )
+ ],
+ UpdatedBattle,
+ UpdatedCharacterInstance
+ }.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec handle
+(
+ character_turn_update:type(),
+ battle_action:type()
+)
+-> character_turn_update:type().
+handle (Update, BattleAction) ->
+ case battle_action:get_type(BattleAction) of
+ move -> handle_move(Update, BattleAction);
+ switch_weapon -> handle_switch_weapon(Update);
+ attack -> handle_attack(Update, BattleAction)
+ end.
diff --git a/src/battlemap/src/query/character_turn.erl b/src/battlemap/src/query/character_turn.erl
index 70afbca..b269084 100644
--- a/src/battlemap/src/query/character_turn.erl
+++ b/src/battlemap/src/query/character_turn.erl
@@ -15,7 +15,7 @@
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%-spec send_to_database (list(database_diff:struct()), character_turn_request:type()) -> 'ok'.
+%-spec send_to_database (list(database_diff:type()), character_turn_request:type()) -> 'ok'.
%%%% REQUEST DECODING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/src/battlemap/src/query/load_state.erl b/src/battlemap/src/query/load_state.erl
index a03a20f..37a30cf 100644
--- a/src/battlemap/src/query/load_state.erl
+++ b/src/battlemap/src/query/load_state.erl
@@ -19,7 +19,7 @@
(
query_state,
{
- battle :: battle:struct()
+ battle :: battle:type()
}
).
diff --git a/src/battlemap/src/reply/add_char.erl b/src/battlemap/src/reply/add_char.erl
index 990b23e..7fad9a0 100644
--- a/src/battlemap/src/reply/add_char.erl
+++ b/src/battlemap/src/reply/add_char.erl
@@ -14,7 +14,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec attributes_as_json
(
- attributes:struct()
+ attributes:type()
) ->
{list({binary(), non_neg_integer()})}.
attributes_as_json (Attributes) ->
@@ -35,7 +35,7 @@ attributes_as_json (Attributes) ->
-spec generate
(
non_neg_integer(),
- character_instance:struct(),
+ character_instance:type(),
player:id()
)
-> {list(any())}.
diff --git a/src/battlemap/src/reply/set_map.erl b/src/battlemap/src/reply/set_map.erl
index 6a7cd39..8518ac5 100644
--- a/src/battlemap/src/reply/set_map.erl
+++ b/src/battlemap/src/reply/set_map.erl
@@ -16,7 +16,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec generate (battlemap:struct()) -> {list(any())}.
+-spec generate (battlemap:type()) -> {list(any())}.
generate (Battlemap) ->
{
[
diff --git a/src/battlemap/src/shim/database_shim.erl b/src/battlemap/src/shim/database_shim.erl
index a26087d..1b1992b 100644
--- a/src/battlemap/src/shim/database_shim.erl
+++ b/src/battlemap/src/shim/database_shim.erl
@@ -47,9 +47,9 @@ add_to_db (ID, Val) ->
non_neg_integer(),
non_neg_integer(),
non_neg_integer(),
- list(character:struct())
+ list(character:type())
)
- -> list(character:struct()).
+ -> list(character:type()).
generate_random_characters
(
0,
diff --git a/src/battlemap/src/struct/attack.erl b/src/battlemap/src/struct/attack.erl
index 71bc2bb..bddc3cd 100644
--- a/src/battlemap/src/struct/attack.erl
+++ b/src/battlemap/src/struct/attack.erl
@@ -18,8 +18,8 @@
}
).
--opaque struct() :: #attack{}.
--type maybe_struct() :: ('nothing' | struct()).
+-opaque type() :: #attack{}.
+-type maybe_type() :: ('nothing' | type()).
-opaque step() :: {order(), boolean()}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -47,8 +47,8 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec roll_precision
(
- statistics:struct(),
- statistics:struct()
+ statistics:type(),
+ statistics:type()
)
-> precision().
roll_precision (AttackerStatistics, DefenderStatistics) ->
@@ -63,8 +63,8 @@ roll_precision (AttackerStatistics, DefenderStatistics) ->
-spec roll_damage
(
- statistics:struct(),
- statistics:struct()
+ statistics:type(),
+ statistics:type()
)
-> {non_neg_integer(), boolean()}.
roll_damage (AttackerStatistics, _DefenderStatistics) ->
@@ -77,7 +77,7 @@ roll_damage (AttackerStatistics, _DefenderStatistics) ->
_ -> {BaseDamage, false}
end.
--spec roll_parry (statistics:struct()) -> boolean().
+-spec roll_parry (statistics:type()) -> boolean().
roll_parry (DefenderStatistics) ->
DefenderParryChance = statistics:get_parries(DefenderStatistics),
(roll:percentage() =< DefenderParryChance).
@@ -85,11 +85,11 @@ roll_parry (DefenderStatistics) ->
-spec effect_of_attack
(
order(),
- statistics:struct(),
- statistics:struct(),
+ statistics:type(),
+ statistics:type(),
boolean()
)
- -> struct().
+ -> type().
effect_of_attack (Order, AttackerStatistics, DefenderStatistics, CanParry) ->
ParryIsSuccessful = (CanParry and roll_parry(DefenderStatistics)),
{ActualAtkStatistics, ActualDefStatistics} =
@@ -133,10 +133,10 @@ encode_precision (misses) -> <<"m">>.
-spec get_description_of
(
step(),
- statistics:struct(),
- statistics:struct()
+ statistics:type(),
+ statistics:type()
)
- -> maybe_struct().
+ -> maybe_type().
get_description_of
(
{first, CanParry},
@@ -175,11 +175,11 @@ get_description_of
-spec apply_to_healths
(
- maybe_struct(),
+ maybe_type(),
non_neg_integer(),
non_neg_integer()
)
- -> {maybe_struct(), non_neg_integer(), non_neg_integer()}.
+ -> {maybe_type(), non_neg_integer(), non_neg_integer()}.
apply_to_healths
(
nothing,
@@ -244,8 +244,8 @@ when
-spec get_sequence
(
non_neg_integer(),
- weapon:struct(),
- weapon:struct()
+ weapon:type(),
+ weapon:type()
)
-> list(step()).
get_sequence (AttackRange, AttackerWeapon, DefenderWeapon) ->
@@ -279,7 +279,7 @@ get_sequence (AttackRange, AttackerWeapon, DefenderWeapon) ->
[First, Counter, Second]
end.
--spec encode (struct()) -> {list(any())}.
+-spec encode (type()) -> {list(any())}.
% This shouldn't be a possibility. Types in this module are a mess...
encode (Attack) ->
Order = Attack#attack.order,
diff --git a/src/battlemap/src/struct/attributes.erl b/src/battlemap/src/struct/attributes.erl
index 6728831..0d503ee 100644
--- a/src/battlemap/src/struct/attributes.erl
+++ b/src/battlemap/src/struct/attributes.erl
@@ -16,7 +16,7 @@
}
).
--opaque struct() :: #attributes{}.
+-opaque type() :: #attributes{}.
-export_type([struct/0]).
@@ -59,43 +59,43 @@
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Accessors
--spec get_constitution (struct()) -> integer().
+-spec get_constitution (type()) -> integer().
get_constitution (Att) -> Att#attributes.constitution.
--spec get_dexterity (struct()) -> integer().
+-spec get_dexterity (type()) -> integer().
get_dexterity (Att) -> Att#attributes.dexterity.
--spec get_intelligence (struct()) -> integer().
+-spec get_intelligence (type()) -> integer().
get_intelligence (Att) -> Att#attributes.intelligence.
--spec get_mind (struct()) -> integer().
+-spec get_mind (type()) -> integer().
get_mind (Att) -> Att#attributes.mind.
--spec get_speed (struct()) -> integer().
+-spec get_speed (type()) -> integer().
get_speed (Att) -> Att#attributes.speed.
--spec get_strength (struct()) -> integer().
+-spec get_strength (type()) -> integer().
get_strength (Att) -> Att#attributes.strength.
--spec set_constitution (integer(), struct()) -> struct().
+-spec set_constitution (integer(), type()) -> type().
set_constitution (Val, Att) -> Att#attributes{ constitution = Val }.
--spec set_dexterity (integer(), struct()) -> struct().
+-spec set_dexterity (integer(), type()) -> type().
set_dexterity (Val, Att) -> Att#attributes{ dexterity = Val }.
--spec set_intelligence (integer(), struct()) -> struct().
+-spec set_intelligence (integer(), type()) -> type().
set_intelligence (Val, Att) -> Att#attributes{ intelligence = Val }.
--spec set_mind (integer(), struct()) -> struct().
+-spec set_mind (integer(), type()) -> type().
set_mind (Val, Att) -> Att#attributes{ mind = Val }.
--spec set_speed (integer(), struct()) -> struct().
+-spec set_speed (integer(), type()) -> type().
set_speed (Val, Att) -> Att#attributes{ speed = Val }.
--spec set_strength (integer(), struct()) -> struct().
+-spec set_strength (integer(), type()) -> type().
set_strength (Val, Att) -> Att#attributes{ strength = Val }.
--spec random () -> struct().
+-spec random () -> type().
random () ->
#attributes
{
diff --git a/src/battlemap/src/struct/battle.erl b/src/battlemap/src/struct/battle.erl
index 5ac12e4..4d5be8b 100644
--- a/src/battlemap/src/struct/battle.erl
+++ b/src/battlemap/src/struct/battle.erl
@@ -10,14 +10,14 @@
battle,
{
id :: id(),
- battlemap :: battlemap:struct(),
- character_instances :: array:array(character_instance:struct()),
- players :: array:array(player:struct()),
- current_player_turn :: player_turn:struct()
+ battlemap :: battlemap:type(),
+ character_instances :: array:array(character_instance:type()),
+ players :: array:array(player:type()),
+ current_player_turn :: player_turn:type()
}
).
--opaque struct() :: #battle{}.
+-opaque type() :: #battle{}.
-export_type([struct/0, id/0]).
@@ -73,36 +73,36 @@ get_all_timelines (Result, CurrentIndex, EndPoint, ArraySize, Players) ->
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Accessors
--spec get_id (struct()) -> id().
+-spec get_id (type()) -> id().
get_id (Battle) -> Battle#battle.id.
--spec get_battlemap (struct()) -> battlemap:struct().
+-spec get_battlemap (type()) -> battlemap:type().
get_battlemap (Battle) ->
Battle#battle.battlemap.
--spec get_character_instances (struct()) ->
- array:array(character_instance:struct()).
+-spec get_character_instances (type()) ->
+ array:array(character_instance:type()).
get_character_instances (Battle) ->
Battle#battle.character_instances.
--spec get_character_instance (non_neg_integer(), struct()) ->
- character_instance:struct().
+-spec get_character_instance (non_neg_integer(), type()) ->
+ character_instance:type().
get_character_instance (IX, Battle) ->
array:get(IX, Battle#battle.character_instances).
--spec get_players (struct()) -> array:array(player:struct()).
+-spec get_players (type()) -> array:array(player:type()).
get_players (Battle) ->
Battle#battle.players.
--spec get_player (non_neg_integer(), struct()) -> player:struct().
+-spec get_player (non_neg_integer(), type()) -> player:type().
get_player (IX, Battle) ->
array:get(IX, Battle#battle.players).
--spec get_current_player_turn (struct()) -> player_turn:struct().
+-spec get_current_player_turn (type()) -> player_turn:type().
get_current_player_turn (Battle) ->
Battle#battle.current_player_turn.
--spec get_encoded_last_turns_effects (struct()) -> list(any()).
+-spec get_encoded_last_turns_effects (type()) -> list(any()).
get_encoded_last_turns_effects (Battle) ->
CurrentPlayerTurn = Battle#battle.current_player_turn,
Players = Battle#battle.players,
@@ -112,7 +112,7 @@ get_encoded_last_turns_effects (Battle) ->
StartingPoint = ((CurrentPlayerIX + 1) rem PlayersCount),
get_all_timelines([], StartingPoint, CurrentPlayerIX, PlayersCount, Players).
--spec set_battlemap (battlemap:struct(), struct()) -> struct().
+-spec set_battlemap (battlemap:type(), type()) -> type().
set_battlemap (Battlemap, Battle) ->
Battle#battle
{
@@ -121,10 +121,10 @@ set_battlemap (Battlemap, Battle) ->
-spec set_character_instances
(
- array:array(character_instance:struct()),
- struct()
+ array:array(character_instance:type()),
+ type()
)
- -> struct().
+ -> type().
set_character_instances (CharacterInstances, Battle) ->
Battle#battle
{
@@ -134,10 +134,10 @@ set_character_instances (CharacterInstances, Battle) ->
-spec set_character_instance
(
non_neg_integer(),
- character_instance:struct(),
- struct()
+ character_instance:type(),
+ type()
)
- -> struct().
+ -> type().
set_character_instance (IX, CharacterInstance, Battle) ->
Battle#battle
{
@@ -152,10 +152,10 @@ set_character_instance (IX, CharacterInstance, Battle) ->
-spec set_players
(
- array:array(player:struct()),
- struct()
+ array:array(player:type()),
+ type()
)
- -> struct().
+ -> type().
set_players (Players, Battle) ->
Battle#battle
{
@@ -165,10 +165,10 @@ set_players (Players, Battle) ->
-spec set_player
(
non_neg_integer(),
- player:struct(),
- struct()
+ player:type(),
+ type()
)
- -> struct().
+ -> type().
set_player (IX, Player, Battle) ->
Battle#battle
{
@@ -183,10 +183,10 @@ set_player (IX, Player, Battle) ->
-spec set_current_player_turn
(
- player_turn:struct(),
- struct()
+ player_turn:type(),
+ type()
)
- -> struct().
+ -> type().
set_current_player_turn (PlayerTurn, Battle) ->
Battle#battle
{
@@ -196,11 +196,11 @@ set_current_player_turn (PlayerTurn, Battle) ->
-spec random
(
id(),
- list(player:struct()),
- battlemap:struct(),
- list(character:struct())
+ list(player:type()),
+ battlemap:type(),
+ list(character:type())
)
- -> struct().
+ -> type().
random (ID, PlayersAsList, Battlemap, Characters) ->
BattlemapWidth = battlemap:get_width(Battlemap),
BattlemapHeight = battlemap:get_height(Battlemap),
diff --git a/src/battlemap/src/struct/battle_action.erl b/src/battlemap/src/struct/battle_action.erl
index f40de0d..2b1a89e 100644
--- a/src/battlemap/src/struct/battle_action.erl
+++ b/src/battlemap/src/struct/battle_action.erl
@@ -27,7 +27,7 @@
).
-type category() :: ('move' | 'switch_weapon' | 'attack' | 'nothing').
--opaque struct() :: (#move{} | #switch_weapon{} | #attack{}).
+-opaque type() :: (#move{} | #switch_weapon{} | #attack{}).
-export_type([category/0, struct/0]).
@@ -38,7 +38,6 @@
(
[
decode/1,
- handle/4,
can_follow/2
]
).
@@ -46,91 +45,28 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec decode_mov_action (map()) -> struct().
+-spec decode_mov_action (map()) -> type().
decode_mov_action (JSONMap) ->
PathInBinary = maps:get(<<"p">>, JSONMap),
Path = lists:map(fun direction:decode/1, PathInBinary),
#move { path = Path }.
--spec decode_atk_action (map()) -> struct().
+-spec decode_atk_action (map()) -> type().
decode_atk_action (JSONMap) ->
TargetIX = binary_to_integer(maps:get(<<"tix">>, JSONMap)),
#attack { target_ix = TargetIX }.
--spec decode_swp_action (map()) -> struct().
+-spec decode_swp_action (map()) -> type().
decode_swp_action (_JSONMap) ->
#switch_weapon{}.
--spec handle_attack_sequence
- (
- character_instance:struct(),
- character_instance:struct(),
- list(attack:step())
- )
- -> {list(attack:struct()), non_neg_integer(), non_neg_integer()}.
-handle_attack_sequence
-(
- CharacterInstance,
- TargetCharacterInstance,
- AttackSequence
-) ->
- Character = character_instance:get_character(CharacterInstance),
- TargetCharacter = character_instance:get_character(TargetCharacterInstance),
- CharacterStatistics = character:get_statistics(Character),
- TargetCharacterStatistics = character:get_statistics(TargetCharacter),
-
- AttackPlannedEffects =
- lists:map
- (
- fun (AttackStep) ->
- attack:get_description_of
- (
- AttackStep,
- CharacterStatistics,
- TargetCharacterStatistics
- )
- end,
- AttackSequence
- ),
-
- lists:foldl
- (
- fun
- (
- AttackEffectCandidate,
- {AttackValidEffects, AttackerHealth, DefenderHealth}
- ) ->
- {AttackResult, NewAttackerHealth, NewDefenderHealth} =
- attack:apply_to_healths
- (
- AttackEffectCandidate,
- AttackerHealth,
- DefenderHealth
- ),
- case AttackResult of
- nothing -> {AttackValidEffects, AttackerHealth, DefenderHealth};
- _ ->
- {
- (AttackValidEffects ++ [AttackResult]),
- NewAttackerHealth,
- NewDefenderHealth
- }
- end
- end,
- {
- [],
- character_instance:get_current_health(CharacterInstance),
- character_instance:get_current_health(TargetCharacterInstance)
- },
- AttackPlannedEffects
- ).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec decode (map()) -> struct().
+-spec decode (map()) -> type().
decode (EncodedAction) ->
JSONActionMap = EncodedAction, %jiffy:decode(EncodedAction, [return_maps]),
ActionType = maps:get(<<"t">>, JSONActionMap),
@@ -147,156 +83,3 @@ can_follow (nothing, move) -> true;
can_follow (switch_weapon, attack) -> true;
can_follow (move, attack) -> true;
can_follow (_, _) -> false.
-
--spec handle
-(
- battle:struct(),
- character_instance:struct(),
- non_neg_integer(),
- struct()
-)
-->
-{
- list(database_diff:struct()),
- list(turn_result:struct()),
- battle:struct(),
- character_instance:struct()
-}.
-handle (Battle, CharacterInstance, CharacterInstanceIX, BattleAction)
-when is_record(BattleAction, switch_weapon) ->
- Character = character_instance:get_character(CharacterInstance),
- CharacterAttributes = character:get_attributes(Character),
- {PrimaryWeaponID, SecondaryWeaponID} = character:get_weapon_ids(Character),
-
- UpdatedWeaponIDs = {SecondaryWeaponID, PrimaryWeaponID},
- UpdatedCharacterStatistics =
- statistics:new(CharacterAttributes, UpdatedWeaponIDs),
- UpdatedCharacter =
- character:set_statistics
- (
- UpdatedCharacterStatistics,
- character:set_weapon_ids(UpdatedWeaponIDs, Character)
- ),
- UpdatedCharacterInstance =
- character_instance:set_character(UpdatedCharacter, CharacterInstance),
-
- {
- % TODO: hide that into database_diff structs.
- [
- {character_instance, CharacterInstanceIX, wp0, SecondaryWeaponID},
- {character_instance, CharacterInstanceIX, wp1, PrimaryWeaponID}
- % ... statistics as well.
- ],
- [turn_result:new_character_switched_weapons(CharacterInstanceIX)],
- Battle,
- UpdatedCharacterInstance
- };
-handle (Battle, CharacterInstance, CharacterInstanceIX, BattleAction)
-when is_record(BattleAction, move) ->
- Character = character_instance:get_character(CharacterInstance),
- CharacterStatistics = character:get_statistics(Character),
- Battlemap = battle:get_battlemap(Battle),
- Path = BattleAction#move.path,
- CharacterMovementPoints =
- statistics:get_movement_points(CharacterStatistics),
-
- ForbiddenLocations =
- array:foldl
- (
- fun (IX, CharInst, Prev) ->
- IsAlive = character_instance:get_is_alive(CharInst),
- if
- (IX == CharacterInstanceIX) -> Prev;
- (not IsAlive) -> Prev;
- true -> [character_instance:get_location(CharInst)|Prev]
- end
- end,
- [],
- battle:get_character_instances(Battle)
- ),
-
- {NewLocation, Cost} =
- movement:cross
- (
- Battlemap,
- ForbiddenLocations,
- Path,
- character_instance:get_location(CharacterInstance)
- ),
-
- true = (Cost =< CharacterMovementPoints),
-
- UpdatedCharacterInstance =
- character_instance:set_location(NewLocation, CharacterInstance),
-
- {
- % TODO: hide that into database_diff structs.
- [{character_instance, CharacterInstanceIX, loc, NewLocation}],
- % TODO: hide that into turn_result structs.
- [turn_result:new_character_moved(CharacterInstanceIX, Path, NewLocation)],
- Battle,
- UpdatedCharacterInstance
- };
-handle (Battle, CharacterInstance, CharacterInstanceIX, BattleAction)
-when is_record(BattleAction, attack) ->
- Character = character_instance:get_character(CharacterInstance),
- TargetIX = BattleAction#attack.target_ix,
- TargetCharacterInstance = battle:get_character_instance(TargetIX, Battle),
- TargetCharacter = character_instance:get_character(TargetCharacterInstance),
-
- Range =
- location:dist
- (
- character_instance:get_location(CharacterInstance),
- character_instance:get_location(TargetCharacterInstance)
- ),
-
- {AttackingWeaponID, _} = character:get_weapon_ids(Character),
- {DefendingWeaponID, _} = character:get_weapon_ids(TargetCharacter),
-
- AttackingWeapon = weapon:from_id(AttackingWeaponID),
- DefendingWeapon = weapon:from_id(DefendingWeaponID),
-
- AttackSequence =
- attack:get_sequence(Range, AttackingWeapon, DefendingWeapon),
-
- {AttackEffects, RemainingAttackerHealth, RemainingDefenderHealth} =
- handle_attack_sequence
- (
- CharacterInstance,
- TargetCharacterInstance,
- AttackSequence
- ),
-
- UpdatedCharacterInstance =
- character_instance:set_current_health
- (
- RemainingAttackerHealth,
- CharacterInstance
- ),
-
- UpdatedBattle =
- battle:set_character_instance
- (
- TargetIX,
- character_instance:set_current_health
- (
- RemainingDefenderHealth,
- TargetCharacterInstance
- ),
- Battle
- ),
- {
- % TODO: hide that into database_diff structs.
- [], % TODO
- [
- turn_result:new_character_attacked
- (
- CharacterInstanceIX,
- TargetIX,
- AttackEffects
- )
- ],
- UpdatedBattle,
- UpdatedCharacterInstance
- }.
diff --git a/src/battlemap/src/struct/battlemap.erl b/src/battlemap/src/struct/battlemap.erl
index 59e0639..e0d30a4 100644
--- a/src/battlemap/src/struct/battlemap.erl
+++ b/src/battlemap/src/struct/battlemap.erl
@@ -16,7 +16,7 @@
}
).
--opaque struct() :: #battlemap{}.
+-opaque type() :: #battlemap{}.
-export_type([struct/0, id/0]).
@@ -84,19 +84,19 @@ location_to_array_index (ArrayWidth, {X, Y}) ->
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Accessors
--spec get_id (struct()) -> id().
+-spec get_id (type()) -> id().
get_id (Battlemap) -> Battlemap#battlemap.id.
--spec get_width (struct()) -> integer().
+-spec get_width (type()) -> integer().
get_width (Battlemap) -> Battlemap#battlemap.width.
--spec get_height (struct()) -> integer().
+-spec get_height (type()) -> integer().
get_height (Battlemap) -> Battlemap#battlemap.height.
--spec get_tile_ids (struct()) -> array:array(tile:id()).
+-spec get_tile_ids (type()) -> array:array(tile:id()).
get_tile_ids (Battlemap) -> Battlemap#battlemap.tile_ids.
--spec get_tile_id (location:type(), struct()) -> tile:id().
+-spec get_tile_id (location:type(), type()) -> tile:id().
get_tile_id (Location, Battlemap) ->
TileIX = location_to_array_index(Battlemap#battlemap.width, Location),
array:get(TileIX, Battlemap#battlemap.tile_ids).
@@ -107,7 +107,7 @@ get_tile_id (Location, Battlemap) ->
non_neg_integer(),
non_neg_integer()
)
- -> struct().
+ -> type().
random (ID, Width, Height) ->
InitialTile = tile:random_id(),
TileIDs = generate_random_tile_ids(InitialTile, [], Width, Height, Width),
diff --git a/src/battlemap/src/struct/character.erl b/src/battlemap/src/struct/character.erl
index 8e1099e..7daaadd 100644
--- a/src/battlemap/src/struct/character.erl
+++ b/src/battlemap/src/struct/character.erl
@@ -14,13 +14,13 @@
name :: binary(),
icon :: binary(),
portrait :: binary(),
- attributes :: attributes:struct(),
- statistics :: statistics:struct(),
+ attributes :: attributes:type(),
+ statistics :: statistics:type(),
weapon_ids :: {weapon:id(), weapon:id()}
}
).
--opaque struct() :: #character{}.
+-opaque type() :: #character{}.
-export_type([struct/0, id/0]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -59,36 +59,36 @@
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Accessors
--spec get_id (struct()) -> id().
+-spec get_id (type()) -> id().
get_id (Char) -> Char#character.id.
--spec get_owner_id (struct()) -> player:id().
+-spec get_owner_id (type()) -> player:id().
get_owner_id (Char) -> Char#character.owner_id.
--spec get_name (struct()) -> binary().
+-spec get_name (type()) -> binary().
get_name (Char) -> Char#character.name.
--spec get_icon (struct()) -> binary().
+-spec get_icon (type()) -> binary().
get_icon (Char) -> Char#character.icon.
--spec get_portrait (struct()) -> binary().
+-spec get_portrait (type()) -> binary().
get_portrait (Char) -> Char#character.portrait.
--spec get_attributes (struct()) -> attributes:struct().
+-spec get_attributes (type()) -> attributes:type().
get_attributes (Char) -> Char#character.attributes.
--spec get_weapon_ids (struct()) -> {weapon:id(), weapon:id()}.
+-spec get_weapon_ids (type()) -> {weapon:id(), weapon:id()}.
get_weapon_ids (Char) -> Char#character.weapon_ids.
--spec get_statistics (struct()) -> statistics:struct().
+-spec get_statistics (type()) -> statistics:type().
get_statistics (Char) -> Char#character.statistics.
-spec set_weapon_ids
(
{weapon:id(), weapon:id()},
- struct()
+ type()
)
- -> struct().
+ -> type().
set_weapon_ids (WeaponIDs, Char) ->
Char#character
{
@@ -97,10 +97,10 @@ set_weapon_ids (WeaponIDs, Char) ->
-spec set_statistics
(
- statistics:struct(),
- struct()
+ statistics:type(),
+ type()
)
- -> struct().
+ -> type().
set_statistics (Stats, Char) ->
Char#character
{
@@ -112,7 +112,7 @@ set_statistics (Stats, Char) ->
non_neg_integer(),
player:id()
)
- -> struct().
+ -> type().
random (ID, OwnerID) ->
WeaponIDs = {weapon:random_id(), weapon:random_id()},
Attributes = attributes:random(),
diff --git a/src/battlemap/src/struct/character_instance.erl b/src/battlemap/src/struct/character_instance.erl
index b657f10..e58723e 100644
--- a/src/battlemap/src/struct/character_instance.erl
+++ b/src/battlemap/src/struct/character_instance.erl
@@ -7,14 +7,14 @@
(
character_instance,
{
- character :: character:struct(),
+ character :: character:type(),
location :: {non_neg_integer(), non_neg_integer()},
current_health :: non_neg_integer(),
active :: boolean()
}
).
--opaque struct() :: #character_instance{}.
+-opaque type() :: #character_instance{}.
-export_type([struct/0]).
@@ -78,22 +78,22 @@ find_random_location (BattlemapWidth, BattlemapHeight, ForbiddenLocations) ->
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Accessors
--spec get_character (struct()) -> character:struct().
+-spec get_character (type()) -> character:type().
get_character (CharInst) -> CharInst#character_instance.character.
--spec get_location (struct()) -> {non_neg_integer(), non_neg_integer()}.
+-spec get_location (type()) -> {non_neg_integer(), non_neg_integer()}.
get_location (CharInst) ->
true = get_is_alive(CharInst),
CharInst#character_instance.location.
--spec get_current_health (struct()) -> non_neg_integer().
+-spec get_current_health (type()) -> non_neg_integer().
get_current_health (CharInst) -> CharInst#character_instance.current_health.
--spec get_is_alive (struct()) -> boolean().
+-spec get_is_alive (type()) -> boolean().
get_is_alive (CharInst) ->
(CharInst#character_instance.current_health > 0).
--spec get_is_active (struct()) -> boolean().
+-spec get_is_active (type()) -> boolean().
get_is_active (CharInst) ->
(
CharInst#character_instance.active
@@ -101,7 +101,7 @@ get_is_active (CharInst) ->
get_is_alive(CharInst)
).
--spec set_character (character:struct(), struct()) -> struct().
+-spec set_character (character:type(), type()) -> type().
set_character (Char, CharInst) ->
CharInst#character_instance
{
@@ -111,23 +111,23 @@ set_character (Char, CharInst) ->
-spec set_location
(
{non_neg_integer(), non_neg_integer()},
- struct()
+ type()
)
- -> struct().
+ -> type().
set_location (Location, CharInst) ->
CharInst#character_instance
{
location = Location
}.
--spec set_current_health (non_neg_integer(), struct()) -> struct().
+-spec set_current_health (non_neg_integer(), type()) -> type().
set_current_health (Health, CharInst) ->
CharInst#character_instance
{
current_health = max(0, Health)
}.
--spec set_is_active (boolean(), struct()) -> struct().
+-spec set_is_active (boolean(), type()) -> type().
set_is_active (Active, CharInst) ->
CharInst#character_instance
{
@@ -137,10 +137,10 @@ set_is_active (Active, CharInst) ->
%%%% Utils
-spec new
(
- character:struct(),
+ character:type(),
{non_neg_integer(), non_neg_integer()}
)
- -> struct().
+ -> type().
new (Character, Location) ->
CharacterStatistics = character:get_statistics(Character),
#character_instance
@@ -153,12 +153,12 @@ new (Character, Location) ->
-spec random
(
- character:struct(),
+ character:type(),
non_neg_integer(),
non_neg_integer(),
list({non_neg_integer(), non_neg_integer()})
)
- -> struct().
+ -> type().
random (Character, BattlemapWidth, BattlemapHeight, ForbiddenLocations) ->
new
(
diff --git a/src/battlemap/src/struct/character_turn_data.erl b/src/battlemap/src/struct/character_turn_data.erl
index 0f8364e..ca0954e 100644
--- a/src/battlemap/src/struct/character_turn_data.erl
+++ b/src/battlemap/src/struct/character_turn_data.erl
@@ -8,8 +8,8 @@
type,
{
dirty :: boolean(),
- battle :: battle:struct(),
- character_instance :: character_instance:struct(),
+ battle :: battle:type(),
+ character_instance :: character_instance:type(),
character_instance_ix :: non_neg_integer()
}
).
@@ -29,6 +29,7 @@
get_battle_is_dirty/1,
get_battle/1,
get_character_instance/1,
+ get_character_instance_ix/1,
set_battle/2,
set_character_instance/2
@@ -71,6 +72,9 @@ get_battle (Data) -> Data#type.battle.
-spec get_character_instance (type()) -> character_instance:type().
get_character_instance (Data) -> Data#type.character_instance.
+-spec get_character_instance_ix (type()) -> non_neg_integer().
+get_character_instance_ix (Data) -> Data#type.character_instance_ix.
+
-spec set_battle (battle:type(), type()) -> type().
set_battle (Battle, Data) ->
Data#type{ battle = Battle }.
diff --git a/src/battlemap/src/struct/character_turn_request.erl b/src/battlemap/src/struct/character_turn_request.erl
index 8c816d9..1cfb212 100644
--- a/src/battlemap/src/struct/character_turn_request.erl
+++ b/src/battlemap/src/struct/character_turn_request.erl
@@ -17,7 +17,7 @@
session_token :: binary(),
battle_id :: binary(),
character_instance_ix :: non_neg_integer(),
- actions :: list(battle_action:struct())
+ actions :: list(battle_action:type())
}
).
@@ -80,5 +80,5 @@ get_battle_id (Request) -> Request#type.battle_id.
-spec get_character_instance_ix (type()) -> non_neg_integer().
get_character_instance_ix (Request) -> Request#type.character_instance_ix.
--spec get_actions (type()) -> list(battle_action:struct()).
+-spec get_actions (type()) -> list(battle_action:type()).
get_actions (Request) -> Request#type.actions.
diff --git a/src/battlemap/src/struct/player.erl b/src/battlemap/src/struct/player.erl
index c4aefd1..04939cb 100644
--- a/src/battlemap/src/struct/player.erl
+++ b/src/battlemap/src/struct/player.erl
@@ -14,7 +14,7 @@
}
).
--opaque struct() :: #player{}.
+-opaque type() :: #player{}.
-export_type([struct/0, id/0]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -44,13 +44,13 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec get_id (struct()) -> id().
+-spec get_id (type()) -> id().
get_id (Player) -> Player#player.id.
--spec get_timeline (struct()) -> list(any()).
+-spec get_timeline (type()) -> list(any()).
get_timeline (Player) -> Player#player.timeline.
--spec add_to_timeline (list(any()), struct()) -> struct().
+-spec add_to_timeline (list(any()), type()) -> type().
add_to_timeline (NewEvents, Player) ->
OldTimeline = Player#player.timeline,
@@ -59,10 +59,10 @@ add_to_timeline (NewEvents, Player) ->
timeline = (NewEvents ++ OldTimeline)
}.
--spec reset_timeline (struct()) -> struct().
+-spec reset_timeline (type()) -> type().
reset_timeline (Player) -> Player#player{ timeline = [] }.
--spec new (id()) -> struct().
+-spec new (id()) -> type().
new (ID) ->
#player
{
diff --git a/src/battlemap/src/struct/statistics.erl b/src/battlemap/src/struct/statistics.erl
index 6e29ea4..b1e88b8 100644
--- a/src/battlemap/src/struct/statistics.erl
+++ b/src/battlemap/src/struct/statistics.erl
@@ -19,7 +19,7 @@
}
).
--opaque struct() :: #statistics{}.
+-opaque type() :: #statistics{}.
-export_type([struct/0]).
@@ -110,34 +110,34 @@ apply_damage_base_modifier (Modifier, BaseValue) ->
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Accessors
--spec get_movement_points (struct()) -> non_neg_integer().
+-spec get_movement_points (type()) -> non_neg_integer().
get_movement_points (Stats) -> Stats#statistics.movement_points.
--spec get_health (struct()) -> non_neg_integer().
+-spec get_health (type()) -> non_neg_integer().
get_health (Stats) -> Stats#statistics.health.
--spec get_dodges (struct()) -> non_neg_integer().
+-spec get_dodges (type()) -> non_neg_integer().
get_dodges (Stats) -> Stats#statistics.dodges.
--spec get_parries (struct()) -> non_neg_integer().
+-spec get_parries (type()) -> non_neg_integer().
get_parries (Stats) -> Stats#statistics.parries.
--spec get_damage_min (struct()) -> non_neg_integer().
+-spec get_damage_min (type()) -> non_neg_integer().
get_damage_min (Stats) -> Stats#statistics.damage_min.
--spec get_damage_max (struct()) -> non_neg_integer().
+-spec get_damage_max (type()) -> non_neg_integer().
get_damage_max (Stats) -> Stats#statistics.damage_max.
--spec get_accuracy (struct()) -> non_neg_integer().
+-spec get_accuracy (type()) -> non_neg_integer().
get_accuracy (Stats) -> Stats#statistics.accuracy.
--spec get_double_hits (struct()) -> non_neg_integer().
+-spec get_double_hits (type()) -> non_neg_integer().
get_double_hits (Stats) -> Stats#statistics.double_hits.
--spec get_critical_hits (struct()) -> non_neg_integer().
+-spec get_critical_hits (type()) -> non_neg_integer().
get_critical_hits (Stats) -> Stats#statistics.critical_hits.
--spec get_damages (struct()) -> {non_neg_integer(), non_neg_integer()}.
+-spec get_damages (type()) -> {non_neg_integer(), non_neg_integer()}.
get_damages (Stats) ->
{
Stats#statistics.damage_min,
@@ -146,10 +146,10 @@ get_damages (Stats) ->
-spec new
(
- attributes:struct(),
+ attributes:type(),
{weapon:id(), weapon:id()}
)
- -> struct().
+ -> type().
new (BaseAttributes, WeaponIDs) ->
{ActiveWeaponID, _} = WeaponIDs,
ActiveWeapon = weapon:from_id(ActiveWeaponID),
diff --git a/src/battlemap/src/struct/tile.erl b/src/battlemap/src/struct/tile.erl
index e86da56..aea139e 100644
--- a/src/battlemap/src/struct/tile.erl
+++ b/src/battlemap/src/struct/tile.erl
@@ -4,7 +4,7 @@
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-opaque id() :: non_neg_integer().
--opaque struct() :: id().
+-opaque type() :: id().
-export_type([struct/0, id/0]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/src/battlemap/src/struct/turn_result.erl b/src/battlemap/src/struct/turn_result.erl
index 5f796ca..797c8ca 100644
--- a/src/battlemap/src/struct/turn_result.erl
+++ b/src/battlemap/src/struct/turn_result.erl
@@ -28,11 +28,11 @@
{
attacker_ix :: character_instance:id(),
defender_ix :: character_instance:id(),
- sequence :: list(attack:struct())
+ sequence :: list(attack:type())
}
).
--opaque struct() :: (#switched_weapon{} | #moved{} | #attacked{}).
+-opaque type() :: (#switched_weapon{} | #moved{} | #attacked{}).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -62,7 +62,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec new_character_switched_weapons (character_instance:id()) -> struct().
+-spec new_character_switched_weapons (character_instance:id()) -> type().
new_character_switched_weapons (CharacterInstanceIX) ->
#switched_weapon { character_instance_ix = CharacterInstanceIX }.
@@ -72,7 +72,7 @@ new_character_switched_weapons (CharacterInstanceIX) ->
list(direction:enum()),
location:type()
)
- -> struct().
+ -> type().
new_character_moved (CharacterInstanceIX, Path, NewLocation) ->
#moved
{
@@ -85,9 +85,9 @@ new_character_moved (CharacterInstanceIX, Path, NewLocation) ->
(
character_instance:id(),
character_instance:id(),
- list(attack:struct())
+ list(attack:type())
)
- -> struct().
+ -> type().
new_character_attacked (AttackerIX, DefenderIX, AttackSequence) ->
#attacked
{
@@ -96,7 +96,7 @@ new_character_attacked (AttackerIX, DefenderIX, AttackSequence) ->
sequence = AttackSequence
}.
--spec encode (struct()) -> {list(any())}.
+-spec encode (type()) -> {list(any())}.
encode (TurnResult) when is_record(TurnResult, switched_weapon) ->
CharacterInstanceIX = TurnResult#switched_weapon.character_instance_ix,
diff --git a/src/battlemap/src/struct/weapon.erl b/src/battlemap/src/struct/weapon.erl
index 80cb925..fa348a0 100644
--- a/src/battlemap/src/struct/weapon.erl
+++ b/src/battlemap/src/struct/weapon.erl
@@ -23,7 +23,7 @@
}
).
--opaque struct() :: #weapon{}.
+-opaque type() :: #weapon{}.
-export_type([struct/0, id/0]).
-export_type
@@ -89,24 +89,24 @@ damages_of_type (melee, light) -> {15, 30}.
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Accessors
--spec get_id (struct()) -> id().
+-spec get_id (type()) -> id().
get_id (Wp) -> Wp#weapon.id.
--spec get_range_type (struct()) -> range_type().
+-spec get_range_type (type()) -> range_type().
get_range_type (Wp) -> Wp#weapon.range_type.
--spec get_ranges (struct()) -> {non_neg_integer(), non_neg_integer()}.
+-spec get_ranges (type()) -> {non_neg_integer(), non_neg_integer()}.
get_ranges (Wp) ->
ranges_of_type(Wp#weapon.range_type, Wp#weapon.range_mod).
--spec get_damages (struct()) -> {non_neg_integer(), non_neg_integer()}.
+-spec get_damages (type()) -> {non_neg_integer(), non_neg_integer()}.
get_damages (Wp) ->
damages_of_type(Wp#weapon.range_type, Wp#weapon.damage_mod).
--spec can_parry (struct()) -> boolean().
+-spec can_parry (type()) -> boolean().
can_parry (Wp) -> (Wp#weapon.range_type == melee).
--spec from_id (id()) -> struct().
+-spec from_id (id()) -> type().
from_id (0) ->
#weapon{
id = 0,
@@ -338,10 +338,10 @@ random_id () -> roll:between(0, 24).
-spec apply_to_attributes
(
- attributes:struct(),
- weapon:struct()
+ attributes:type(),
+ weapon:type()
)
- -> attributes:struct().
+ -> attributes:type().
apply_to_attributes (Attributes, Weapon) ->
Dexterity = attributes:get_dexterity(Attributes),
Speed = attributes:get_speed(Attributes),