summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battlemap/src/game-logic/next_turn.erl24
-rw-r--r--src/battlemap/src/game-logic/turn_actions.erl120
-rw-r--r--src/battlemap/src/query/character_turn.erl38
-rw-r--r--src/battlemap/src/query/load_state.erl14
-rw-r--r--src/battlemap/src/reply/add_char.erl13
-rw-r--r--src/battlemap/src/struct/battle.erl97
-rw-r--r--src/battlemap/src/struct/character.erl101
-rw-r--r--src/battlemap/src/struct/character_instance.erl167
-rw-r--r--src/battlemap/src/struct/character_turn_data.erl39
-rw-r--r--src/battlemap/src/struct/character_turn_request.erl14
-rw-r--r--src/battlemap/src/struct/turn_result.erl32
11 files changed, 254 insertions, 405 deletions
diff --git a/src/battlemap/src/game-logic/next_turn.erl b/src/battlemap/src/game-logic/next_turn.erl
index 03d2cbf..af54d3b 100644
--- a/src/battlemap/src/game-logic/next_turn.erl
+++ b/src/battlemap/src/game-logic/next_turn.erl
@@ -49,23 +49,21 @@ reset_next_player_timeline (Battle) ->
-> {battle:type(), list(non_neg_integer())}.
activate_next_players_characters (Battle, NextPlayer) ->
NextPlayerID = player:get_id(NextPlayer),
- CharacterInstances = battle:get_character_instances(Battle),
+ Characters = battle:get_characters(Battle),
- {UpdatedCharacterInstances, ModifiedIXs} =
+ {UpdatedCharacters, ModifiedIXs} =
array_util:mapiff
(
- fun (CharacterInstance) ->
- Character = character_instance:get_character(CharacterInstance),
+ fun (Character) ->
(character:get_owner_id(Character) == NextPlayerID)
end,
- fun (CharacterInstance) ->
- character_instance:set_is_active(true, CharacterInstance)
+ fun (Character) ->
+ character:set_is_active(true, Character)
end,
- CharacterInstances
+ Characters
),
- UpdatedBattle =
- battle:set_character_instances(UpdatedCharacterInstances, Battle),
+ UpdatedBattle = battle:set_characters(UpdatedCharacters, Battle),
{UpdatedBattle, ModifiedIXs}.
@@ -92,10 +90,10 @@ update (Update) ->
S0Battle = set_player_turn_to_next(Battle),
{S1Battle, NextPlayer} = reset_next_player_timeline(S0Battle),
- {S2Battle, ActivatedCharacterInstancesIX} =
+ {S2Battle, ActivatedCharactersIX} =
activate_next_players_characters(S1Battle, NextPlayer),
- S0Update = add_activation_updates(ActivatedCharacterInstancesIX, Update),
+ S0Update = add_activation_updates(ActivatedCharactersIX, Update),
UpdatedData = character_turn_data:set_battle(S2Battle, Data),
@@ -105,9 +103,9 @@ update (Update) ->
requires_update (Update) ->
Data = character_turn_update:get_data(Update),
Battle = character_turn_data:get_battle(Data),
- CharacterInstances = battle:get_character_instances(Battle),
+ Characters = battle:get_characters(Battle),
- array_util:none(fun character_instance:get_is_active/1, CharacterInstances).
+ array_util:none(fun character:get_is_active/1, Characters).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/src/battlemap/src/game-logic/turn_actions.erl b/src/battlemap/src/game-logic/turn_actions.erl
index 29886a1..51c4fb3 100644
--- a/src/battlemap/src/game-logic/turn_actions.erl
+++ b/src/battlemap/src/game-logic/turn_actions.erl
@@ -25,9 +25,8 @@
-> 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),
+ Character = character_turn_data:get_character(Data),
+ CharacterIX = character_turn_data:get_character_ix(Data),
CharacterAttributes = character:get_attributes(Character),
{PrimaryWeaponID, SecondaryWeaponID} = character:get_weapon_ids(Character),
@@ -40,23 +39,16 @@ handle_switch_weapon (Update) ->
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}
+ % {character, CharacterIX, wp0, SecondaryWeaponID},
+ % {character, CharacterIX, wp1, PrimaryWeaponID}
- UpdatedData =
- character_turn_data:set_character_instance
- (
- UpdatedCharacterInstance,
- Data
- ),
+ UpdatedData = character_turn_data:set_character(UpdatedCharacter, Data),
character_turn_update:add_to_timeline
(
- turn_result:new_character_switched_weapons(CharacterInstanceIX),
+ turn_result:new_character_switched_weapons(CharacterIX),
character_turn_update:set_data(UpdatedData, Update)
).
@@ -68,24 +60,24 @@ handle_switch_weapon (Update) ->
)
-> {non_neg_integer(), location:type()}.
get_path_cost_and_destination (Data, Path) ->
- CharacterInstance = character_turn_data:get_character_instance(Data),
- CharacterInstanceIX = character_turn_data:get_character_instance_ix(Data),
+ Character = character_turn_data:get_character(Data),
+ CharacterIX = character_turn_data:get_character_ix(Data),
Battle = character_turn_data:get_battle(Data),
Battlemap = battle:get_battlemap(Battle),
ForbiddenLocations =
array:foldl
(
- fun (IX, CharInst, Prev) ->
- IsAlive = character_instance:get_is_alive(CharInst),
+ fun (IX, Char, Prev) ->
+ IsAlive = character:get_is_alive(Char),
if
- (IX == CharacterInstanceIX) -> Prev;
+ (IX == CharacterIX) -> Prev;
(not IsAlive) -> Prev;
- true -> [character_instance:get_location(CharInst)|Prev]
+ true -> [character:get_location(Char)|Prev]
end
end,
[],
- battle:get_character_instances(Battle)
+ battle:get_characters(Battle)
),
{NewLocation, Cost} =
@@ -94,7 +86,7 @@ get_path_cost_and_destination (Data, Path) ->
Battlemap,
ForbiddenLocations,
Path,
- character_instance:get_location(CharacterInstance)
+ character:get_location(Character)
),
{Cost, NewLocation}.
@@ -106,8 +98,7 @@ get_path_cost_and_destination (Data, Path) ->
)
-> 'ok'.
assert_character_can_move (Data, Cost) ->
- CharacterInstance = character_turn_data:get_character_instance(Data),
- Character = character_instance:get_character(CharacterInstance),
+ Character = character_turn_data:get_character(Data),
CharacterStatistics = character:get_statistics(Character),
CharacterMovementPoints =
statistics:get_movement_points(CharacterStatistics),
@@ -125,32 +116,21 @@ assert_character_can_move (Data, Cost) ->
-> character_turn_update:type().
commit_move (Update, Path, NewLocation) ->
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_turn_data:get_character(Data),
+ CharacterIX = character_turn_data:get_character_ix(Data),
- UpdatedCharacterInstance =
- character_instance:set_location(NewLocation, CharacterInstance),
+ UpdatedCharacter = character:set_location(NewLocation, Character),
- UpdatedData =
- character_turn_data:set_character_instance
- (
- UpdatedCharacterInstance,
- Data
- ),
+ UpdatedData = character_turn_data:set_character(UpdatedCharacter, Data),
S0Update =
character_turn_update:add_to_timeline
(
- turn_result:new_character_moved
- (
- CharacterInstanceIX,
- Path,
- NewLocation
- ),
+ turn_result:new_character_moved(CharacterIX, Path, NewLocation),
Update
),
- %[{character_instance, CharacterInstanceIX, loc, NewLocation}],
+ %[{character, CharacterIX, loc, NewLocation}],
character_turn_update:set_data(UpdatedData, S0Update).
@@ -172,19 +152,17 @@ handle_move (Update, BattleAction) ->
%%%% ATTACKING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec handle_attack_sequence
(
- character_instance:type(),
- character_instance:type(),
+ character:type(),
+ character:type(),
list(attack:step())
)
-> {list(attack:type()), non_neg_integer(), non_neg_integer()}.
handle_attack_sequence
(
- CharacterInstance,
- TargetCharacterInstance,
+ Character,
+ TargetCharacter,
AttackSequence
) ->
- Character = character_instance:get_character(CharacterInstance),
- TargetCharacter = character_instance:get_character(TargetCharacterInstance),
CharacterStatistics = character:get_statistics(Character),
TargetCharacterStatistics = character:get_statistics(TargetCharacter),
@@ -228,27 +206,24 @@ handle_attack_sequence
end,
{
[],
- character_instance:get_current_health(CharacterInstance),
- character_instance:get_current_health(TargetCharacterInstance)
+ character:get_current_health(Character),
+ character:get_current_health(TargetCharacter)
},
AttackPlannedEffects
).
-spec get_attack_sequence
(
- character_instance:type(),
- character_instance:type()
+ character:type(),
+ character:type()
)
-> list(attack:step()).
-get_attack_sequence (CharacterInstance, TargetCharacterInstance) ->
- Character = character_instance:get_character(CharacterInstance),
- TargetCharacter = character_instance:get_character(TargetCharacterInstance),
-
+get_attack_sequence (Character, TargetCharacter) ->
Range =
location:dist
(
- character_instance:get_location(CharacterInstance),
- character_instance:get_location(TargetCharacterInstance)
+ character:get_location(Character),
+ character:get_location(TargetCharacter)
),
{AttackingWeaponID, _} = character:get_weapon_ids(Character),
@@ -269,46 +244,45 @@ get_attack_sequence (CharacterInstance, TargetCharacterInstance) ->
handle_attack (Update, BattleAction) ->
Data = character_turn_update:get_data(Update),
Battle = character_turn_data:get_battle(Data),
- CharacterInstance = character_turn_data:get_character_instance(Data),
- CharacterInstanceIX = character_turn_data:get_character_instance_ix(Data),
+ Character = character_turn_data:get_character(Data),
+ CharacterIX = character_turn_data:get_character_ix(Data),
TargetIX = battle_action:get_target_ix(BattleAction),
- TargetCharacterInstance = battle:get_character_instance(TargetIX, Battle),
+ TargetCharacter = battle:get_character(TargetIX, Battle),
- AttackSequence =
- get_attack_sequence(CharacterInstance, TargetCharacterInstance),
+ AttackSequence = get_attack_sequence(Character, TargetCharacter),
{AttackEffects, RemainingAttackerHealth, RemainingDefenderHealth} =
handle_attack_sequence
(
- CharacterInstance,
- TargetCharacterInstance,
+ Character,
+ TargetCharacter,
AttackSequence
),
- UpdatedCharacterInstance =
- character_instance:set_current_health
+ UpdatedCharacter =
+ character:set_current_health
(
RemainingAttackerHealth,
- CharacterInstance
+ Character
),
UpdatedBattle =
- battle:set_character_instance
+ battle:set_character
(
TargetIX,
- character_instance:set_current_health
+ character:set_current_health
(
RemainingDefenderHealth,
- TargetCharacterInstance
+ TargetCharacter
),
Battle
),
S0Data = character_turn_data:set_battle(UpdatedBattle, Data),
S1Data =
- character_turn_data:set_character_instance
+ character_turn_data:set_character
(
- UpdatedCharacterInstance,
+ UpdatedCharacter,
S0Data
),
@@ -317,7 +291,7 @@ handle_attack (Update, BattleAction) ->
(
turn_result:new_character_attacked
(
- CharacterInstanceIX,
+ CharacterIX,
TargetIX,
AttackEffects
),
diff --git a/src/battlemap/src/query/character_turn.erl b/src/battlemap/src/query/character_turn.erl
index 0814131..a96f984 100644
--- a/src/battlemap/src/query/character_turn.erl
+++ b/src/battlemap/src/query/character_turn.erl
@@ -1,5 +1,4 @@
-module(character_turn).
-% FIXME: There's still too much of a mess in this module.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -41,12 +40,12 @@ authenticate_user (Request) ->
fetch_data (Request) ->
PlayerID = character_turn_request:get_player_id(Request),
BattleID = character_turn_request:get_battle_id(Request),
- CharacterInstanceIX =
- character_turn_request:get_character_instance_ix(Request),
+ CharacterIX =
+ character_turn_request:get_character_ix(Request),
Battle = timed_cache:fetch(battle_db, PlayerID, BattleID),
- character_turn_data:new(Battle, CharacterInstanceIX).
+ character_turn_data:new(Battle, CharacterIX).
%%%% ASSERTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec assert_user_is_current_player
@@ -72,8 +71,7 @@ assert_user_is_current_player (Data, Request) ->
) -> 'ok'.
assert_user_owns_played_character (Data, Request) ->
PlayerID = character_turn_request:get_player_id(Request),
- CharacterInstance = character_turn_data:get_character_instance(Data),
- Character = character_instance:get_character(CharacterInstance),
+ Character = character_turn_data:get_character(Data),
CharacterOwnerID = character:get_owner_id(Character),
true = (PlayerID == CharacterOwnerID),
@@ -82,9 +80,9 @@ assert_user_owns_played_character (Data, Request) ->
-spec assert_character_can_be_played (character_turn_data:type()) -> 'ok'.
assert_character_can_be_played (Data) ->
- CharacterInstance = character_turn_data:get_character_instance(Data),
+ Character = character_turn_data:get_character(Data),
- true = character_instance:get_is_active(CharacterInstance),
+ true = character:get_is_active(Character),
ok.
@@ -101,22 +99,22 @@ assert_user_permissions (Data, Request) ->
ok.
%%%% QUERY LOGIC HANDLING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec finalize_character_instance
+-spec finalize_character
(
character_turn_update:type()
)
-> character_turn_update:type().
-finalize_character_instance (Update) ->
+finalize_character (Update) ->
Data = character_turn_update:get_data(Update),
- CharacterInstance = character_turn_data:get_character_instance(Data),
+ Character = character_turn_data:get_character(Data),
- DisabledCharacterInstance =
- character_instance:set_is_active(false, CharacterInstance),
+ DisabledCharacter =
+ character:set_is_active(false, Character),
UpdatedData =
- character_turn_data:set_character_instance
+ character_turn_data:set_character
(
- DisabledCharacterInstance,
+ DisabledCharacter,
Data
),
FinalizedData = character_turn_data:clean_battle(UpdatedData),
@@ -136,7 +134,7 @@ handle_actions (Data, Request) ->
PostActionsUpdate =
lists:foldl(fun turn_actions:handle/2, EmptyUpdate, Actions),
- finalize_character_instance(PostActionsUpdate).
+ finalize_character(PostActionsUpdate).
-spec update_timeline
(
@@ -205,13 +203,7 @@ send_to_cache (Update, Request) ->
Data = character_turn_update:get_data(Update),
Battle = character_turn_data:get_battle(Data),
- timed_cache:update
- (
- battle_db,
- PlayerID,
- BattleID,
- Battle
- ),
+ timed_cache:update(battle_db, PlayerID, BattleID, Battle),
ok.
diff --git a/src/battlemap/src/query/load_state.erl b/src/battlemap/src/query/load_state.erl
index 37a30cf..f905892 100644
--- a/src/battlemap/src/query/load_state.erl
+++ b/src/battlemap/src/query/load_state.erl
@@ -53,13 +53,7 @@ fetch_data (Input) ->
PlayerID = Input#input.player_id,
BattleID = Input#input.battle_id,
- Battle =
- timed_cache:fetch
- (
- battle_db,
- PlayerID,
- BattleID
- ),
+ Battle = timed_cache:fetch (battle_db, PlayerID, BattleID),
#query_state
{
@@ -81,10 +75,10 @@ generate_reply (QueryState, Input) ->
(
array:map
(
- fun (IX, CharacterInstance) ->
- add_char:generate(IX, CharacterInstance, PlayerID)
+ fun (IX, Character) ->
+ add_char:generate(IX, Character, PlayerID)
end,
- battle:get_character_instances(Battle)
+ battle:get_characters(Battle)
)
)
]
diff --git a/src/battlemap/src/reply/add_char.erl b/src/battlemap/src/reply/add_char.erl
index 7fad9a0..86b1e9c 100644
--- a/src/battlemap/src/reply/add_char.erl
+++ b/src/battlemap/src/reply/add_char.erl
@@ -35,19 +35,18 @@ attributes_as_json (Attributes) ->
-spec generate
(
non_neg_integer(),
- character_instance:type(),
+ character:type(),
player:id()
)
-> {list(any())}.
-generate (IX, CharacterInstance, PlayerID) ->
- Character = character_instance:get_character(CharacterInstance),
- IsAlive = character_instance:get_is_alive(CharacterInstance),
+generate (IX, Character, PlayerID) ->
+ IsAlive = character:get_is_alive(Character),
Attributes = character:get_attributes(Character),
{ActiveWeapon, SecondaryWeapon} = character:get_weapon_ids(Character),
OwnerID = character:get_owner_id(Character),
Location =
case IsAlive of
- true -> character_instance:get_location(CharacterInstance);
+ true -> character:get_location(Character);
_ -> location:get_nowhere()
end,
@@ -60,14 +59,14 @@ generate (IX, CharacterInstance, PlayerID) ->
{<<"prt">>, character:get_portrait(Character)},
{
<<"hea">>,
- character_instance:get_current_health(CharacterInstance)
+ character:get_current_health(Character)
},
{<<"lc">>, location:encode(Location)},
{<<"pla">>, OwnerID},
{
<<"ena">>,
(
- character_instance:get_is_active(CharacterInstance)
+ character:get_is_active(Character)
and
(OwnerID == PlayerID)
)
diff --git a/src/battlemap/src/struct/battle.erl b/src/battlemap/src/struct/battle.erl
index 259e7f0..59cc581 100644
--- a/src/battlemap/src/struct/battle.erl
+++ b/src/battlemap/src/struct/battle.erl
@@ -11,7 +11,7 @@
{
id :: id(),
battlemap :: battlemap:type(),
- character_instances :: array:array(character_instance:type()),
+ characters :: array:array(character:type()),
players :: array:array(player:type()),
current_player_turn :: player_turn:type()
}
@@ -30,16 +30,16 @@
[
get_id/1,
get_battlemap/1,
- get_character_instances/1,
- get_character_instance/2,
+ get_characters/1,
+ get_character/2,
get_players/1,
get_player/2,
get_current_player_turn/1,
get_encoded_last_turns_effects/1,
set_battlemap/2,
- set_character_instances/2,
- set_character_instance/3,
+ set_characters/2,
+ set_character/3,
set_players/2,
set_player/3,
set_current_player_turn/2
@@ -80,15 +80,13 @@ get_id (Battle) -> Battle#battle.id.
get_battlemap (Battle) ->
Battle#battle.battlemap.
--spec get_character_instances (type()) ->
- array:array(character_instance:type()).
-get_character_instances (Battle) ->
- Battle#battle.character_instances.
+-spec get_characters (type()) -> array:array(character:type()).
+get_characters (Battle) ->
+ Battle#battle.characters.
--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_character (non_neg_integer(), type()) -> character:type().
+get_character (IX, Battle) ->
+ array:get(IX, Battle#battle.characters).
-spec get_players (type()) -> array:array(player:type()).
get_players (Battle) ->
@@ -119,56 +117,34 @@ set_battlemap (Battlemap, Battle) ->
battlemap = Battlemap
}.
--spec set_character_instances
- (
- array:array(character_instance:type()),
- type()
- )
- -> type().
-set_character_instances (CharacterInstances, Battle) ->
+-spec set_characters (array:array(character:type()), type()) -> type().
+set_characters (Characters, Battle) ->
Battle#battle
{
- character_instances = CharacterInstances
+ characters = Characters
}.
--spec set_character_instance
- (
- non_neg_integer(),
- character_instance:type(),
- type()
- )
- -> type().
-set_character_instance (IX, CharacterInstance, Battle) ->
+-spec set_character (non_neg_integer(), character:type(), type()) -> type().
+set_character (IX, Character, Battle) ->
Battle#battle
{
- character_instances =
+ characters =
array:set
(
IX,
- CharacterInstance,
- Battle#battle.character_instances
+ Character,
+ Battle#battle.characters
)
}.
--spec set_players
- (
- array:array(player:type()),
- type()
- )
- -> type().
+-spec set_players (array:array(player:type()), type()) -> type().
set_players (Players, Battle) ->
Battle#battle
{
players = Players
}.
--spec set_player
- (
- non_neg_integer(),
- player:type(),
- type()
- )
- -> type().
+-spec set_player (non_neg_integer(), player:type(), type()) -> type().
set_player (IX, Player, Battle) ->
Battle#battle
{
@@ -181,12 +157,7 @@ set_player (IX, Player, Battle) ->
)
}.
--spec set_current_player_turn
- (
- player_turn:type(),
- type()
- )
- -> type().
+-spec set_current_player_turn (player_turn:type(), type()) -> type().
set_current_player_turn (PlayerTurn, Battle) ->
Battle#battle
{
@@ -204,36 +175,36 @@ set_current_player_turn (PlayerTurn, Battle) ->
random (ID, PlayersAsList, Battlemap, Characters) ->
BattlemapWidth = battlemap:get_width(Battlemap),
BattlemapHeight = battlemap:get_height(Battlemap),
- {CharacterInstancesAsList, _ForbiddenLocations} =
+ {CharactersAsList, _ForbiddenLocations} =
lists:mapfoldl
(
fun (Character, ForbiddenLocations) ->
CharacterOwner = character:get_owner_id(Character),
- NewCharacterInstance =
- character_instance:random
+ NewCharacter =
+ character:random
(
Character,
BattlemapWidth,
BattlemapHeight,
ForbiddenLocations
),
- NewCharacterInstanceActive =
+ NewCharacterActive =
case CharacterOwner of
<<"0">> ->
- character_instance:set_is_active
+ character:set_is_active
(
true,
- NewCharacterInstance
+ NewCharacter
);
_ ->
- NewCharacterInstance
+ NewCharacter
end,
- NewCharacterInstanceLocation =
- character_instance:get_location(NewCharacterInstanceActive),
+ NewCharacterLocation =
+ character:get_location(NewCharacterActive),
{
- NewCharacterInstanceActive,
- [NewCharacterInstanceLocation|ForbiddenLocations]
+ NewCharacterActive,
+ [NewCharacterLocation|ForbiddenLocations]
}
end,
[],
@@ -244,7 +215,7 @@ random (ID, PlayersAsList, Battlemap, Characters) ->
{
id = ID,
battlemap = Battlemap,
- character_instances = array:from_list(CharacterInstancesAsList),
+ characters = array:from_list(CharactersAsList),
players = array:from_list(PlayersAsList),
current_player_turn = player_turn:new(0, 0)
}.
diff --git a/src/battlemap/src/struct/character.erl b/src/battlemap/src/struct/character.erl
index 34a44a1..930bdc9 100644
--- a/src/battlemap/src/struct/character.erl
+++ b/src/battlemap/src/struct/character.erl
@@ -16,7 +16,10 @@
portrait :: binary(),
attributes :: attributes:type(),
statistics :: statistics:type(),
- weapon_ids :: {weapon:id(), weapon:id()}
+ weapon_ids :: {weapon:id(), weapon:id()},
+ location :: {non_neg_integer(), non_neg_integer()},
+ current_health :: non_neg_integer(),
+ active :: boolean()
}
).
@@ -38,22 +41,53 @@
get_attributes/1,
get_statistics/1,
get_weapon_ids/1,
+ get_location/1,
+ get_current_health/1,
+ get_is_alive/1,
+ get_is_active/1,
set_weapon_ids/2,
- set_statistics/2
+ set_statistics/2,
+ set_location/2,
+ set_current_health/2,
+ set_is_active/2
]
).
-export
(
[
- random/2
+ random/5
]
).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec find_random_location
+ (
+ non_neg_integer(),
+ non_neg_integer(),
+ list({non_neg_integer(), non_neg_integer()})
+ )
+ -> {non_neg_integer(), non_neg_integer()}.
+find_random_location (BattlemapWidth, BattlemapHeight, ForbiddenLocations) ->
+ X = roll:between(0, (BattlemapWidth - 1)),
+ Y = roll:between(0, (BattlemapHeight - 1)),
+
+ IsForbidden = lists:member({X, Y}, ForbiddenLocations),
+
+ case IsForbidden of
+ true ->
+ find_random_location
+ (
+ BattlemapWidth,
+ BattlemapHeight,
+ ForbiddenLocations
+ );
+
+ _ -> {X, Y}
+ end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -83,6 +117,52 @@ get_weapon_ids (Char) -> Char#character.weapon_ids.
-spec get_statistics (type()) -> statistics:type().
get_statistics (Char) -> Char#character.statistics.
+-spec get_location (type()) -> {non_neg_integer(), non_neg_integer()}.
+get_location (Char) ->
+ true = get_is_alive(Char),
+ Char#character.location.
+
+-spec get_current_health (type()) -> non_neg_integer().
+get_current_health (Char) -> Char#character.current_health.
+
+-spec get_is_alive (type()) -> boolean().
+get_is_alive (Char) ->
+ (Char#character.current_health > 0).
+
+-spec get_is_active (type()) -> boolean().
+get_is_active (Char) ->
+ (
+ Char#character.active
+ and
+ get_is_alive(Char)
+ ).
+
+-spec set_location
+ (
+ {non_neg_integer(), non_neg_integer()},
+ type()
+ )
+ -> type().
+set_location (Location, Char) ->
+ Char#character
+ {
+ location = Location
+ }.
+
+-spec set_current_health (non_neg_integer(), type()) -> type().
+set_current_health (Health, Char) ->
+ Char#character
+ {
+ current_health = max(0, Health)
+ }.
+
+-spec set_is_active (boolean(), type()) -> type().
+set_is_active (Active, Char) ->
+ Char#character
+ {
+ active = Active
+ }.
+
-spec set_weapon_ids
(
{weapon:id(), weapon:id()},
@@ -107,13 +187,19 @@ set_statistics (Stats, Char) ->
statistics = Stats
}.
+%%%% Utils
-spec random
(
non_neg_integer(),
- player:id()
+ player:id(),
+ non_neg_integer(),
+ non_neg_integer(),
+ list({non_neg_integer(), non_neg_integer()})
)
-> type().
-random (ID, OwnerID) ->
+random (ID, OwnerID, BattlemapWidth, BattlemapHeight, ForbiddenLocations) ->
+ Location =
+ find_random_location(BattlemapWidth, BattlemapHeight, ForbiddenLocations),
WeaponIDs = {weapon:random_id(), weapon:random_id()},
Attributes = attributes:random(),
Statistics = statistics:new(Attributes, WeaponIDs),
@@ -129,5 +215,8 @@ random (ID, OwnerID) ->
portrait = IDAsBinaryString,
attributes = Attributes,
weapon_ids = WeaponIDs,
- statistics = Statistics
+ statistics = Statistics,
+ location = Location,
+ current_health = statistics:get_health(Statistics),
+ active = false
}.
diff --git a/src/battlemap/src/struct/character_instance.erl b/src/battlemap/src/struct/character_instance.erl
deleted file mode 100644
index 912f2cf..0000000
--- a/src/battlemap/src/struct/character_instance.erl
+++ /dev/null
@@ -1,167 +0,0 @@
--module(character_instance).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--record
-(
- character_instance,
- {
- character :: character:type(),
- location :: {non_neg_integer(), non_neg_integer()},
- current_health :: non_neg_integer(),
- active :: boolean()
- }
-).
-
--opaque type() :: #character_instance{}.
-
--export_type([type/0]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export
-(
- [
- new/2,
- random/4
- ]
-).
-
-%%%% Accessors
--export
-(
- [
- get_character/1,
- get_location/1,
- get_current_health/1,
- get_is_alive/1,
- get_is_active/1,
-
- set_character/2,
- set_location/2,
- set_current_health/2,
- set_is_active/2
- ]
-).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec find_random_location
- (
- non_neg_integer(),
- non_neg_integer(),
- list({non_neg_integer(), non_neg_integer()})
- )
- -> {non_neg_integer(), non_neg_integer()}.
-find_random_location (BattlemapWidth, BattlemapHeight, ForbiddenLocations) ->
- X = roll:between(0, (BattlemapWidth - 1)),
- Y = roll:between(0, (BattlemapHeight - 1)),
-
- IsForbidden = lists:member({X, Y}, ForbiddenLocations),
-
- case IsForbidden of
- true ->
- find_random_location
- (
- BattlemapWidth,
- BattlemapHeight,
- ForbiddenLocations
- );
-
- _ -> {X, Y}
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% Accessors
--spec get_character (type()) -> character:type().
-get_character (CharInst) -> CharInst#character_instance.character.
-
--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 (type()) -> non_neg_integer().
-get_current_health (CharInst) -> CharInst#character_instance.current_health.
-
--spec get_is_alive (type()) -> boolean().
-get_is_alive (CharInst) ->
- (CharInst#character_instance.current_health > 0).
-
--spec get_is_active (type()) -> boolean().
-get_is_active (CharInst) ->
- (
- CharInst#character_instance.active
- and
- get_is_alive(CharInst)
- ).
-
--spec set_character (character:type(), type()) -> type().
-set_character (Char, CharInst) ->
- CharInst#character_instance
- {
- character = Char
- }.
-
--spec set_location
- (
- {non_neg_integer(), non_neg_integer()},
- type()
- )
- -> type().
-set_location (Location, CharInst) ->
- CharInst#character_instance
- {
- location = Location
- }.
-
--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(), type()) -> type().
-set_is_active (Active, CharInst) ->
- CharInst#character_instance
- {
- active = Active
- }.
-
-%%%% Utils
--spec new
- (
- character:type(),
- {non_neg_integer(), non_neg_integer()}
- )
- -> type().
-new (Character, Location) ->
- CharacterStatistics = character:get_statistics(Character),
- #character_instance
- {
- character = Character,
- location = Location,
- current_health = statistics:get_health(CharacterStatistics),
- active = false
- }.
-
--spec random
- (
- character:type(),
- non_neg_integer(),
- non_neg_integer(),
- list({non_neg_integer(), non_neg_integer()})
- )
- -> type().
-random (Character, BattlemapWidth, BattlemapHeight, ForbiddenLocations) ->
- new
- (
- Character,
- find_random_location(BattlemapWidth, BattlemapHeight, ForbiddenLocations)
- ).
diff --git a/src/battlemap/src/struct/character_turn_data.erl b/src/battlemap/src/struct/character_turn_data.erl
index ca0954e..6ea744b 100644
--- a/src/battlemap/src/struct/character_turn_data.erl
+++ b/src/battlemap/src/struct/character_turn_data.erl
@@ -9,8 +9,8 @@
{
dirty :: boolean(),
battle :: battle:type(),
- character_instance :: character_instance:type(),
- character_instance_ix :: non_neg_integer()
+ character :: character:type(),
+ character_ix :: non_neg_integer()
}
).
@@ -28,11 +28,11 @@
get_battle_is_dirty/1,
get_battle/1,
- get_character_instance/1,
- get_character_instance_ix/1,
+ get_character/1,
+ get_character_ix/1,
set_battle/2,
- set_character_instance/2
+ set_character/2
]
).
@@ -51,16 +51,15 @@
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec new (battle:type(), non_neg_integer()) -> type().
-new (Battle, CharacterInstanceIX) ->
- CharacterInstance =
- battle:get_character_instance(CharacterInstanceIX, Battle),
+new (Battle, CharacterIX) ->
+ Character = battle:get_character(CharacterIX, Battle),
#type
{
dirty = false,
battle = Battle,
- character_instance = CharacterInstance,
- character_instance_ix = CharacterInstanceIX
+ character = Character,
+ character_ix = CharacterIX
}.
-spec get_battle_is_dirty (type()) -> boolean().
@@ -69,22 +68,22 @@ get_battle_is_dirty (Data) -> Data#type.dirty.
-spec get_battle (type()) -> battle:type().
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 (type()) -> character:type().
+get_character (Data) -> Data#type.character.
--spec get_character_instance_ix (type()) -> non_neg_integer().
-get_character_instance_ix (Data) -> Data#type.character_instance_ix.
+-spec get_character_ix (type()) -> non_neg_integer().
+get_character_ix (Data) -> Data#type.character_ix.
-spec set_battle (battle:type(), type()) -> type().
set_battle (Battle, Data) ->
Data#type{ battle = Battle }.
--spec set_character_instance (character_instance:type(), type()) -> type().
-set_character_instance (CharacterInstance, Data) ->
+-spec set_character (character:type(), type()) -> type().
+set_character (Character, Data) ->
Data#type
{
dirty = true,
- character_instance = CharacterInstance
+ character = Character
}.
-spec clean_battle (type()) -> type().
@@ -93,10 +92,10 @@ clean_battle (Data) ->
{
dirty = false,
battle =
- battle:set_character_instance
+ battle:set_character
(
- Data#type.character_instance_ix,
- Data#type.character_instance,
+ Data#type.character_ix,
+ Data#type.character,
Data#type.battle
)
}.
diff --git a/src/battlemap/src/struct/character_turn_request.erl b/src/battlemap/src/struct/character_turn_request.erl
index 1cfb212..ca8f44f 100644
--- a/src/battlemap/src/struct/character_turn_request.erl
+++ b/src/battlemap/src/struct/character_turn_request.erl
@@ -3,7 +3,7 @@
-define(PLAYER_ID_FIELD, <<"pid">>).
-define(SESSION_TOKEN_FIELD, <<"stk">>).
-define(BATTLE_ID_FIELD, <<"bid">>).
--define(CHAR_INST_IX_FIELD, <<"cix">>).
+-define(CHAR_IX_FIELD, <<"cix">>).
-define(ACTIONS_FIELD, <<"act">>).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -16,7 +16,7 @@
player_id :: player:id(),
session_token :: binary(),
battle_id :: binary(),
- character_instance_ix :: non_neg_integer(),
+ character_ix :: non_neg_integer(),
actions :: list(battle_action:type())
}
).
@@ -41,7 +41,7 @@
get_player_id/1,
get_session_token/1,
get_battle_id/1,
- get_character_instance_ix/1,
+ get_character_ix/1,
get_actions/1
]
).
@@ -55,7 +55,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec decode (map()) -> type().
decode (Map) ->
- CharacterInstanceIX = binary_to_integer(maps:get(?CHAR_INST_IX_FIELD, Map)),
+ CharacterIX = binary_to_integer(maps:get(?CHAR_IX_FIELD, Map)),
EncodedActions = maps:get(?ACTIONS_FIELD, Map),
Actions = lists:map(fun battle_action:decode/1, EncodedActions),
@@ -64,7 +64,7 @@ decode (Map) ->
player_id = maps:get(?PLAYER_ID_FIELD, Map),
session_token = maps:get(?SESSION_TOKEN_FIELD, Map),
battle_id = maps:get(?BATTLE_ID_FIELD, Map),
- character_instance_ix = CharacterInstanceIX,
+ character_ix = CharacterIX,
actions = Actions
}.
@@ -77,8 +77,8 @@ get_session_token (Request) -> Request#type.session_token.
-spec get_battle_id (type()) -> binary().
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_character_ix (type()) -> non_neg_integer().
+get_character_ix (Request) -> Request#type.character_ix.
-spec get_actions (type()) -> list(battle_action:type()).
get_actions (Request) -> Request#type.actions.
diff --git a/src/battlemap/src/struct/turn_result.erl b/src/battlemap/src/struct/turn_result.erl
index 53ae94e..42a3a18 100644
--- a/src/battlemap/src/struct/turn_result.erl
+++ b/src/battlemap/src/struct/turn_result.erl
@@ -8,7 +8,7 @@
(
switched_weapon,
{
- character_instance_ix :: character_instance:id()
+ character_ix :: character:id()
}
).
@@ -16,7 +16,7 @@
(
moved,
{
- character_instance_ix :: character_instance:id(),
+ character_ix :: character:id(),
path :: list(direction:enum()),
new_location :: location:type()
}
@@ -26,8 +26,8 @@
(
attacked,
{
- attacker_ix :: character_instance:id(),
- defender_ix :: character_instance:id(),
+ attacker_ix :: character:id(),
+ defender_ix :: character:id(),
sequence :: list(attack:type())
}
).
@@ -62,29 +62,29 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec new_character_switched_weapons (character_instance:id()) -> type().
-new_character_switched_weapons (CharacterInstanceIX) ->
- #switched_weapon { character_instance_ix = CharacterInstanceIX }.
+-spec new_character_switched_weapons (character:id()) -> type().
+new_character_switched_weapons (CharacterIX) ->
+ #switched_weapon { character_ix = CharacterIX }.
-spec new_character_moved
(
- character_instance:id(),
+ character:id(),
list(direction:enum()),
location:type()
)
-> type().
-new_character_moved (CharacterInstanceIX, Path, NewLocation) ->
+new_character_moved (CharacterIX, Path, NewLocation) ->
#moved
{
- character_instance_ix = CharacterInstanceIX,
+ character_ix = CharacterIX,
path = Path,
new_location = NewLocation
}.
-spec new_character_attacked
(
- character_instance:id(),
- character_instance:id(),
+ character:id(),
+ character:id(),
list(attack:type())
)
-> type().
@@ -98,16 +98,16 @@ new_character_attacked (AttackerIX, DefenderIX, AttackSequence) ->
-spec encode (type()) -> {list(any())}.
encode (TurnResult) when is_record(TurnResult, switched_weapon) ->
- CharacterInstanceIX = TurnResult#switched_weapon.character_instance_ix,
+ CharacterIX = TurnResult#switched_weapon.character_ix,
{
[
{<<"t">>, <<"swp">>},
- {<<"ix">>, CharacterInstanceIX}
+ {<<"ix">>, CharacterIX}
]
};
encode (TurnResult) when is_record(TurnResult, moved) ->
- CharacterInstanceIX = TurnResult#moved.character_instance_ix,
+ CharacterIX = TurnResult#moved.character_ix,
Path = TurnResult#moved.path,
NewLocation = TurnResult#moved.new_location,
@@ -117,7 +117,7 @@ encode (TurnResult) when is_record(TurnResult, moved) ->
{
[
{<<"t">>, <<"mv">>},
- {<<"ix">>, CharacterInstanceIX},
+ {<<"ix">>, CharacterIX},
{<<"p">>, EncodedPath},
{<<"nlc">>, EncodedNewLocation}
]