summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/battlemap')
-rw-r--r--src/battlemap/Makefile72
-rw-r--r--src/battlemap/bm_handler.erl (renamed from src/battlemap/src/handler.erl)8
-rw-r--r--src/battlemap/game-logic/bm_movement.erl (renamed from src/battlemap/src/game-logic/movement.erl)28
-rw-r--r--src/battlemap/game-logic/bm_next_turn.erl (renamed from src/battlemap/src/game-logic/next_turn.erl)81
-rw-r--r--src/battlemap/game-logic/bm_roll.erl (renamed from src/battlemap/src/game-logic/roll.erl)2
-rw-r--r--src/battlemap/game-logic/bm_turn_actions.erl (renamed from src/battlemap/src/game-logic/turn_actions.erl)206
-rw-r--r--src/battlemap/io/bm_security.erl (renamed from src/battlemap/src/io/security.erl)2
-rw-r--r--src/battlemap/mk/debug.mk40
-rw-r--r--src/battlemap/mk/erlang.mk28
-rw-r--r--src/battlemap/mk/preprocessor.mk44
-rw-r--r--src/battlemap/mk/yaws.mk29
-rw-r--r--src/battlemap/module.conf9
-rw-r--r--src/battlemap/query/bm_character_turn.erl250
-rw-r--r--src/battlemap/query/bm_load_state.erl (renamed from src/battlemap/src/query/load_state.erl)29
-rw-r--r--src/battlemap/reply/add_char.erl (renamed from src/battlemap/src/reply/add_char.erl)0
-rw-r--r--src/battlemap/reply/set_map.erl (renamed from src/battlemap/src/reply/set_map.erl)0
-rw-r--r--src/battlemap/reply/set_timeline.erl (renamed from src/battlemap/src/reply/set_timeline.erl)0
-rw-r--r--src/battlemap/reply/turn_results.erl (renamed from src/battlemap/src/reply/turn_results.erl)0
-rw-r--r--src/battlemap/src/io/timed_cache.erl130
-rw-r--r--src/battlemap/src/io/timed_caches_manager.erl152
-rw-r--r--src/battlemap/src/query/character_turn.erl255
-rw-r--r--src/battlemap/src/shim/database_shim.erl137
-rw-r--r--src/battlemap/src/struct/attributes.erl108
-rw-r--r--src/battlemap/src/struct/db_query.erl59
-rw-r--r--src/battlemap/src/struct/statistics.erl193
-rw-r--r--src/battlemap/struct/bm_attack.erl (renamed from src/battlemap/src/struct/attack.erl)51
-rw-r--r--src/battlemap/struct/bm_battle.erl (renamed from src/battlemap/src/struct/battle.erl)46
-rw-r--r--src/battlemap/struct/bm_battle_action.erl (renamed from src/battlemap/src/struct/battle_action.erl)6
-rw-r--r--src/battlemap/struct/bm_battlemap.erl (renamed from src/battlemap/src/struct/battlemap.erl)22
-rw-r--r--src/battlemap/struct/bm_character.erl (renamed from src/battlemap/src/struct/character.erl)32
-rw-r--r--src/battlemap/struct/bm_character_turn_data.erl (renamed from src/battlemap/src/struct/character_turn_data.erl)20
-rw-r--r--src/battlemap/struct/bm_character_turn_request.erl (renamed from src/battlemap/src/struct/character_turn_request.erl)10
-rw-r--r--src/battlemap/struct/bm_character_turn_update.erl (renamed from src/battlemap/src/struct/character_turn_update.erl)20
-rw-r--r--src/battlemap/struct/bm_direction.erl (renamed from src/battlemap/src/struct/direction.erl)2
-rw-r--r--src/battlemap/struct/bm_location.erl (renamed from src/battlemap/src/struct/location.erl)4
-rw-r--r--src/battlemap/struct/bm_player.erl (renamed from src/battlemap/src/struct/player.erl)2
-rw-r--r--src/battlemap/struct/bm_player_turn.erl (renamed from src/battlemap/src/struct/player_turn.erl)2
-rw-r--r--src/battlemap/struct/bm_tile.erl (renamed from src/battlemap/src/struct/tile.erl)4
-rw-r--r--src/battlemap/struct/bm_turn_result.erl (renamed from src/battlemap/src/struct/turn_result.erl)36
-rw-r--r--src/battlemap/struct/bm_weapon.erl (renamed from src/battlemap/src/struct/weapon.erl)17
-rw-r--r--src/battlemap/util/array_util.erl (renamed from src/battlemap/src/util/array_util.erl)0
41 files changed, 571 insertions, 1565 deletions
diff --git a/src/battlemap/Makefile b/src/battlemap/Makefile
deleted file mode 100644
index 9b0c9f4..0000000
--- a/src/battlemap/Makefile
+++ /dev/null
@@ -1,72 +0,0 @@
-################################################################################
-## CONFIG ######################################################################
-################################################################################
-YAWS_CONF ?= ${CURDIR}/yaws.conf
-YAWS_API_HEADER ?= /my/src/yaws/include/yaws_api.hrl
-
-MODULE_NAME ?= $ $(shell basename ${CURDIR})
-MODULE_PORT ?= 8001
-
-DIALYZER_PLT_FILE ?= tacticians-server.plt
-
-## Main Directories
-SRC_DIR ?= ${CURDIR}/src
-CONF_DIR ?= ${CURDIR}/conf
-
-#### Optional Dirs
-BIN_DIR ?= ${CURDIR}/ebin
-INCLUDE_DIR ?= ${CURDIR}/include
-WWW_DIR ?= ${CURDIR}/www
-LOG_DIR ?= ${CURDIR}/log
-
-## Binaries
-YAWS ?= yaws
-ERLC ?= erlc
-ERLC_OPTS ?=
-DIALYZER ?= dialyzer
-
-################################################################################
-## MAKEFILE MAGIC ##############################################################
-################################################################################
-OPTIONAL_DIRS = $(BIN_DIR) $(INCLUDE_DIR) $(WWW_DIR) $(LOG_DIR)
-REQUIRED_HEADERS = $(INCLUDE_DIR)/yaws_api.hrl
-
-################################################################################
-## SANITY CHECKS ###############################################################
-################################################################################
-YAWS_API_HEADER ?= /my/src/yaws/include/yaws_api.hrl
-DIALYZER_PLT_FILE ?= tacticians-server.plt
-
-## Main Directories
-SRC_DIR ?= src
-CONF_DIR ?= conf
-
-################################################################################
-## INCLUDES ####################################################################
-################################################################################
-main_target: all
-
-include ${CURDIR}/mk/debug.mk
-include ${CURDIR}/mk/erlang.mk
-include ${CURDIR}/mk/preprocessor.mk
-include ${CURDIR}/mk/yaws.mk
-
-################################################################################
-## TARGET RULES ################################################################
-################################################################################
-all: build
-
-debug: debug_run
-
-build: $(REQUIRED_HEADERS) $(PREPROCESSOR_RESULT) $(ERLANG_RESULT)
-
-run: yaws_run
-
-clean:
- rm -rf $(PREPROCESSOR_RESULT) $(ERLANG_RESULT)
-
-################################################################################
-## INTERNAL RULES ##############################################################
-################################################################################
-$(OPTIONAL_DIRS): %:
- mkdir -p $@
diff --git a/src/battlemap/src/handler.erl b/src/battlemap/bm_handler.erl
index 1b79b69..09659e9 100644
--- a/src/battlemap/src/handler.erl
+++ b/src/battlemap/bm_handler.erl
@@ -1,4 +1,4 @@
--module(handler).
+-module(bm_handler).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -17,7 +17,7 @@
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
start (_YawsParams) ->
- {ok, Pid} = timed_caches_manager:start(),
- database_shim:generate_db(),
- timed_caches_manager:new_cache(Pid, battle_db, none),
+ {ok, Pid} = sh_timed_caches_manager:start(),
+ bm_database_shim:generate_db(),
+ sh_timed_caches_manager:new_cache(Pid, battle_db, none),
ok.
diff --git a/src/battlemap/src/game-logic/movement.erl b/src/battlemap/game-logic/bm_movement.erl
index 467f87b..ed4c38c 100644
--- a/src/battlemap/src/game-logic/movement.erl
+++ b/src/battlemap/game-logic/bm_movement.erl
@@ -1,4 +1,4 @@
--module(movement).
+-module(bm_movement).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -19,19 +19,19 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec cross
(
- battlemap:type(),
- list(location:type()),
- list(direction:enum()),
+ bm_battlemap:type(),
+ list(bm_location:type()),
+ list(bm_direction:enum()),
non_neg_integer(),
- location:type()
+ bm_location:type()
)
- -> {location:type(), non_neg_integer()}.
+ -> {bm_location:type(), non_neg_integer()}.
cross (_Battlemap, _ForbiddenLocations, [], Cost, Location) ->
{Location, Cost};
cross (Battlemap, ForbiddenLocations, [Step|NextSteps], Cost, Location) ->
- NextLocation = location:apply_direction(Step, Location),
- NextTile = battlemap:get_tile_id(NextLocation, Battlemap),
- NextCost = (Cost + tile:get_cost(NextTile)),
+ NextLocation = bm_location:apply_direction(Step, Location),
+ NextTile = bm_battlemap:get_tile_id(NextLocation, Battlemap),
+ NextCost = (Cost + bm_tile:get_cost(NextTile)),
IsForbidden =
lists:foldl
(
@@ -48,11 +48,11 @@ cross (Battlemap, ForbiddenLocations, [Step|NextSteps], Cost, Location) ->
-spec cross
(
- battlemap:type(),
- list(location:type()),
- list(direction:enum()),
- location:type()
+ bm_battlemap:type(),
+ list(bm_location:type()),
+ list(bm_direction:enum()),
+ bm_location:type()
)
- -> {location:type(), non_neg_integer()}.
+ -> {bm_location:type(), non_neg_integer()}.
cross (Battlemap, ForbiddenLocations, Path, Location) ->
cross(Battlemap, ForbiddenLocations, Path, 0, Location).
diff --git a/src/battlemap/src/game-logic/next_turn.erl b/src/battlemap/game-logic/bm_next_turn.erl
index 8e7ca8a..3628111 100644
--- a/src/battlemap/src/game-logic/next_turn.erl
+++ b/src/battlemap/game-logic/bm_next_turn.erl
@@ -1,4 +1,4 @@
--module(next_turn).
+-module(bm_next_turn).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -16,85 +16,90 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec set_player_turn_to_next (battle:type()) -> battle:type().
+-spec set_player_turn_to_next (bm_battle:type()) -> bm_battle:type().
set_player_turn_to_next (Battle) ->
- Players = battle:get_players(Battle),
- CurrentPlayerTurn = battle:get_current_player_turn(Battle),
+ Players = bm_battle:get_players(Battle),
+ CurrentPlayerTurn = bm_battle:get_current_player_turn(Battle),
- NextPlayerTurn = player_turn:next(array:size(Players), CurrentPlayerTurn),
+ NextPlayerTurn = bm_player_turn:next(array:size(Players), CurrentPlayerTurn),
- battle:set_current_player_turn(NextPlayerTurn, Battle).
+ bm_battle:set_current_player_turn(NextPlayerTurn, Battle).
-spec reset_next_player_timeline
(
- battle:type()
+ bm_battle:type()
)
- -> {battle:type(), player:type()}.
+ -> {bm_battle:type(), bm_player:type()}.
reset_next_player_timeline (Battle) ->
- NextPlayerTurn = battle:get_current_player_turn(Battle),
- NextPlayerIX = player_turn:get_player_ix(NextPlayerTurn),
- NextPlayer = battle:get_player(NextPlayerIX, Battle),
+ NextPlayerTurn = bm_battle:get_current_player_turn(Battle),
+ NextPlayerIX = bm_player_turn:get_player_ix(NextPlayerTurn),
+ NextPlayer = bm_battle:get_player(NextPlayerIX, Battle),
- UpdatedNextPlayer = player:reset_timeline(NextPlayer),
- UpdatedBattle = battle:set_player(NextPlayerIX, UpdatedNextPlayer, Battle),
+ UpdatedNextPlayer = bm_player:reset_timeline(NextPlayer),
+ UpdatedBattle =
+ bm_battle:set_player(NextPlayerIX, UpdatedNextPlayer, Battle),
{UpdatedBattle, UpdatedNextPlayer}.
-spec activate_next_players_characters
(
- battle:type(),
- player:type()
+ bm_battle:type(),
+ bm_player:type()
)
- -> {battle:type(), list(non_neg_integer())}.
+ -> {bm_battle:type(), list(non_neg_integer())}.
activate_next_players_characters (Battle, NextPlayer) ->
- NextPlayerID = player:get_id(NextPlayer),
- Characters = battle:get_characters(Battle),
+ NextPlayerID = bm_player:get_id(NextPlayer),
+ Characters = bm_battle:get_characters(Battle),
{UpdatedCharacters, ModifiedIXs} =
array_util:mapiff
(
fun (Character) ->
- (character:get_owner_id(Character) == NextPlayerID)
+ (bm_character:get_owner_id(Character) == NextPlayerID)
end,
fun (Character) ->
- character:set_is_active(true, Character)
+ bm_character:set_is_active(true, Character)
end,
Characters
),
- UpdatedBattle = battle:set_characters(UpdatedCharacters, Battle),
+ UpdatedBattle = bm_battle:set_characters(UpdatedCharacters, Battle),
{UpdatedBattle, ModifiedIXs}.
-spec add_activation_updates
(
list(non_neg_integer()),
- character_turn_update:type()
+ bm_character_turn_update:type()
)
- -> character_turn_update:type().
+ -> bm_character_turn_update:type().
add_activation_updates ([], Update) ->
Update;
add_activation_updates ([IX|NextIXs], Update) ->
add_activation_updates
(
NextIXs,
- character_turn_update:add_to_db
+ bm_character_turn_update:add_to_db
(
- db_query:update_indexed
+ sh_db_query:update_indexed
(
- battle:get_characters_field(),
+ bm_battle:get_characters_field(),
IX,
- [db_query:set_field(character:get_active_field(), true)]
+ [sh_db_query:set_field(bm_character:get_active_field(), true)]
),
Update
)
).
--spec update (character_turn_update:type()) -> character_turn_update:type().
+-spec update
+ (
+ bm_character_turn_update:type()
+ )
+ -> bm_character_turn_update:type().
update (Update) ->
- Data = character_turn_update:get_data(Update),
- Battle = character_turn_data:get_battle(Data),
+ Data = bm_character_turn_update:get_data(Update),
+ Battle = bm_character_turn_data:get_battle(Data),
S0Battle = set_player_turn_to_next(Battle),
{S1Battle, NextPlayer} = reset_next_player_timeline(S0Battle),
@@ -103,24 +108,24 @@ update (Update) ->
S0Update = add_activation_updates(ActivatedCharactersIX, Update),
- UpdatedData = character_turn_data:set_battle(S2Battle, Data),
+ UpdatedData = bm_character_turn_data:set_battle(S2Battle, Data),
- character_turn_update:set_data(UpdatedData, S0Update).
+ bm_character_turn_update:set_data(UpdatedData, S0Update).
--spec requires_update (character_turn_update:type()) -> boolean().
+-spec requires_update (bm_character_turn_update:type()) -> boolean().
requires_update (Update) ->
- Data = character_turn_update:get_data(Update),
- Battle = character_turn_data:get_battle(Data),
- Characters = battle:get_characters(Battle),
+ Data = bm_character_turn_update:get_data(Update),
+ Battle = bm_character_turn_data:get_battle(Data),
+ Characters = bm_battle:get_characters(Battle),
- array_util:none(fun character:get_is_active/1, Characters).
+ array_util:none(fun bm_character:get_is_active/1, Characters).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec update_if_needed
(
- character_turn_update:type()
+ bm_character_turn_update:type()
)
-> character_turn_update:type().
update_if_needed (Update) ->
diff --git a/src/battlemap/src/game-logic/roll.erl b/src/battlemap/game-logic/bm_roll.erl
index 074054b..be1cb9d 100644
--- a/src/battlemap/src/game-logic/roll.erl
+++ b/src/battlemap/game-logic/bm_roll.erl
@@ -1,4 +1,4 @@
--module(roll).
+-module(bm_roll).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/src/battlemap/src/game-logic/turn_actions.erl b/src/battlemap/game-logic/bm_turn_actions.erl
index e6aac9e..9664283 100644
--- a/src/battlemap/src/game-logic/turn_actions.erl
+++ b/src/battlemap/game-logic/bm_turn_actions.erl
@@ -1,4 +1,4 @@
--module(turn_actions).
+-module(bm_turn_actions).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -20,102 +20,102 @@
%%%% SWITCHING WEAPON %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec handle_switch_weapon
(
- character_turn_update:type()
+ bm_character_turn_update:type()
)
- -> character_turn_update:type().
+ -> bm_character_turn_update:type().
handle_switch_weapon (Update) ->
- Data = character_turn_update:get_data(Update),
- 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),
+ Data = bm_character_turn_update:get_data(Update),
+ Character = bm_character_turn_data:get_character(Data),
+ CharacterIX = bm_character_turn_data:get_character_ix(Data),
+ CharacterAttributes = bm_character:get_attributes(Character),
+ {PrimaryWeaponID, SecondaryWeaponID} = bm_character:get_weapon_ids(Character),
UpdatedWeaponIDs = {SecondaryWeaponID, PrimaryWeaponID},
UpdatedCharacterStatistics =
- statistics:new(CharacterAttributes, UpdatedWeaponIDs),
+ bm_statistics:new(CharacterAttributes, UpdatedWeaponIDs),
UpdatedCharacter =
- character:set_statistics
+ bm_character:set_statistics
(
UpdatedCharacterStatistics,
- character:set_weapon_ids(UpdatedWeaponIDs, Character)
+ bm_character:set_weapon_ids(UpdatedWeaponIDs, Character)
),
DBQuery =
- db_query:update_indexed
+ sh_db_query:update_indexed
(
- battle:get_characters_field(),
+ bm_battle:get_characters_field(),
CharacterIX,
[
- db_query:set_field
+ sh_db_query:set_field
(
- character:get_weapons_field(),
+ bm_character:get_weapons_field(),
UpdatedWeaponIDs
)
]
),
- UpdatedData = character_turn_data:set_character(UpdatedCharacter, Data),
+ UpdatedData = bm_character_turn_data:set_character(UpdatedCharacter, Data),
- S0Update = character_turn_update:set_data(UpdatedData, Update),
+ S0Update = bm_character_turn_update:set_data(UpdatedData, Update),
S1Update =
- character_turn_update:add_to_timeline
+ bm_character_turn_update:add_to_timeline
(
- turn_result:new_character_switched_weapons(CharacterIX),
+ bm_turn_result:new_character_switched_weapons(CharacterIX),
S0Update
),
- character_turn_update:add_to_db(DBQuery, S1Update).
+ bm_character_turn_update:add_to_db(DBQuery, S1Update).
%%%% MOVING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec get_path_cost_and_destination
(
- character_turn_data:type(),
- list(direction:type())
+ bm_character_turn_data:type(),
+ list(bm_direction:type())
)
- -> {non_neg_integer(), location:type()}.
+ -> {non_neg_integer(), bm_location:type()}.
get_path_cost_and_destination (Data, Path) ->
- 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),
+ Character = bm_character_turn_data:get_character(Data),
+ CharacterIX = bm_character_turn_data:get_character_ix(Data),
+ Battle = bm_character_turn_data:get_battle(Data),
+ Battlemap = bm_battle:get_battlemap(Battle),
ForbiddenLocations =
array:foldl
(
fun (IX, Char, Prev) ->
- IsAlive = character:get_is_alive(Char),
+ IsAlive = bm_character:get_is_alive(Char),
if
(IX == CharacterIX) -> Prev;
(not IsAlive) -> Prev;
- true -> [character:get_location(Char)|Prev]
+ true -> [bm_character:get_location(Char)|Prev]
end
end,
[],
- battle:get_characters(Battle)
+ bm_battle:get_characters(Battle)
),
{NewLocation, Cost} =
- movement:cross
+ bm_movement:cross
(
Battlemap,
ForbiddenLocations,
Path,
- character:get_location(Character)
+ bm_character:get_location(Character)
),
{Cost, NewLocation}.
-spec assert_character_can_move
(
- character_turn_data:type(),
+ bm_character_turn_data:type(),
non_neg_integer()
)
-> 'ok'.
assert_character_can_move (Data, Cost) ->
- Character = character_turn_data:get_character(Data),
- CharacterStatistics = character:get_statistics(Character),
+ Character = bm_character_turn_data:get_character(Data),
+ CharacterStatistics = bm_character:get_statistics(Character),
CharacterMovementPoints =
- statistics:get_movement_points(CharacterStatistics),
+ bm_statistics:get_movement_points(CharacterStatistics),
true = (Cost =< CharacterMovementPoints),
@@ -123,38 +123,38 @@ assert_character_can_move (Data, Cost) ->
-spec commit_move
(
- character_turn_update:type(),
- list(direction:type()),
- location:type()
+ bm_character_turn_update:type(),
+ list(bm_direction:type()),
+ bm_location:type()
)
- -> character_turn_update:type().
+ -> bm_character_turn_update:type().
commit_move (Update, Path, NewLocation) ->
- Data = character_turn_update:get_data(Update),
- Character = character_turn_data:get_character(Data),
- CharacterIX = character_turn_data:get_character_ix(Data),
+ Data = bm_character_turn_update:get_data(Update),
+ Character = bm_character_turn_data:get_character(Data),
+ CharacterIX = bm_character_turn_data:get_character_ix(Data),
- UpdatedCharacter = character:set_location(NewLocation, Character),
+ UpdatedCharacter = bm_character:set_location(NewLocation, Character),
- UpdatedData = character_turn_data:set_character(UpdatedCharacter, Data),
+ UpdatedData = bm_character_turn_data:set_character(UpdatedCharacter, Data),
S0Update =
- character_turn_update:add_to_timeline
+ bm_character_turn_update:add_to_timeline
(
- turn_result:new_character_moved(CharacterIX, Path, NewLocation),
+ bm_turn_result:new_character_moved(CharacterIX, Path, NewLocation),
Update
),
S1Update =
- character_turn_update:add_to_db
+ bm_character_turn_update:add_to_db
(
- db_query:update_indexed
+ sh_db_query:update_indexed
(
- battle:get_characters_field(),
+ bm_battle:get_characters_field(),
CharacterIX,
[
- db_query:set_field
+ sh_db_query:set_field
(
- character:get_location_field(),
+ bm_character:get_location_field(),
NewLocation
)
]
@@ -162,17 +162,17 @@ commit_move (Update, Path, NewLocation) ->
S0Update
),
- character_turn_update:set_data(UpdatedData, S1Update).
+ bm_character_turn_update:set_data(UpdatedData, S1Update).
-spec handle_move
(
- battle_action:type(),
- character_turn_update:type()
+ bm_battle_action:type(),
+ bm_character_turn_update:type()
)
- -> character_turn_update:type().
+ -> bm_character_turn_update:type().
handle_move (BattleAction, Update) ->
- Data = character_turn_update:get_data(Update),
- Path = battle_action:get_path(BattleAction),
+ Data = bm_character_turn_update:get_data(Update),
+ Path = bm_battle_action:get_path(BattleAction),
{PathCost, NewLocation} = get_path_cost_and_destination(Data, Path),
assert_character_can_move(Data, PathCost),
@@ -182,25 +182,25 @@ handle_move (BattleAction, Update) ->
%%%% ATTACKING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec handle_attack_sequence
(
- character:type(),
- character:type(),
- list(attack:step())
+ bm_character:type(),
+ bm_character:type(),
+ list(bm_attack:step())
)
- -> {list(attack:type()), non_neg_integer(), non_neg_integer()}.
+ -> {list(bm_attack:type()), non_neg_integer(), non_neg_integer()}.
handle_attack_sequence
(
Character,
TargetCharacter,
AttackSequence
) ->
- CharacterStatistics = character:get_statistics(Character),
- TargetCharacterStatistics = character:get_statistics(TargetCharacter),
+ CharacterStatistics = bm_character:get_statistics(Character),
+ TargetCharacterStatistics = bm_character:get_statistics(TargetCharacter),
AttackPlannedEffects =
lists:map
(
fun (AttackStep) ->
- attack:get_description_of
+ bm_attack:get_description_of
(
AttackStep,
CharacterStatistics,
@@ -218,7 +218,7 @@ handle_attack_sequence
{AttackValidEffects, AttackerHealth, DefenderHealth}
) ->
{AttackResult, NewAttackerHealth, NewDefenderHealth} =
- attack:apply_to_healths
+ bm_attack:apply_to_healths
(
AttackEffectCandidate,
AttackerHealth,
@@ -236,48 +236,48 @@ handle_attack_sequence
end,
{
[],
- character:get_current_health(Character),
- character:get_current_health(TargetCharacter)
+ bm_character:get_current_health(Character),
+ bm_character:get_current_health(TargetCharacter)
},
AttackPlannedEffects
).
-spec get_attack_sequence
(
- character:type(),
- character:type()
+ bm_character:type(),
+ bm_character:type()
)
-> list(attack:step()).
get_attack_sequence (Character, TargetCharacter) ->
Range =
location:dist
(
- character:get_location(Character),
- character:get_location(TargetCharacter)
+ bm_character:get_location(Character),
+ bm_character:get_location(TargetCharacter)
),
- {AttackingWeaponID, _} = character:get_weapon_ids(Character),
- {DefendingWeaponID, _} = character:get_weapon_ids(TargetCharacter),
+ {AttackingWeaponID, _} = bm_character:get_weapon_ids(Character),
+ {DefendingWeaponID, _} = bm_character:get_weapon_ids(TargetCharacter),
- AttackingWeapon = weapon:from_id(AttackingWeaponID),
- DefendingWeapon = weapon:from_id(DefendingWeaponID),
+ AttackingWeapon = bm_weapon:from_id(AttackingWeaponID),
+ DefendingWeapon = bm_weapon:from_id(DefendingWeaponID),
- attack:get_sequence(Range, AttackingWeapon, DefendingWeapon).
+ bm_attack:get_sequence(Range, AttackingWeapon, DefendingWeapon).
-spec handle_attack
(
- battle_action:type(),
- character_turn_update:type()
+ bm_battle_action:type(),
+ bm_character_turn_update:type()
)
- -> character_turn_update:type().
+ -> bm_character_turn_update:type().
handle_attack (BattleAction, Update) ->
- Data = character_turn_update:get_data(Update),
- Battle = character_turn_data:get_battle(Data),
- Character = character_turn_data:get_character(Data),
- CharacterIX = character_turn_data:get_character_ix(Data),
- TargetIX = battle_action:get_target_ix(BattleAction),
- TargetCharacter = battle:get_character(TargetIX, Battle),
+ Data = bm_character_turn_update:get_data(Update),
+ Battle = bm_character_turn_data:get_battle(Data),
+ Character = bm_character_turn_data:get_character(Data),
+ CharacterIX = bm_character_turn_data:get_character_ix(Data),
+ TargetIX = bm_battle_action:get_target_ix(BattleAction),
+ TargetCharacter = bm_battle:get_character(TargetIX, Battle),
AttackSequence = get_attack_sequence(Character, TargetCharacter),
@@ -290,17 +290,17 @@ handle_attack (BattleAction, Update) ->
),
UpdatedCharacter =
- character:set_current_health
+ bm_character:set_current_health
(
RemainingAttackerHealth,
Character
),
UpdatedBattle =
- battle:set_character
+ bm_battle:set_character
(
TargetIX,
- character:set_current_health
+ bm_character:set_current_health
(
RemainingDefenderHealth,
TargetCharacter
@@ -309,9 +309,9 @@ handle_attack (BattleAction, Update) ->
),
- S0Data = character_turn_data:set_battle(UpdatedBattle, Data),
+ S0Data = bm_character_turn_data:set_battle(UpdatedBattle, Data),
S1Data =
- character_turn_data:set_character
+ bm_character_turn_data:set_character
(
UpdatedCharacter,
S0Data
@@ -319,9 +319,9 @@ handle_attack (BattleAction, Update) ->
S0Update =
- character_turn_update:add_to_timeline
+ bm_character_turn_update:add_to_timeline
(
- turn_result:new_character_attacked
+ bm_turn_result:new_character_attacked
(
CharacterIX,
TargetIX,
@@ -329,35 +329,35 @@ handle_attack (BattleAction, Update) ->
),
Update
),
- S1Update = character_turn_update:set_data(S1Data, S0Update),
+ S1Update = bm_character_turn_update:set_data(S1Data, S0Update),
DBQuery =
- db_query:update_indexed
+ sh_db_query:update_indexed
(
- battle:get_characters_field(),
+ bm_battle:get_characters_field(),
TargetIX,
[
- db_query:set_field
+ sh_db_query:set_field
(
- character:get_current_health_field(),
+ bm_character:get_current_health_field(),
RemainingDefenderHealth
)
]
),
- character_turn_update:add_to_db(DBQuery, S1Update).
+ bm_character_turn_update:add_to_db(DBQuery, S1Update).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec handle
(
- battle_action:type(),
- character_turn_update:type()
+ bm_battle_action:type(),
+ bm_character_turn_update:type()
)
--> character_turn_update:type().
+-> bm_character_turn_update:type().
handle (BattleAction, Update) ->
- case battle_action:get_category(BattleAction) of
+ case bm_battle_action:get_category(BattleAction) of
move -> handle_move(BattleAction, Update);
switch_weapon -> handle_switch_weapon(Update);
attack -> handle_attack(BattleAction, Update)
diff --git a/src/battlemap/src/io/security.erl b/src/battlemap/io/bm_security.erl
index 60f6661..787082a 100644
--- a/src/battlemap/src/io/security.erl
+++ b/src/battlemap/io/bm_security.erl
@@ -1,4 +1,4 @@
--module(security).
+-module(bm_security).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/src/battlemap/mk/debug.mk b/src/battlemap/mk/debug.mk
deleted file mode 100644
index 7e88422..0000000
--- a/src/battlemap/mk/debug.mk
+++ /dev/null
@@ -1,40 +0,0 @@
-################################################################################
-## CONFIG ######################################################################
-################################################################################
-DIALYZER_PLT_FILE ?= tacticians-server.plt
-DIALYZER ?= dialyzer
-
-################################################################################
-## MAKEFILE MAGIC ##############################################################
-################################################################################
-SRC_FILES ?= $(wildcard $(SRC_DIR)/*.erl $(SRC_DIR)/*/*.erl)
-
-################################################################################
-## SANITY CHECKS ###############################################################
-################################################################################
-
-################################################################################
-## TARGET RULES ################################################################
-################################################################################
-DEBUG_RESULT = $(DIALYZER_PLT_FILE)
-
-debug_rebuild:
- $(MAKE) clean
- $(MAKE) ERLC_OPTS=+debug_info
-
-################################################################################
-## INTERNAL RULES ##############################################################
-################################################################################
-ifeq ($(wildcard $(DIALYZER_PLT_FILE)),)
-debug_run:
- $(DIALYZER) --build_plt --apps erts kernel stdlib jiffy --output_plt \
- $(DIALYZER_PLT_FILE)
- $(MAKE) debug_rebuild
- $(DIALYZER) --add_to_plt --plt $(DIALYZER_PLT_FILE) -r $(BIN_DIR)
-else
-debug_run:
- $(MAKE) debug_rebuild
- $(DIALYZER) --check_plt --plt $(DIALYZER_PLT_FILE)
- $(DIALYZER) --get_warnings $(SRC_DIR)/*.erl $(SRC_DIR)/*/*.erl \
- --src --plt $(DIALYZER_PLT_FILE)
-endif
diff --git a/src/battlemap/mk/erlang.mk b/src/battlemap/mk/erlang.mk
deleted file mode 100644
index 9150f63..0000000
--- a/src/battlemap/mk/erlang.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-################################################################################
-## CONFIG ######################################################################
-################################################################################
-ERLC ?= erlc
-ERLC_OPTS ?=
-
-################################################################################
-## MAKEFILE MAGIC ##############################################################
-################################################################################
-SRC_FILES ?= $(wildcard $(SRC_DIR)/*.erl $(SRC_DIR)/*/*.erl)
-BIN_FILES = \
- $(patsubst %.erl,$(BIN_DIR)/%.beam,$(notdir $(SRC_FILES)))
-
-################################################################################
-## SANITY CHECKS ###############################################################
-################################################################################
-
-################################################################################
-## TARGET RULES ################################################################
-################################################################################
-ERLANG_RESULT = $(BIN_DIR) $(BIN_FILES)
-
-################################################################################
-## INTERNAL RULES ##############################################################
-################################################################################
-.SECONDEXPANSION:
-$(BIN_FILES): $(BIN_DIR)/%.beam : $$(wildcard $(SRC_DIR)/*/%.erl $(SRC_DIR)/%.erl)
- $(ERLC) $(ERLC_OPTS) -o $(BIN_DIR) $<
diff --git a/src/battlemap/mk/preprocessor.mk b/src/battlemap/mk/preprocessor.mk
deleted file mode 100644
index d27de1b..0000000
--- a/src/battlemap/mk/preprocessor.mk
+++ /dev/null
@@ -1,44 +0,0 @@
-################################################################################
-## CONFIG ######################################################################
-################################################################################
-CONFIG_FILE ?= ${CURDIR}/module.conf
-YAWS_CONFIG_TEMPLATE ?=
-
-################################################################################
-## MAKEFILE MAGIC ##############################################################
-################################################################################
-PREPROCESSOR_FILES = $(shell find ${CURDIR} -name "*.m4")
-PREPROCESSED_FILES = $(patsubst %.m4,%,$(PREPROCESSOR_FILES))
-
-MAKEFILE_TO_M4 = \
- --define=__MAKEFILE_MODULE_NAME=$(MODULE_NAME) \
- --define=__MAKEFILE_MODULE_PORT=$(MODULE_PORT) \
- --define=__MAKEFILE_BIN_DIR=$(BIN_DIR) \
- --define=__MAKEFILE_INCLUDE_DIR=$(INCLUDE_DIR) \
- --define=__MAKEFILE_LOG_DIR=$(LOG_DIR) \
- --define=__MAKEFILE_WWW_DIR=$(WWW_DIR)
-
-################################################################################
-## SANITY CHECKS ###############################################################
-################################################################################
-ifeq ($(wildcard $(CONFIG_FILE)),)
-$(error "Missing CONFIG_FILE ($(CONFIG_FILE)).")
-endif
-
-ifeq ($(wildcard $(YAWS_CONFIG_TEMPLATE)),)
-$(error "Missing YAWS_CONFIG_TEMPLATE ($(YAWS_CONFIG_TEMPLATE)).")
-endif
-
-################################################################################
-## TARGET RULES ################################################################
-################################################################################
-PREPROCESSOR_RESULT = $(PREPROCESSED_FILES) yaws.conf
-
-################################################################################
-## INTERNAL RULES ##############################################################
-################################################################################
-$(PREPROCESSED_FILES): %: $(CONFIG_FILE) %.m4
- m4 -P $^ > $@
-
-yaws.conf: $(CONFIG_FILE) $(YAWS_CONFIG_TEMPLATE)
- m4 -P $(MAKEFILE_TO_M4) $^ > $@
diff --git a/src/battlemap/mk/yaws.mk b/src/battlemap/mk/yaws.mk
deleted file mode 100644
index a68edf2..0000000
--- a/src/battlemap/mk/yaws.mk
+++ /dev/null
@@ -1,29 +0,0 @@
-################################################################################
-## CONFIG ######################################################################
-################################################################################
-YAWS_CONF ?= ${CURDIR}/yaws.conf
-YAWS_API_HEADER ?= /my/src/yaws/include/yaws_api.hrl
-
-YAWS ?= yaws
-YAWS_OPTS ?= -name battlemap_node -erlarg "-connect_all false"
-
-################################################################################
-## MAKEFILE MAGIC ##############################################################
-################################################################################
-
-################################################################################
-## SANITY CHECKS ###############################################################
-################################################################################
-YAWS_API_HEADER ?= /my/src/yaws/include/yaws_api.hrl
-
-################################################################################
-## TARGET RULES ################################################################
-################################################################################
-yaws_run: build $(WWW_DIR) $(LOG_DIR)
- $(YAWS) --conf $(YAWS_CONF) $(YAWS_OPTS)
-
-################################################################################
-## INTERNAL RULES ##############################################################
-################################################################################
-$(INCLUDE_DIR)/yaws_api.hrl: $(YAWS_API_HEADER) $(INCLUDE_DIR)
- cp $< $@
diff --git a/src/battlemap/module.conf b/src/battlemap/module.conf
deleted file mode 100644
index 8c2a2b6..0000000
--- a/src/battlemap/module.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-m4_define(`__MODULE_NAME', `__MAKEFILE_MODULE_NAME')m4_dnl
-m4_define(`__MODULE_PORT', `__MAKEFILE_MODULE_PORT')m4_dnl
-m4_dnl
-m4_define(`__MODULE_BIN_DIR', `__MAKEFILE_BIN_DIR')m4_dnl
-m4_define(`__MODULE_INCLUDE_DIR', `__MAKEFILE_INCLUDE_DIR')m4_dnl
-m4_define(`__MODULE_LOG_DIR', `__MAKEFILE_LOG_DIR')m4_dnl
-m4_define(`__MODULE_WWW_DIR', `__MAKEFILE_WWW_DIR')m4_dnl
-m4_dnl
-m4_define(`__MODULE_APP_MODS', `character_turn load_state')m4_dnl
diff --git a/src/battlemap/query/bm_character_turn.erl b/src/battlemap/query/bm_character_turn.erl
new file mode 100644
index 0000000..26b8dce
--- /dev/null
+++ b/src/battlemap/query/bm_character_turn.erl
@@ -0,0 +1,250 @@
+-module(bm_character_turn).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-include("../../../include/yaws_api.hrl").
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-export([out/1]).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%-spec send_to_database (list(database_diff:type()), character_turn_request:type()) -> 'ok'.
+
+
+%%%% REQUEST DECODING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec decode_request (binary()) -> bm_character_turn_request:type().
+decode_request (BinaryRequest) ->
+ JSONMap = jiffy:decode(BinaryRequest, [return_maps]),
+
+ bm_character_turn_request:decode(JSONMap).
+
+%%%% USER AUTHENTICATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec authenticate_user (bm_character_turn_request:type()) -> 'ok'.
+authenticate_user (Request) ->
+ PlayerID = bm_character_turn_request:get_player_id(Request),
+ SessionToken = bm_character_turn_request:get_session_token(Request),
+
+ bm_security:assert_identity(PlayerID, SessionToken),
+ bm_security:lock_queries(PlayerID),
+
+ ok.
+
+%%%% MAIN LOGIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec fetch_data
+ (
+ bm_character_turn_request:type()
+ )
+ -> bm_character_turn_data:type().
+fetch_data (Request) ->
+ PlayerID = bm_character_turn_request:get_player_id(Request),
+ BattleID = bm_character_turn_request:get_battle_id(Request),
+ CharacterIX = bm_character_turn_request:get_character_ix(Request),
+ Battle = sh_timed_cache:fetch(battle_db, PlayerID, BattleID),
+
+ bm_character_turn_data:new(Battle, CharacterIX).
+
+%%%% ASSERTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec assert_user_is_current_player
+ (
+ bm_character_turn_data:type(),
+ bm_character_turn_request:type()
+ ) -> 'ok'.
+assert_user_is_current_player (Data, Request) ->
+ PlayerID = bm_character_turn_request:get_player_id(Request),
+ Battle = bm_character_turn_data:get_battle(Data),
+ CurrentPlayerTurn = bm_battle:get_current_player_turn(Battle),
+ CurrentPlayerIX = bm_player_turn:get_player_ix(CurrentPlayerTurn),
+ CurrentPlayer = bm_battle:get_player(CurrentPlayerIX, Battle),
+
+ true = (PlayerID == bm_player:get_id(CurrentPlayer)),
+
+ ok.
+
+-spec assert_user_owns_played_character
+ (
+ bm_character_turn_data:type(),
+ bm_character_turn_request:type()
+ ) -> 'ok'.
+assert_user_owns_played_character (Data, Request) ->
+ PlayerID = bm_character_turn_request:get_player_id(Request),
+ Character = bm_character_turn_data:get_character(Data),
+ CharacterOwnerID = bm_character:get_owner_id(Character),
+
+ true = (PlayerID == CharacterOwnerID),
+
+ ok.
+
+-spec assert_character_can_be_played (bm_character_turn_data:type()) -> 'ok'.
+assert_character_can_be_played (Data) ->
+ Character = bm_character_turn_data:get_character(Data),
+
+ true = bm_character:get_is_active(Character),
+
+ ok.
+
+-spec assert_user_permissions
+ (
+ bm_character_turn_data:type(),
+ bm_character_turn_request:type()
+ ) -> 'ok'.
+assert_user_permissions (Data, Request) ->
+ assert_user_is_current_player(Data, Request),
+ assert_user_owns_played_character(Data, Request),
+ assert_character_can_be_played(Data),
+
+ ok.
+
+%%%% QUERY LOGIC HANDLING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec finalize_character
+ (
+ bm_character_turn_update:type()
+ )
+ -> bm_character_turn_update:type().
+finalize_character (Update) ->
+ Data = bm_character_turn_update:get_data(Update),
+ Character = bm_character_turn_data:get_character(Data),
+
+ DisabledCharacter = bm_character:set_is_active(false, Character),
+ UpdatedData = bm_character_turn_data:set_character(DisabledCharacter, Data),
+ FinalizedData = bm_character_turn_data:clean_battle(UpdatedData),
+
+ bm_character_turn_update:set_data(FinalizedData, Update).
+
+-spec handle_actions
+ (
+ bm_character_turn_data:type(),
+ bm_character_turn_request:type()
+ )
+ -> bm_character_turn_update:type().
+handle_actions (Data, Request) ->
+ Actions = bm_character_turn_request:get_actions(Request),
+
+ EmptyUpdate = bm_character_turn_update:new(Data),
+ PostActionsUpdate =
+ lists:foldl(fun bm_turn_actions:handle/2, EmptyUpdate, Actions),
+
+ finalize_character(PostActionsUpdate).
+
+-spec update_timeline
+ (
+ bm_character_turn_update:type()
+ )
+ -> bm_character_turn_update:type().
+update_timeline (Update) ->
+ NewTimelineElements = bm_character_turn_update:get_timeline(Update),
+ Data = bm_character_turn_update:get_data(Update),
+ Battle = bm_character_turn_data:get_battle(Data),
+ PlayerTurn = bm_battle:get_current_player_turn(Battle),
+ PlayerIX = bm_player_turn:get_player_ix(PlayerTurn),
+ Player = bm_battle:get_player(PlayerIX, Battle),
+
+ UpdatedPlayer = bm_player:add_to_timeline(NewTimelineElements, Player),
+ UpdatedBattle = bm_battle:set_player(PlayerIX, UpdatedPlayer, Battle),
+ UpdatedData = bm_character_turn_data:set_battle(UpdatedBattle, Data),
+
+ bm_character_turn_update:set_data(UpdatedData, Update).
+
+-spec update_data
+ (
+ bm_character_turn_data:type(),
+ bm_character_turn_request:type()
+ )
+ -> bm_character_turn_update:type().
+update_data (Data, Request) ->
+ PostActionsUpdate = handle_actions(Data, Request),
+ PostCharacterTurnUpdate = update_timeline(PostActionsUpdate),
+
+ bm_next_turn:update_if_needed(PostCharacterTurnUpdate).
+
+%%%% DATABASE UPDATES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec send_to_database
+ (
+ bm_character_turn_update:type(),
+ bm_character_turn_request:type()
+ )
+ -> 'ok'.
+send_to_database (Update, Request) ->
+ PlayerID = bm_character_turn_request:get_player_id(Request),
+ BattleID = bm_character_turn_request:get_battle_id(Request),
+ Ops = bm_character_turn_update:get_db(Update),
+ Query = sh_db_query:new(battle_db, BattleID, {user, PlayerID}, Ops),
+
+ % TODO: send queries to an actual DB...
+
+ sh_database:commit(Query),
+
+ ok.
+
+-spec send_to_cache
+ (
+ bm_character_turn_update:type(),
+ bm_character_turn_request:type()
+ )
+ -> 'ok'.
+send_to_cache (Update, Request) ->
+ PlayerID = bm_character_turn_request:get_player_id(Request),
+ BattleID = bm_character_turn_request:get_battle_id(Request),
+ Data = bm_character_turn_update:get_data(Update),
+ Battle = bm_character_turn_data:get_battle(Data),
+
+ sh_timed_cache:update(battle_db, PlayerID, BattleID, Battle),
+
+ ok.
+
+-spec commit_update
+ (
+ bm_character_turn_update:type(),
+ bm_character_turn_request:type()
+ )
+ -> 'ok'.
+commit_update (Update, Request) ->
+ send_to_database(Update, Request),
+ send_to_cache(Update, Request),
+
+ ok.
+
+%%%% USER DISCONNECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec disconnect_user (bm_character_turn_request:type()) -> 'ok'.
+disconnect_user (Request) ->
+ PlayerID = bm_character_turn_request:get_player_id(Request),
+
+ bm_security:unlock_queries(PlayerID),
+
+ ok.
+
+%%%% REPLY GENERATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec generate_reply (bm_character_turn_update:type()) -> binary().
+generate_reply (Update) ->
+ NewTimelineItems = bm_character_turn_update:get_timeline(Update),
+
+ TurnResultReply = bm_turn_results:generate(NewTimelineItems),
+
+ jiffy:encode([TurnResultReply]).
+
+%%%% MAIN LOGIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec handle (binary()) -> binary().
+handle (EncodedRequest) ->
+ Request = decode_request(EncodedRequest),
+ authenticate_user(Request),
+ Data = fetch_data(Request),
+ assert_user_permissions(Data, Request),
+ Update = update_data(Data, Request),
+ commit_update(Update, Request),
+ disconnect_user(Request),
+ generate_reply(Update).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+out(A) ->
+ {
+ content,
+ "application/json; charset=UTF-8",
+ handle(A#arg.clidata)
+ }.
diff --git a/src/battlemap/src/query/load_state.erl b/src/battlemap/query/bm_load_state.erl
index f905892..b580b9f 100644
--- a/src/battlemap/src/query/load_state.erl
+++ b/src/battlemap/query/bm_load_state.erl
@@ -1,15 +1,15 @@
--module(load_state).
+-module(bm_load_state).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--include("../../include/yaws_api.hrl").
+-include("../../../include/yaws_api.hrl").
-record
(
input,
{
- player_id :: player:id(),
+ player_id :: bm_player:id(),
session_token :: binary(),
battle_id :: binary()
}
@@ -19,7 +19,7 @@
(
query_state,
{
- battle :: battle:type()
+ battle :: bm_battle:type()
}
).
@@ -68,17 +68,20 @@ generate_reply (QueryState, Input) ->
jiffy:encode
(
[
- set_timeline:generate(battle:get_encoded_last_turns_effects(Battle)),
- set_map:generate(battle:get_battlemap(Battle))
+ bm_set_timeline:generate
+ (
+ bm_battle:get_encoded_last_turns_effects(Battle)
+ ),
+ bm_set_map:generate(bm_battle:get_battlemap(Battle))
|
array:sparse_to_list
(
array:map
(
fun (IX, Character) ->
- add_char:generate(IX, Character, PlayerID)
+ bm_add_char:generate(IX, Character, PlayerID)
end,
- battle:get_characters(Battle)
+ bm_battle:get_characters(Battle)
)
)
]
@@ -87,10 +90,14 @@ generate_reply (QueryState, Input) ->
-spec handle (binary()) -> binary().
handle (Req) ->
Input = parse_input(Req),
- security:assert_identity(Input#input.player_id, Input#input.session_token),
- security:lock_queries(Input#input.player_id),
+ bm_security:assert_identity
+ (
+ Input#input.player_id,
+ Input#input.session_token
+ ),
+ bm_security:lock_queries(Input#input.player_id),
QueryState = fetch_data(Input),
- security:unlock_queries(Input#input.player_id),
+ bm_security:unlock_queries(Input#input.player_id),
generate_reply(QueryState, Input).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/src/battlemap/src/reply/add_char.erl b/src/battlemap/reply/add_char.erl
index 86b1e9c..86b1e9c 100644
--- a/src/battlemap/src/reply/add_char.erl
+++ b/src/battlemap/reply/add_char.erl
diff --git a/src/battlemap/src/reply/set_map.erl b/src/battlemap/reply/set_map.erl
index 8518ac5..8518ac5 100644
--- a/src/battlemap/src/reply/set_map.erl
+++ b/src/battlemap/reply/set_map.erl
diff --git a/src/battlemap/src/reply/set_timeline.erl b/src/battlemap/reply/set_timeline.erl
index bfe621a..bfe621a 100644
--- a/src/battlemap/src/reply/set_timeline.erl
+++ b/src/battlemap/reply/set_timeline.erl
diff --git a/src/battlemap/src/reply/turn_results.erl b/src/battlemap/reply/turn_results.erl
index 0f3ff25..0f3ff25 100644
--- a/src/battlemap/src/reply/turn_results.erl
+++ b/src/battlemap/reply/turn_results.erl
diff --git a/src/battlemap/src/io/timed_cache.erl b/src/battlemap/src/io/timed_cache.erl
deleted file mode 100644
index 52b98d6..0000000
--- a/src/battlemap/src/io/timed_cache.erl
+++ /dev/null
@@ -1,130 +0,0 @@
--module(timed_cache).
--behavior(gen_server).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% 'gen_server' Exports
--export
-(
- [
- init/1,
- handle_cast/2,
- handle_call/3, %% No reply will ever be given.
- terminate/2,
- code_change/3,
- format_status/2,
- handle_info/2
- ]
-).
-
-%%%% Actual Interface
--export
-(
- [
- fetch/3,
- update/4,
- invalidate/3
- ]
-).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec add_to_cache (atom(), any(), any()) -> any().
-add_to_cache (DB, Owner, ObjectID) ->
- {ok, TimerPID} = gen_server:start(?MODULE, {DB, {Owner, ObjectID}}, []),
- {ok, Data} = database_shim:fetch(DB, ObjectID),
- ets:insert(DB, {{Owner, ObjectID}, TimerPID, Data}),
- Data.
-
--spec add_update_to_cache (atom(), any(), any(), any()) -> 'ok'.
-add_update_to_cache (DB, Owner, ObjectID, Data) ->
- {ok, TimerPID} = gen_server:start(?MODULE, {DB, {Owner, ObjectID}}, []),
- ets:insert(DB, {{Owner, ObjectID}, TimerPID, Data}),
- ok.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% 'gen_server' functions
-init ({DB, ObjectID}) ->
- io:format("~nCache entry added: ~p.~n", [{DB, ObjectID}]),
- {ok, {DB, ObjectID}, timed_caches_manager:get_timeout()}.
-
-handle_call (invalidate, _, State) ->
- {stop, normal, State};
-handle_call (ping, _, State) ->
- {noreply, State, timed_caches_manager:get_timeout()}.
-
-handle_cast (invalidate, State) ->
- {stop, normal, State};
-handle_cast (ping, State) ->
- {noreply, State, timed_caches_manager:get_timeout()}.
-
-terminate (_, {DB, ObjectID}) ->
- io:format
- (
- "~nCache entry timed out or was invalidated: ~p.~n",
- [{DB, ObjectID}]
- ),
- ets:delete(DB, ObjectID).
-
-code_change (_, State, _) ->
- {ok, State}.
-
-format_status (_, [_, State]) ->
- [{data, [{"State", State}]}].
-
-handle_info(timeout, State) ->
- {stop, normal, State};
-handle_info(_, {DB, ObjectID}) ->
- {noreply, {DB, ObjectID}, timed_caches_manager:get_timeout()}.
-
-%%%% Interface Functions
--spec fetch (atom(), any(), any()) -> any().
-fetch (DB, Owner, ObjectID) ->
- io:format("~nfetch from cache: ~p.~n", [{DB, {Owner, ObjectID}}]),
- case ets:lookup(DB, {Owner, ObjectID}) of
- [] -> add_to_cache(DB, Owner, ObjectID);
-
- [{_, TimerPID, Data}] ->
- gen_server:cast(TimerPID, ping),
- Data
- end.
-
--spec update (atom(), any(), any(), any()) -> 'ok'.
-update (DB, Owner, ObjectID, Data) ->
- io:format("~nUpdating cache: ~p.~n", [{DB, {Owner, ObjectID}}]),
- case ets:lookup(DB, {Owner, ObjectID}) of
- [] -> ok;
-
- [{_OwnerID, TimerPID, _Data}] ->
- gen_server:stop(TimerPID)
- end,
- add_update_to_cache(DB, Owner, ObjectID, Data).
-
--spec invalidate (atom(), any(), any()) -> 'ok'.
-invalidate (DB, Owner, ObjectID) ->
- case ets:lookup(DB, {Owner, ObjectID}) of
- [] ->
- io:format
- (
- "~nInvalidation request on non-stored entry: ~p.~n",
- [{DB, Owner, ObjectID}]
- ),
- ok;
-
- [{_, TimerPID, _}] ->
- io:format
- (
- "~nInvalidation request on stored entry: ~p.~n",
- [{DB, Owner, ObjectID}]
- ),
- gen_server:stop(TimerPID),
- ok
- end.
diff --git a/src/battlemap/src/io/timed_caches_manager.erl b/src/battlemap/src/io/timed_caches_manager.erl
deleted file mode 100644
index 5901964..0000000
--- a/src/battlemap/src/io/timed_caches_manager.erl
+++ /dev/null
@@ -1,152 +0,0 @@
--module(timed_caches_manager).
--behavior(gen_server).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% 'gen_server' Exports
--export(
- [
- init/1,
- handle_cast/2,
- handle_call/3,
- terminate/2,
- code_change/3,
- format_status/2,
- handle_info/2
- ]
-).
-
-%%%% Actual Interface
--export(
- [
- start/0,
- new_cache/3,
- delete_cache/2,
- get_timeout/0
- ]
-)
-.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-remove_cache (DB) ->
- ets:delete(DB).
-
-add_cache (DB, none) ->
- io:format("~nTimed Caches Manager added a new cache. ~n"),
- ets:new(
- DB,
- [
- set,
- public,
- named_table,
- {keypos, 1},
- {read_concurrency, true},
- {heir, none}
- ]
- );
-add_cache (DB, Heir) ->
- io:format("~nTimed Caches Manager added a new cache. ~n"),
- ets:new(
- DB,
- [
- set,
- public,
- named_table,
- {keypos, 1},
- {read_concurrency, true},
- {heir, Heir, DB}
- ]
- ).
-
-inherit_cache (CacheList, DB, Heir) ->
- case lists:member(DB, CacheList) of
- true ->
- ets:setopts(DB, {heir, Heir, DB}),
- CacheList;
-
- false ->
- [DB|CacheList]
- end.
-
-remove_cache (CacheList, DB) ->
- case lists:member(DB, CacheList) of
- true ->
- remove_cache(DB),
- lists:delete(DB, CacheList);
- false ->
- CacheList
- end.
-
-add_cache (CacheList, DB, Heir) ->
- case lists:member(DB, CacheList) of
- true when (Heir =:= none) ->
- CacheList;
-
- true ->
- ets:setopts(DB, {heir, Heir, DB}),
- CacheList;
-
- false ->
- add_cache(DB, Heir),
- [DB|CacheList]
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% 'gen_server' functions
-init (CacheList) ->
- io:format("~nStarting Timed Caches Manager..."),
- {ok, CacheList}.
-
-handle_call ({remove, CacheName}, _Caller, State) ->
- {noreply, remove_cache(State, CacheName)};
-handle_call ({add, CacheName, Heir}, _Caller, State)->
- {noreply, add_cache(State, CacheName, Heir)};
-handle_call ({inherit, CacheName, Heir}, _Caller, State)->
- {noreply, inherit_cache(State, CacheName, Heir)};
-handle_call (terminate, _, State) ->
- {stop, normal, State}.
-
-handle_cast ({remove, CacheName}, State) ->
- {noreply, remove_cache(State, CacheName)};
-handle_cast ({add, CacheName, Heir}, State)->
- {noreply, add_cache(State, CacheName, Heir)};
-handle_cast ({inherit, CacheName, Heir}, State)->
- {noreply, inherit_cache(State, CacheName, Heir)};
-handle_cast (terminate, State) ->
- {stop, normal, State}.
-
-terminate (_Reason, []) ->
- ok;
-terminate (Reason, [CacheName|OtherCaches]) ->
- remove_cache(CacheName),
- terminate(Reason, OtherCaches).
-
-code_change (_, State, _) ->
- {ok, State}.
-
-format_status (_, [_, State]) ->
- [{data, [{"State", State}]}].
-
-handle_info(_, State) ->
- {noreply, State}.
-
-%%%% Interface Functions
-start () ->
- gen_server:start(timed_caches_manager, [], []).
-
-new_cache (ManagerPid, DB, Heir) ->
- gen_server:cast(ManagerPid, {add, DB, Heir}).
-
-delete_cache (ManagerPid, DB) ->
- gen_server:cast(ManagerPid, {remove, DB}).
-
-get_timeout () ->
- 120000. % 2min.
diff --git a/src/battlemap/src/query/character_turn.erl b/src/battlemap/src/query/character_turn.erl
deleted file mode 100644
index a10cda7..0000000
--- a/src/battlemap/src/query/character_turn.erl
+++ /dev/null
@@ -1,255 +0,0 @@
--module(character_turn).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--include("../../include/yaws_api.hrl").
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export([out/1]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%-spec send_to_database (list(database_diff:type()), character_turn_request:type()) -> 'ok'.
-
-
-%%%% REQUEST DECODING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec decode_request (binary()) -> character_turn_request:type().
-decode_request (BinaryRequest) ->
- JSONMap = jiffy:decode(BinaryRequest, [return_maps]),
-
- character_turn_request:decode(JSONMap).
-
-%%%% USER AUTHENTICATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec authenticate_user (character_turn_request:type()) -> 'ok'.
-authenticate_user (Request) ->
- PlayerID = character_turn_request:get_player_id(Request),
- SessionToken = character_turn_request:get_session_token(Request),
-
- security:assert_identity(PlayerID, SessionToken),
- security:lock_queries(PlayerID),
-
- ok.
-
-%%%% MAIN LOGIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec fetch_data (character_turn_request:type()) -> character_turn_data:type().
-fetch_data (Request) ->
- PlayerID = character_turn_request:get_player_id(Request),
- BattleID = character_turn_request:get_battle_id(Request),
- CharacterIX =
- character_turn_request:get_character_ix(Request),
-
- Battle = timed_cache:fetch(battle_db, PlayerID, BattleID),
-
- character_turn_data:new(Battle, CharacterIX).
-
-%%%% ASSERTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec assert_user_is_current_player
- (
- character_turn_data:type(),
- character_turn_request:type()
- ) -> 'ok'.
-assert_user_is_current_player (Data, Request) ->
- PlayerID = character_turn_request:get_player_id(Request),
- Battle = character_turn_data:get_battle(Data),
- CurrentPlayerTurn = battle:get_current_player_turn(Battle),
- CurrentPlayerIX = player_turn:get_player_ix(CurrentPlayerTurn),
- CurrentPlayer = battle:get_player(CurrentPlayerIX, Battle),
-
- true = (PlayerID == player:get_id(CurrentPlayer)),
-
- ok.
-
--spec assert_user_owns_played_character
- (
- character_turn_data:type(),
- character_turn_request:type()
- ) -> 'ok'.
-assert_user_owns_played_character (Data, Request) ->
- PlayerID = character_turn_request:get_player_id(Request),
- Character = character_turn_data:get_character(Data),
- CharacterOwnerID = character:get_owner_id(Character),
-
- true = (PlayerID == CharacterOwnerID),
-
- ok.
-
--spec assert_character_can_be_played (character_turn_data:type()) -> 'ok'.
-assert_character_can_be_played (Data) ->
- Character = character_turn_data:get_character(Data),
-
- true = character:get_is_active(Character),
-
- ok.
-
--spec assert_user_permissions
- (
- character_turn_data:type(),
- character_turn_request:type()
- ) -> 'ok'.
-assert_user_permissions (Data, Request) ->
- assert_user_is_current_player(Data, Request),
- assert_user_owns_played_character(Data, Request),
- assert_character_can_be_played(Data),
-
- ok.
-
-%%%% QUERY LOGIC HANDLING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec finalize_character
- (
- character_turn_update:type()
- )
- -> character_turn_update:type().
-finalize_character (Update) ->
- Data = character_turn_update:get_data(Update),
- Character = character_turn_data:get_character(Data),
-
- DisabledCharacter =
- character:set_is_active(false, Character),
-
- UpdatedData =
- character_turn_data:set_character
- (
- DisabledCharacter,
- Data
- ),
- FinalizedData = character_turn_data:clean_battle(UpdatedData),
-
- character_turn_update:set_data(FinalizedData, Update).
-
--spec handle_actions
- (
- character_turn_data:type(),
- character_turn_request:type()
- )
- -> character_turn_update:type().
-handle_actions (Data, Request) ->
- Actions = character_turn_request:get_actions(Request),
-
- EmptyUpdate = character_turn_update:new(Data),
- PostActionsUpdate =
- lists:foldl(fun turn_actions:handle/2, EmptyUpdate, Actions),
-
- finalize_character(PostActionsUpdate).
-
--spec update_timeline
- (
- character_turn_update:type()
- )
- -> character_turn_update:type().
-update_timeline (Update) ->
- NewTimelineElements = character_turn_update:get_timeline(Update),
- Data = character_turn_update:get_data(Update),
- Battle = character_turn_data:get_battle(Data),
- PlayerTurn = battle:get_current_player_turn(Battle),
- PlayerIX = player_turn:get_player_ix(PlayerTurn),
- Player = battle:get_player(PlayerIX, Battle),
-
- UpdatedPlayer = player:add_to_timeline(NewTimelineElements, Player),
- UpdatedBattle = battle:set_player(PlayerIX, UpdatedPlayer, Battle),
- UpdatedData = character_turn_data:set_battle(UpdatedBattle, Data),
-
- character_turn_update:set_data(UpdatedData, Update).
-
--spec update_data
- (
- character_turn_data:type(),
- character_turn_request:type()
- )
- -> character_turn_update:type().
-update_data (Data, Request) ->
- PostActionsUpdate = handle_actions(Data, Request),
- PostCharacterTurnUpdate = update_timeline(PostActionsUpdate),
-
- next_turn:update_if_needed(PostCharacterTurnUpdate).
-
-%%%% DATABASE UPDATES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec send_to_database
- (
- character_turn_update:type(),
- character_turn_request:type()
- )
- -> 'ok'.
-send_to_database (Update, Request) ->
- PlayerID = character_turn_request:get_player_id(Request),
- BattleID = character_turn_request:get_battle_id(Request),
- Ops = character_turn_update:get_db(Update),
- Query = db_query:new(battle_db, BattleID, {user, PlayerID}, Ops),
-
- % TODO: send queries to an actual DB...
-
- database_shim:commit(Query),
-
- ok.
-
--spec send_to_cache
- (
- character_turn_update:type(),
- character_turn_request:type()
- )
- -> 'ok'.
-send_to_cache (Update, Request) ->
- PlayerID = character_turn_request:get_player_id(Request),
- BattleID = character_turn_request:get_battle_id(Request),
- Data = character_turn_update:get_data(Update),
- Battle = character_turn_data:get_battle(Data),
-
- timed_cache:update(battle_db, PlayerID, BattleID, Battle),
-
- ok.
-
--spec commit_update
- (
- character_turn_update:type(),
- character_turn_request:type()
- )
- -> 'ok'.
-commit_update (Update, Request) ->
- send_to_database(Update, Request),
- send_to_cache(Update, Request),
-
- ok.
-
-%%%% USER DISCONNECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec disconnect_user (character_turn_request:type()) -> 'ok'.
-disconnect_user (Request) ->
- PlayerID = character_turn_request:get_player_id(Request),
-
- security:unlock_queries(PlayerID),
-
- ok.
-
-%%%% REPLY GENERATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec generate_reply (character_turn_update:type()) -> binary().
-generate_reply (Update) ->
- NewTimelineItems = character_turn_update:get_timeline(Update),
-
- TurnResultReply = turn_results:generate(NewTimelineItems),
-
- jiffy:encode([TurnResultReply]).
-
-%%%% MAIN LOGIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec handle (binary()) -> binary().
-handle (EncodedRequest) ->
- Request = decode_request(EncodedRequest),
- authenticate_user(Request),
- Data = fetch_data(Request),
- assert_user_permissions(Data, Request),
- Update = update_data(Data, Request),
- commit_update(Update, Request),
- disconnect_user(Request),
- generate_reply(Update).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-out(A) ->
- {
- content,
- "application/json; charset=UTF-8",
- handle(A#arg.clidata)
- }.
diff --git a/src/battlemap/src/shim/database_shim.erl b/src/battlemap/src/shim/database_shim.erl
deleted file mode 100644
index c64105d..0000000
--- a/src/battlemap/src/shim/database_shim.erl
+++ /dev/null
@@ -1,137 +0,0 @@
--module(database_shim).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export
-(
- [
- generate_db/0,
- fetch/2,
- commit/1
- ]
-).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-get_db_node () ->
- list_to_atom("db_node@" ++ net_adm:localhost()).
-
--spec generate_random_characters
- (
- non_neg_integer(),
- non_neg_integer(),
- non_neg_integer(),
- non_neg_integer(),
- battlemap:type(),
- list(location:type()),
- list(character:type())
- )
- -> list(character:type()).
-generate_random_characters
-(
- 0,
- 0,
- _CharactersPerPlayer,
- _TotalCharacterCount,
- _Battlemap,
- _ForbiddenLocations,
- Result
-) ->
- Result;
-generate_random_characters
-(
- MaxPlayerID,
- 0,
- CharactersPerPlayer,
- TotalCharacterCount,
- Battlemap,
- ForbiddenLocations,
- Result
-) ->
- generate_random_characters
- (
- (MaxPlayerID - 1),
- CharactersPerPlayer,
- CharactersPerPlayer,
- TotalCharacterCount,
- Battlemap,
- ForbiddenLocations,
- Result
- );
-generate_random_characters
-(
- MaxPlayerID,
- PlayerCharacterCount,
- CharactersPerPlayer,
- TotalCharacterCount,
- Battlemap,
- ForbiddenLocations,
- Result
-) ->
- NewCharacter =
- character:random
- (
- TotalCharacterCount,
- list_to_binary(integer_to_list(MaxPlayerID)),
- battlemap:get_width(Battlemap),
- battlemap:get_height(Battlemap),
- ForbiddenLocations
- ),
- Character =
- case MaxPlayerID of
- 0 -> character:set_is_active(true, NewCharacter);
- _ -> NewCharacter
- end,
-
- generate_random_characters
- (
- MaxPlayerID,
- (PlayerCharacterCount - 1),
- CharactersPerPlayer,
- (TotalCharacterCount + 1),
- Battlemap,
- [character:get_location(Character)|ForbiddenLocations],
- [Character|Result]
- ).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec generate_db () -> 'ok'.
-generate_db () ->
- BattlemapWidth = roll:between(16, 64),
- BattlemapHeight = roll:between(16, 64),
- Battlemap = battlemap:random(0, BattlemapWidth, BattlemapHeight),
- Characters = generate_random_characters(1, 8, 8, 0, Battlemap, [], []),
- PlayersAsList = [player:new(<<"0">>), player:new(<<"1">>)],
- Battle = battle:new(<<"0">>, PlayersAsList, Battlemap, Characters),
-
- {atomic, ok} =
- rpc:call
- (
- get_db_node(),
- storage_access,
- insert,
- [battle_db, <<"0">>, any, Battle]
- ),
-
- ok.
-
--spec fetch (atom(), any()) -> ({'ok', any()} | 'not_found').
-fetch (DB, ObjectID) ->
- {atomic, Reply} =
- rpc:call(get_db_node(), storage_access, read, [DB, ObjectID]),
- io:format("~ndb_shim:fetch(~p) -> ~p.~n", [{DB, ObjectID}, Reply]),
- Reply.
-
--spec commit (db_query:type()) -> 'ok'.
-commit (Query) ->
- {atomic, ok} = rpc:call(get_db_node(), storage_access, query, [Query]),
- io:format("~ndb_shim:commit(~p) -> ok.~n", [Query]),
- ok.
diff --git a/src/battlemap/src/struct/attributes.erl b/src/battlemap/src/struct/attributes.erl
deleted file mode 100644
index aca91d3..0000000
--- a/src/battlemap/src/struct/attributes.erl
+++ /dev/null
@@ -1,108 +0,0 @@
--module(attributes).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--record
-(
- attributes,
- {
- constitution :: integer(),
- dexterity :: integer(),
- intelligence :: integer(),
- mind :: integer(),
- speed :: integer(),
- strength :: integer()
- }
-).
-
--opaque type() :: #attributes{}.
-
--export_type([type/0]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% Accessors
--export
-(
- [
- get_constitution/1,
- get_dexterity/1,
- get_intelligence/1,
- get_mind/1,
- get_speed/1,
- get_strength/1,
-
- set_constitution/2,
- set_dexterity/2,
- set_intelligence/2,
- set_mind/2,
- set_speed/2,
- set_strength/2
- ]
-).
-
-%%%% Accessors
--export
-(
- [
- random/0
- ]
-).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% Accessors
--spec get_constitution (type()) -> integer().
-get_constitution (Att) -> Att#attributes.constitution.
-
--spec get_dexterity (type()) -> integer().
-get_dexterity (Att) -> Att#attributes.dexterity.
-
--spec get_intelligence (type()) -> integer().
-get_intelligence (Att) -> Att#attributes.intelligence.
-
--spec get_mind (type()) -> integer().
-get_mind (Att) -> Att#attributes.mind.
-
--spec get_speed (type()) -> integer().
-get_speed (Att) -> Att#attributes.speed.
-
--spec get_strength (type()) -> integer().
-get_strength (Att) -> Att#attributes.strength.
-
--spec set_constitution (integer(), type()) -> type().
-set_constitution (Val, Att) -> Att#attributes{ constitution = Val }.
-
--spec set_dexterity (integer(), type()) -> type().
-set_dexterity (Val, Att) -> Att#attributes{ dexterity = Val }.
-
--spec set_intelligence (integer(), type()) -> type().
-set_intelligence (Val, Att) -> Att#attributes{ intelligence = Val }.
-
--spec set_mind (integer(), type()) -> type().
-set_mind (Val, Att) -> Att#attributes{ mind = Val }.
-
--spec set_speed (integer(), type()) -> type().
-set_speed (Val, Att) -> Att#attributes{ speed = Val }.
-
--spec set_strength (integer(), type()) -> type().
-set_strength (Val, Att) -> Att#attributes{ strength = Val }.
-
--spec random () -> type().
-random () ->
- #attributes
- {
- constitution = roll:percentage(),
- dexterity = roll:percentage(),
- intelligence = roll:percentage(),
- mind = roll:percentage(),
- speed = roll:percentage(),
- strength = roll:percentage()
- }.
diff --git a/src/battlemap/src/struct/db_query.erl b/src/battlemap/src/struct/db_query.erl
deleted file mode 100644
index 5d1e8d2..0000000
--- a/src/battlemap/src/struct/db_query.erl
+++ /dev/null
@@ -1,59 +0,0 @@
--module(db_query).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--include("../../../db/include/db_query.hrl").
-
--opaque op() :: db_query_op().
--opaque type() :: db_query().
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export_type([type/0, op/0]).
-
--export
-(
- [
- new/4,
- set_field/2,
- add_to_field/2,
- update_indexed/3
- ]
-).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec new (atom(), any(), db_user:user(), list(op())) -> type().
-new (DBName, ObjectID, User, Ops) ->
- #db_query
- {
- db = DBName,
- id = ObjectID,
- user = User,
- ops = Ops
- }.
-
--spec set_field (non_neg_integer(), any()) -> op().
-set_field (Field, Value) ->
- #set_field { field = Field, value = Value }.
-
--spec add_to_field (non_neg_integer(), list(any())) -> op().
-add_to_field (Field, Values) ->
- #add_to_field { field = Field, values = Values }.
-
--spec update_indexed
- (
- non_neg_integer(),
- non_neg_integer(),
- list(op())
- )
- -> op().
-update_indexed (Field, IX, Updates) ->
- #update_indexed { field = Field, ix = IX, ops = Updates}.
diff --git a/src/battlemap/src/struct/statistics.erl b/src/battlemap/src/struct/statistics.erl
deleted file mode 100644
index 3406d9a..0000000
--- a/src/battlemap/src/struct/statistics.erl
+++ /dev/null
@@ -1,193 +0,0 @@
--module(statistics).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--record
-(
- statistics,
- {
- movement_points :: non_neg_integer(),
- health :: non_neg_integer(),
- dodges :: non_neg_integer(),
- parries :: non_neg_integer(),
- damage_min :: non_neg_integer(),
- damage_max :: non_neg_integer(),
- accuracy :: non_neg_integer(),
- double_hits :: non_neg_integer(),
- critical_hits :: non_neg_integer()
- }
-).
-
--opaque type() :: #statistics{}.
-
--export_type([type/0]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% Accessors
--export
-(
- [
- get_movement_points/1,
- get_health/1,
- get_dodges/1,
- get_parries/1,
- get_damage_min/1,
- get_damage_max/1,
- get_accuracy/1,
- get_double_hits/1,
- get_critical_hits/1,
-
- get_damages/1
- ]
-).
-
--export
-(
- [
- new/2
- ]
-).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec ceil (float()) -> integer().
-ceil (F) ->
- I = trunc(F),
- case (F > I) of
- true -> (I + 1);
- _ -> I
- end.
-
--spec float_to_int (float()) -> integer().
-float_to_int (F) -> ceil(F).
-
--spec min_max (number(), number(), number()) -> number().
-min_max (Min, Max, V) -> min(Max, max(Min, V)).
-
--spec average (list(number())) -> number().
-%average ([]) -> 0;
-average (L) -> lists:sum(L) / length(L).
-
-% V | 010 | 030 | 050 | 070 | 100 |
-% F | 004 | 023 | 058 | 104 | 200 |
--spec gentle_squared_growth (number()) -> non_neg_integer().
-gentle_squared_growth (V) -> float_to_int(math:pow(V, 1.8) / 20).
-
-% V | 010 | 030 | 050 | 070 | 100 |
-% F | 001 | 005 | 018 | 041 | 100 |
--spec sudden_squared_growth (number()) -> non_neg_integer().
-sudden_squared_growth (V) -> float_to_int(math:pow(V, 2.5) / 1000).
-
-% V | 010 | 030 | 050 | 070 | 100 |
-% F | 002 | 006 | 016 | 049 | 256 |
--spec sudden_exp_growth (number()) -> non_neg_integer().
-sudden_exp_growth (V) -> float_to_int(math:pow(4, V / 25)).
-
-% V | 010 | 030 | 050 | 070 | 100 |
-% F | 040 | 066 | 079 | 088 | 099 |
-% Seems too generous, values for attributes below 50 should dip faster and
-% lower.
-%-spec already_high_slow_growth (non_neg_integer()) -> non_neg_integer().
-%already_high_slow_growth (V) -> float_to_int(30 * math:log((V + 5)/4)).
-
--spec damage_base_modifier (non_neg_integer()) -> float().
-damage_base_modifier (Strength) -> ((math:pow(Strength, 1.8) / 2000.0) - 0.75).
-
--spec apply_damage_base_modifier
- (
- float(),
- non_neg_integer()
- )
- -> non_neg_integer().
-apply_damage_base_modifier (Modifier, BaseValue) ->
- max(0, float_to_int(BaseValue + (BaseValue * Modifier))).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% Accessors
--spec get_movement_points (type()) -> non_neg_integer().
-get_movement_points (Stats) -> Stats#statistics.movement_points.
-
--spec get_health (type()) -> non_neg_integer().
-get_health (Stats) -> Stats#statistics.health.
-
--spec get_dodges (type()) -> non_neg_integer().
-get_dodges (Stats) -> Stats#statistics.dodges.
-
--spec get_parries (type()) -> non_neg_integer().
-get_parries (Stats) -> Stats#statistics.parries.
-
--spec get_damage_min (type()) -> non_neg_integer().
-get_damage_min (Stats) -> Stats#statistics.damage_min.
-
--spec get_damage_max (type()) -> non_neg_integer().
-get_damage_max (Stats) -> Stats#statistics.damage_max.
-
--spec get_accuracy (type()) -> non_neg_integer().
-get_accuracy (Stats) -> Stats#statistics.accuracy.
-
--spec get_double_hits (type()) -> non_neg_integer().
-get_double_hits (Stats) -> Stats#statistics.double_hits.
-
--spec get_critical_hits (type()) -> non_neg_integer().
-get_critical_hits (Stats) -> Stats#statistics.critical_hits.
-
--spec get_damages (type()) -> {non_neg_integer(), non_neg_integer()}.
-get_damages (Stats) ->
- {
- Stats#statistics.damage_min,
- Stats#statistics.damage_max
- }.
-
--spec new
- (
- attributes:type(),
- {weapon:id(), weapon:id()}
- )
- -> type().
-new (BaseAttributes, WeaponIDs) ->
- {ActiveWeaponID, _} = WeaponIDs,
- ActiveWeapon = weapon:from_id(ActiveWeaponID),
- {MinDamage, MaxDamage} = weapon:get_damages(ActiveWeapon),
- Attributes = weapon:apply_to_attributes(BaseAttributes, ActiveWeapon),
- Constitution = attributes:get_constitution(Attributes),
- Dexterity = attributes:get_dexterity(Attributes),
- Intelligence = attributes:get_intelligence(Attributes),
- Mind = attributes:get_mind(Attributes),
- Speed = attributes:get_speed(Attributes),
- Strength = attributes:get_strength(Attributes),
- DamageBaseModifier = damage_base_modifier(Strength),
-
- #statistics
- {
- movement_points =
- gentle_squared_growth
- (
- average([Mind, Constitution, Constitution, Speed, Speed, Speed])
- ),
- health =
- gentle_squared_growth(average([Mind, Constitution, Constitution])),
- dodges =
- min_max(0, 100, sudden_exp_growth(average([Dexterity, Mind, Speed]))),
- parries =
- min_max
- (
- 0,
- 75,
- sudden_exp_growth
- (
- average([Dexterity, Intelligence, Speed, Strength])
- )
- ),
- damage_min = apply_damage_base_modifier(DamageBaseModifier, MinDamage),
- damage_max = apply_damage_base_modifier(DamageBaseModifier, MaxDamage),
- accuracy = min_max(0, 100, sudden_squared_growth(Dexterity)),
- double_hits =
- min_max(0, 100, sudden_squared_growth(average([Mind, Speed]))),
- critical_hits = min_max(0, 100, sudden_squared_growth(Intelligence))
- }.
diff --git a/src/battlemap/src/struct/attack.erl b/src/battlemap/struct/bm_attack.erl
index fed6a56..fe7d8b8 100644
--- a/src/battlemap/src/struct/attack.erl
+++ b/src/battlemap/struct/bm_attack.erl
@@ -1,4 +1,4 @@
--module(attack).
+-module(bm_attack).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -47,15 +47,15 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec roll_precision
(
- statistics:type(),
- statistics:type()
+ bm_statistics:type(),
+ bm_statistics:type()
)
-> precision().
roll_precision (AttackerStatistics, DefenderStatistics) ->
- DefenderDodges = statistics:get_dodges(DefenderStatistics),
- AttackerAccuracy = statistics:get_accuracy(AttackerStatistics),
+ DefenderDodges = bm_statistics:get_dodges(DefenderStatistics),
+ AttackerAccuracy = bm_statistics:get_accuracy(AttackerStatistics),
MissChance = max(0, (DefenderDodges - AttackerAccuracy)),
- case roll:percentage() of
+ case sh_roll:percentage() of
X when (X =< MissChance) -> misses;
X when (X =< (MissChance * 2)) -> grazes;
_ -> hits
@@ -63,30 +63,31 @@ roll_precision (AttackerStatistics, DefenderStatistics) ->
-spec roll_damage
(
- statistics:type(),
- statistics:type()
+ bm_statistics:type(),
+ bm_statistics:type()
)
-> {non_neg_integer(), boolean()}.
roll_damage (AttackerStatistics, _DefenderStatistics) ->
- {MinimumDamage, MaximumDamage} = statistics:get_damages(AttackerStatistics),
+ {MinimumDamage, MaximumDamage} =
+ bm_statistics:get_damages(AttackerStatistics),
MaximumRoll = max(1, MaximumDamage - MinimumDamage),
BaseDamage = MinimumDamage + (rand:uniform(MaximumRoll) - 1),
- CriticalHitChance = statistics:get_critical_hits(AttackerStatistics),
- case roll:percentage() of
+ CriticalHitChance = bm_statistics:get_critical_hits(AttackerStatistics),
+ case sh_roll:percentage() of
X when (X =< CriticalHitChance) -> {(BaseDamage * 2), true};
_ -> {BaseDamage, false}
end.
--spec roll_parry (statistics:type()) -> boolean().
+-spec roll_parry (bm_statistics:type()) -> boolean().
roll_parry (DefenderStatistics) ->
- DefenderParryChance = statistics:get_parries(DefenderStatistics),
- (roll:percentage() =< DefenderParryChance).
+ DefenderParryChance = bm_statistics:get_parries(DefenderStatistics),
+ (sh_roll:percentage() =< DefenderParryChance).
-spec effect_of_attack
(
order(),
- statistics:type(),
- statistics:type(),
+ bm_statistics:type(),
+ bm_statistics:type(),
boolean()
)
-> type().
@@ -133,8 +134,8 @@ encode_precision (misses) -> <<"m">>.
-spec get_description_of
(
step(),
- statistics:type(),
- statistics:type()
+ bm_statistics:type(),
+ bm_statistics:type()
)
-> maybe_type().
get_description_of
@@ -150,9 +151,10 @@ get_description_of
AttackerStatistics,
DefenderStatistics
) ->
- AttackerDoubleAttackChange = statistics:get_double_hits(AttackerStatistics),
+ AttackerDoubleAttackChange =
+ bm_statistics:get_double_hits(AttackerStatistics),
- case roll:percentage() of
+ case sh_roll:percentage() of
X when (X =< AttackerDoubleAttackChange) ->
effect_of_attack
(
@@ -244,15 +246,15 @@ when
-spec get_sequence
(
non_neg_integer(),
- weapon:type(),
- weapon:type()
+ bm_weapon:type(),
+ bm_weapon:type()
)
-> list(step()).
get_sequence (AttackRange, AttackerWeapon, DefenderWeapon) ->
{AttackerDefenseRange, AttackerAttackRange} =
- weapon:get_ranges(AttackerWeapon),
+ bm_weapon:get_ranges(AttackerWeapon),
{DefenderDefenseRange, DefenderAttackRange} =
- weapon:get_ranges(DefenderWeapon),
+ bm_weapon:get_ranges(DefenderWeapon),
AttackerCanAttack = (AttackRange =< AttackerAttackRange),
AttackerCanAttack = true,
@@ -280,7 +282,6 @@ get_sequence (AttackRange, AttackerWeapon, DefenderWeapon) ->
end.
-spec encode (type()) -> {list(any())}.
-% This shouldn't be a possibility. Types in this module are a mess...
encode (Attack) ->
Order = Attack#attack.order,
Precision = Attack#attack.precision,
diff --git a/src/battlemap/src/struct/battle.erl b/src/battlemap/struct/bm_battle.erl
index 6a76975..08c4943 100644
--- a/src/battlemap/src/struct/battle.erl
+++ b/src/battlemap/struct/bm_battle.erl
@@ -1,4 +1,4 @@
--module(battle).
+-module(bm_battle).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -10,10 +10,10 @@
battle,
{
id :: id(),
- battlemap :: battlemap:type(),
- characters :: array:array(character:type()),
- players :: array:array(player:type()),
- current_player_turn :: player_turn:type()
+ battlemap :: bm_battlemap:type(),
+ characters :: array:array(bm_character:type()),
+ players :: array:array(bm_player:type()),
+ current_player_turn :: bm_player_turn:type()
}
).
@@ -62,7 +62,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
get_all_timelines (Result, CurrentIndex, EndPoint, ArraySize, Players) ->
Player = array:get(CurrentIndex, Players),
- Timeline = player:get_timeline(Player),
+ Timeline = bm_player:get_timeline(Player),
NextIndex = ((CurrentIndex + 1) rem ArraySize),
NextResult = (Timeline ++ Result),
case CurrentIndex of
@@ -80,27 +80,27 @@ get_all_timelines (Result, CurrentIndex, EndPoint, ArraySize, Players) ->
-spec get_id (type()) -> id().
get_id (Battle) -> Battle#battle.id.
--spec get_battlemap (type()) -> battlemap:type().
+-spec get_battlemap (type()) -> bm_battlemap:type().
get_battlemap (Battle) ->
Battle#battle.battlemap.
--spec get_characters (type()) -> array:array(character:type()).
+-spec get_characters (type()) -> array:array(bm_character:type()).
get_characters (Battle) ->
Battle#battle.characters.
--spec get_character (non_neg_integer(), type()) -> character:type().
+-spec get_character (non_neg_integer(), type()) -> bm_character:type().
get_character (IX, Battle) ->
array:get(IX, Battle#battle.characters).
--spec get_players (type()) -> array:array(player:type()).
+-spec get_players (type()) -> array:array(bm_player:type()).
get_players (Battle) ->
Battle#battle.players.
--spec get_player (non_neg_integer(), type()) -> player:type().
+-spec get_player (non_neg_integer(), type()) -> bm_player:type().
get_player (IX, Battle) ->
array:get(IX, Battle#battle.players).
--spec get_current_player_turn (type()) -> player_turn:type().
+-spec get_current_player_turn (type()) -> bm_player_turn:type().
get_current_player_turn (Battle) ->
Battle#battle.current_player_turn.
@@ -108,27 +108,27 @@ get_current_player_turn (Battle) ->
get_encoded_last_turns_effects (Battle) ->
CurrentPlayerTurn = Battle#battle.current_player_turn,
Players = Battle#battle.players,
- CurrentPlayerIX = player_turn:get_player_ix(CurrentPlayerTurn),
+ CurrentPlayerIX = bm_player_turn:get_player_ix(CurrentPlayerTurn),
PlayersCount = array:size(Players),
StartingPoint = ((CurrentPlayerIX + 1) rem PlayersCount),
get_all_timelines([], StartingPoint, CurrentPlayerIX, PlayersCount, Players).
--spec set_battlemap (battlemap:type(), type()) -> type().
+-spec set_battlemap (bm_battlemap:type(), type()) -> type().
set_battlemap (Battlemap, Battle) ->
Battle#battle
{
battlemap = Battlemap
}.
--spec set_characters (array:array(character:type()), type()) -> type().
+-spec set_characters (array:array(bm_character:type()), type()) -> type().
set_characters (Characters, Battle) ->
Battle#battle
{
characters = Characters
}.
--spec set_character (non_neg_integer(), character:type(), type()) -> type().
+-spec set_character (non_neg_integer(), bm_character:type(), type()) -> type().
set_character (IX, Character, Battle) ->
Battle#battle
{
@@ -141,14 +141,14 @@ set_character (IX, Character, Battle) ->
)
}.
--spec set_players (array:array(player:type()), type()) -> type().
+-spec set_players (array:array(bm_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(), bm_player:type(), type()) -> type().
set_player (IX, Player, Battle) ->
Battle#battle
{
@@ -161,7 +161,7 @@ set_player (IX, Player, Battle) ->
)
}.
--spec set_current_player_turn (player_turn:type(), type()) -> type().
+-spec set_current_player_turn (bm_player_turn:type(), type()) -> type().
set_current_player_turn (PlayerTurn, Battle) ->
Battle#battle
{
@@ -171,9 +171,9 @@ set_current_player_turn (PlayerTurn, Battle) ->
-spec new
(
id(),
- list(player:type()),
- battlemap:type(),
- list(character:type())
+ list(bm_player:type()),
+ bm_battlemap:type(),
+ list(bm_character:type())
)
-> type().
new (ID, PlayersAsList, Battlemap, CharactersAsList) ->
@@ -183,7 +183,7 @@ new (ID, PlayersAsList, Battlemap, CharactersAsList) ->
battlemap = Battlemap,
characters = array:from_list(CharactersAsList),
players = array:from_list(PlayersAsList),
- current_player_turn = player_turn:new(0, 0)
+ current_player_turn = bm_player_turn:new(0, 0)
}.
diff --git a/src/battlemap/src/struct/battle_action.erl b/src/battlemap/struct/bm_battle_action.erl
index 3cedfa7..abdc1c6 100644
--- a/src/battlemap/src/struct/battle_action.erl
+++ b/src/battlemap/struct/bm_battle_action.erl
@@ -1,4 +1,4 @@
--module(battle_action).
+-module(bm_battle_action).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -7,7 +7,7 @@
(
move,
{
- path :: list(direction:enum())
+ path :: list(bm_direction:enum())
}
).
@@ -57,7 +57,7 @@
-spec decode_mov_action (map()) -> type().
decode_mov_action (JSONMap) ->
PathInBinary = maps:get(<<"p">>, JSONMap),
- Path = lists:map(fun direction:decode/1, PathInBinary),
+ Path = lists:map(fun bm_direction:decode/1, PathInBinary),
#move { path = Path }.
diff --git a/src/battlemap/src/struct/battlemap.erl b/src/battlemap/struct/bm_battlemap.erl
index dc6bdc7..c3eabb0 100644
--- a/src/battlemap/src/struct/battlemap.erl
+++ b/src/battlemap/struct/bm_battlemap.erl
@@ -1,4 +1,4 @@
--module(battlemap).
+-module(bm_battlemap).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -12,7 +12,7 @@
id :: id(),
width :: integer(),
height :: integer(),
- tile_ids :: array:array(tile:id())
+ tile_ids :: array:array(bm_tile:id())
}
).
@@ -47,29 +47,29 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec generate_random_tile_ids
(
- tile:id(),
- list(tile:id()),
+ bm_tile:id(),
+ list(bm_tile:id()),
non_neg_integer(),
non_neg_integer(),
non_neg_integer()
)
- -> list(tile:id()).
+ -> list(bm_tile:id()).
generate_random_tile_ids (_PreviousTileID, Result, _X, 0, _Width) ->
Result;
generate_random_tile_ids (PreviousTileID, Result, 0, Y, Width) ->
generate_random_tile_ids(PreviousTileID, Result, Width, (Y - 1), Width);
generate_random_tile_ids (PreviousTileID, Result, X, Y, Width) ->
NewTile =
- case roll:percentage() of
+ case sh_roll:percentage() of
N when (N >= 10) -> PreviousTileID;
- _ -> tile:random_id()
+ _ -> bm_tile:random_id()
end,
generate_random_tile_ids(NewTile, [NewTile|Result], (X - 1), Y, Width).
-spec location_to_array_index
(
non_neg_integer(),
- location:type()
+ bm_location:type()
)
-> ('error' | non_neg_integer()).
location_to_array_index (ArrayWidth, {X, Y}) ->
@@ -93,10 +93,10 @@ get_width (Battlemap) -> Battlemap#battlemap.width.
-spec get_height (type()) -> integer().
get_height (Battlemap) -> Battlemap#battlemap.height.
--spec get_tile_ids (type()) -> array:array(tile:id()).
+-spec get_tile_ids (type()) -> array:array(bm_tile:id()).
get_tile_ids (Battlemap) -> Battlemap#battlemap.tile_ids.
--spec get_tile_id (location:type(), type()) -> tile:id().
+-spec get_tile_id (bm_location:type(), type()) -> bm_tile:id().
get_tile_id (Location, Battlemap) ->
TileIX = location_to_array_index(Battlemap#battlemap.width, Location),
array:get(TileIX, Battlemap#battlemap.tile_ids).
@@ -109,7 +109,7 @@ get_tile_id (Location, Battlemap) ->
)
-> type().
random (ID, Width, Height) ->
- InitialTile = tile:random_id(),
+ InitialTile = bm_tile:random_id(),
TileIDs = generate_random_tile_ids(InitialTile, [], Width, Height, Width),
#battlemap
diff --git a/src/battlemap/src/struct/character.erl b/src/battlemap/struct/bm_character.erl
index 2792da5..e797b74 100644
--- a/src/battlemap/src/struct/character.erl
+++ b/src/battlemap/struct/bm_character.erl
@@ -1,4 +1,4 @@
--module(character).
+-module(bm_character).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -10,13 +10,13 @@
character,
{
id :: id(),
- owner_id :: player:id(),
+ owner_id :: bm_player:id(),
name :: binary(),
icon :: binary(),
portrait :: binary(),
- attributes :: attributes:type(),
- statistics :: statistics:type(),
- weapon_ids :: {weapon:id(), weapon:id()},
+ attributes :: sh_attributes:type(),
+ statistics :: bm_statistics:type(),
+ weapon_ids :: {bm_weapon:id(), bm_weapon:id()},
location :: {non_neg_integer(), non_neg_integer()},
current_health :: non_neg_integer(),
active :: boolean()
@@ -102,7 +102,7 @@ find_random_location (BattlemapWidth, BattlemapHeight, ForbiddenLocations) ->
-spec get_id (type()) -> id().
get_id (Char) -> Char#character.id.
--spec get_owner_id (type()) -> player:id().
+-spec get_owner_id (type()) -> bm_player:id().
get_owner_id (Char) -> Char#character.owner_id.
-spec get_name (type()) -> binary().
@@ -114,13 +114,13 @@ get_icon (Char) -> Char#character.icon.
-spec get_portrait (type()) -> binary().
get_portrait (Char) -> Char#character.portrait.
--spec get_attributes (type()) -> attributes:type().
+-spec get_attributes (type()) -> sh_attributes:type().
get_attributes (Char) -> Char#character.attributes.
--spec get_weapon_ids (type()) -> {weapon:id(), weapon:id()}.
+-spec get_weapon_ids (type()) -> {bm_weapon:id(), bm_weapon:id()}.
get_weapon_ids (Char) -> Char#character.weapon_ids.
--spec get_statistics (type()) -> statistics:type().
+-spec get_statistics (type()) -> bm_statistics:type().
get_statistics (Char) -> Char#character.statistics.
-spec get_location (type()) -> {non_neg_integer(), non_neg_integer()}.
@@ -171,7 +171,7 @@ set_is_active (Active, Char) ->
-spec set_weapon_ids
(
- {weapon:id(), weapon:id()},
+ {bm_weapon:id(), bm_weapon:id()},
type()
)
-> type().
@@ -183,7 +183,7 @@ set_weapon_ids (WeaponIDs, Char) ->
-spec set_statistics
(
- statistics:type(),
+ bm_statistics:type(),
type()
)
-> type().
@@ -197,7 +197,7 @@ set_statistics (Stats, Char) ->
-spec random
(
non_neg_integer(),
- player:id(),
+ bm_player:id(),
non_neg_integer(),
non_neg_integer(),
list({non_neg_integer(), non_neg_integer()})
@@ -206,9 +206,9 @@ set_statistics (Stats, Char) ->
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),
+ WeaponIDs = {bm_weapon:random_id(), bm_weapon:random_id()},
+ Attributes = sh_attributes:random(),
+ Statistics = bm_statistics:new(Attributes, WeaponIDs),
IDAsListString = integer_to_list(ID),
IDAsBinaryString = list_to_binary(IDAsListString),
@@ -223,7 +223,7 @@ random (ID, OwnerID, BattlemapWidth, BattlemapHeight, ForbiddenLocations) ->
weapon_ids = WeaponIDs,
statistics = Statistics,
location = Location,
- current_health = statistics:get_health(Statistics),
+ current_health = bm_statistics:get_health(Statistics),
active = false
}.
diff --git a/src/battlemap/src/struct/character_turn_data.erl b/src/battlemap/struct/bm_character_turn_data.erl
index 6ea744b..aaf7426 100644
--- a/src/battlemap/src/struct/character_turn_data.erl
+++ b/src/battlemap/struct/bm_character_turn_data.erl
@@ -1,4 +1,4 @@
--module(character_turn_data).
+-module(bm_character_turn_data).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -8,8 +8,8 @@
type,
{
dirty :: boolean(),
- battle :: battle:type(),
- character :: character:type(),
+ battle :: bm_battle:type(),
+ character :: bm_character:type(),
character_ix :: non_neg_integer()
}
).
@@ -50,9 +50,9 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec new (battle:type(), non_neg_integer()) -> type().
+-spec new (bm_battle:type(), non_neg_integer()) -> type().
new (Battle, CharacterIX) ->
- Character = battle:get_character(CharacterIX, Battle),
+ Character = bm_battle:get_character(CharacterIX, Battle),
#type
{
@@ -65,20 +65,20 @@ new (Battle, CharacterIX) ->
-spec get_battle_is_dirty (type()) -> boolean().
get_battle_is_dirty (Data) -> Data#type.dirty.
--spec get_battle (type()) -> battle:type().
+-spec get_battle (type()) -> bm_battle:type().
get_battle (Data) -> Data#type.battle.
--spec get_character (type()) -> character:type().
+-spec get_character (type()) -> bm_character:type().
get_character (Data) -> Data#type.character.
-spec get_character_ix (type()) -> non_neg_integer().
get_character_ix (Data) -> Data#type.character_ix.
--spec set_battle (battle:type(), type()) -> type().
+-spec set_battle (bm_battle:type(), type()) -> type().
set_battle (Battle, Data) ->
Data#type{ battle = Battle }.
--spec set_character (character:type(), type()) -> type().
+-spec set_character (bm_character:type(), type()) -> type().
set_character (Character, Data) ->
Data#type
{
@@ -92,7 +92,7 @@ clean_battle (Data) ->
{
dirty = false,
battle =
- battle:set_character
+ bm_battle:set_character
(
Data#type.character_ix,
Data#type.character,
diff --git a/src/battlemap/src/struct/character_turn_request.erl b/src/battlemap/struct/bm_character_turn_request.erl
index ca8f44f..d141d7e 100644
--- a/src/battlemap/src/struct/character_turn_request.erl
+++ b/src/battlemap/struct/bm_character_turn_request.erl
@@ -1,4 +1,4 @@
--module(character_turn_request).
+-module(bm_character_turn_request).
-define(PLAYER_ID_FIELD, <<"pid">>).
-define(SESSION_TOKEN_FIELD, <<"stk">>).
@@ -13,11 +13,11 @@
(
type,
{
- player_id :: player:id(),
+ player_id :: bm_player:id(),
session_token :: binary(),
battle_id :: binary(),
character_ix :: non_neg_integer(),
- actions :: list(battle_action:type())
+ actions :: list(bm_battle_action:type())
}
).
@@ -57,7 +57,7 @@
decode (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),
+ Actions = lists:map(fun bm_battle_action:decode/1, EncodedActions),
#type
{
@@ -80,5 +80,5 @@ get_battle_id (Request) -> Request#type.battle_id.
-spec get_character_ix (type()) -> non_neg_integer().
get_character_ix (Request) -> Request#type.character_ix.
--spec get_actions (type()) -> list(battle_action:type()).
+-spec get_actions (type()) -> list(bm_battle_action:type()).
get_actions (Request) -> Request#type.actions.
diff --git a/src/battlemap/src/struct/character_turn_update.erl b/src/battlemap/struct/bm_character_turn_update.erl
index 07cb562..078075c 100644
--- a/src/battlemap/src/struct/character_turn_update.erl
+++ b/src/battlemap/struct/bm_character_turn_update.erl
@@ -1,4 +1,4 @@
--module(character_turn_update).
+-module(bm_character_turn_update).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -7,9 +7,9 @@
(
type,
{
- data :: character_turn_data:type(),
+ data :: bm_character_turn_data:type(),
timeline :: list(any()),
- db :: list(db_query:op())
+ db :: list(sh_db_query:op())
}
).
@@ -42,7 +42,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec new (character_turn_data:type()) -> type().
+-spec new (bm_character_turn_data:type()) -> type().
new (Data) ->
#type
{
@@ -51,23 +51,23 @@ new (Data) ->
db = []
}.
--spec get_data (type()) -> character_turn_data:type().
+-spec get_data (type()) -> bm_character_turn_data:type().
get_data (Update) -> Update#type.data.
-spec get_timeline (type()) -> list(any()).
get_timeline (Update) -> Update#type.timeline.
--spec get_db (type()) -> list(db_query:op()).
+-spec get_db (type()) -> list(sh_db_query:op()).
get_db (Update) -> Update#type.db.
--spec set_data (character_turn_data:type(), type()) -> type().
+-spec set_data (bm_character_turn_data:type(), type()) -> type().
set_data (Data, Update) ->
Update#type{ data = Data}.
--spec add_to_timeline (turn_result:type(), type()) -> type().
+-spec add_to_timeline (bm_turn_result:type(), type()) -> type().
add_to_timeline (Item, Update) ->
- Update#type{ timeline = [turn_result:encode(Item)|Update#type.timeline] }.
+ Update#type{ timeline = [bm_turn_result:encode(Item)|Update#type.timeline] }.
--spec add_to_db (db_query:op(), type()) -> type().
+-spec add_to_db (sh_db_query:op(), type()) -> type().
add_to_db (Item, Update) ->
Update#type{ db = [Item|Update#type.db] }.
diff --git a/src/battlemap/src/struct/direction.erl b/src/battlemap/struct/bm_direction.erl
index be43a13..2da3936 100644
--- a/src/battlemap/src/struct/direction.erl
+++ b/src/battlemap/struct/bm_direction.erl
@@ -1,4 +1,4 @@
--module(direction).
+-module(bm_direction).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/src/battlemap/src/struct/location.erl b/src/battlemap/struct/bm_location.erl
index e54584b..056d10c 100644
--- a/src/battlemap/src/struct/location.erl
+++ b/src/battlemap/struct/bm_location.erl
@@ -1,4 +1,4 @@
--module(location).
+-module(bm_location).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -44,7 +44,7 @@ validate ({X, Y}) ->
-spec get_nowhere () -> type().
get_nowhere () -> nowhere.
--spec apply_direction (direction:enum(), type()) -> type().
+-spec apply_direction (bm_direction:enum(), type()) -> type().
apply_direction (left, {X, Y}) ->
validate({(X - 1), Y});
apply_direction (right, {X, Y}) ->
diff --git a/src/battlemap/src/struct/player.erl b/src/battlemap/struct/bm_player.erl
index 4cd073e..3f14a6f 100644
--- a/src/battlemap/src/struct/player.erl
+++ b/src/battlemap/struct/bm_player.erl
@@ -1,4 +1,4 @@
--module(player).
+-module(bm_player).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/src/battlemap/src/struct/player_turn.erl b/src/battlemap/struct/bm_player_turn.erl
index a558bfc..5f2c074 100644
--- a/src/battlemap/src/struct/player_turn.erl
+++ b/src/battlemap/struct/bm_player_turn.erl
@@ -1,4 +1,4 @@
--module(player_turn).
+-module(bm_player_turn).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/src/battlemap/src/struct/tile.erl b/src/battlemap/struct/bm_tile.erl
index a2e04ee..c1dd448 100644
--- a/src/battlemap/src/struct/tile.erl
+++ b/src/battlemap/struct/bm_tile.erl
@@ -1,4 +1,4 @@
--module(tile).
+-module(bm_tile).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -44,4 +44,4 @@ get_cost (N) ->
-spec random_id () -> id().
random_id () ->
- roll:between(0, 15).
+ sh_roll:between(0, 15).
diff --git a/src/battlemap/src/struct/turn_result.erl b/src/battlemap/struct/bm_turn_result.erl
index 42a3a18..c3440bd 100644
--- a/src/battlemap/src/struct/turn_result.erl
+++ b/src/battlemap/struct/bm_turn_result.erl
@@ -1,4 +1,4 @@
--module(turn_result).
+-module(bm_turn_result).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -8,7 +8,7 @@
(
switched_weapon,
{
- character_ix :: character:id()
+ character_ix :: bm_character:id()
}
).
@@ -16,9 +16,9 @@
(
moved,
{
- character_ix :: character:id(),
- path :: list(direction:enum()),
- new_location :: location:type()
+ character_ix :: bm_character:id(),
+ path :: list(bm_direction:enum()),
+ new_location :: bm_location:type()
}
).
@@ -26,9 +26,9 @@
(
attacked,
{
- attacker_ix :: character:id(),
- defender_ix :: character:id(),
- sequence :: list(attack:type())
+ attacker_ix :: bm_character:id(),
+ defender_ix :: bm_character:id(),
+ sequence :: list(bm_attack:type())
}
).
@@ -62,15 +62,15 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec new_character_switched_weapons (character:id()) -> type().
+-spec new_character_switched_weapons (bm_character:id()) -> type().
new_character_switched_weapons (CharacterIX) ->
#switched_weapon { character_ix = CharacterIX }.
-spec new_character_moved
(
- character:id(),
- list(direction:enum()),
- location:type()
+ bm_character:id(),
+ list(bm_direction:enum()),
+ bm_location:type()
)
-> type().
new_character_moved (CharacterIX, Path, NewLocation) ->
@@ -83,9 +83,9 @@ new_character_moved (CharacterIX, Path, NewLocation) ->
-spec new_character_attacked
(
- character:id(),
- character:id(),
- list(attack:type())
+ bm_character:id(),
+ bm_character:id(),
+ list(bm_attack:type())
)
-> type().
new_character_attacked (AttackerIX, DefenderIX, AttackSequence) ->
@@ -111,8 +111,8 @@ encode (TurnResult) when is_record(TurnResult, moved) ->
Path = TurnResult#moved.path,
NewLocation = TurnResult#moved.new_location,
- EncodedPath = lists:map(fun direction:encode/1, Path),
- EncodedNewLocation = location:encode(NewLocation),
+ EncodedPath = lists:map(fun bm_direction:encode/1, Path),
+ EncodedNewLocation = bm_location:encode(NewLocation),
{
[
@@ -127,7 +127,7 @@ encode (TurnResult) when is_record(TurnResult, attacked) ->
DefenderIX = TurnResult#attacked.defender_ix,
Sequence = TurnResult#attacked.sequence,
- EncodedSequence = lists:map(fun attack:encode/1, Sequence),
+ EncodedSequence = lists:map(fun bm_attack:encode/1, Sequence),
{
[
diff --git a/src/battlemap/src/struct/weapon.erl b/src/battlemap/struct/bm_weapon.erl
index 7d3c874..6c05799 100644
--- a/src/battlemap/src/struct/weapon.erl
+++ b/src/battlemap/struct/bm_weapon.erl
@@ -1,4 +1,4 @@
--module(weapon).
+-module(bm_weapon).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -334,28 +334,27 @@ from_id (24) ->
}.
-spec random_id () -> id().
-random_id () -> roll:between(0, 24).
+random_id () -> sh_roll:between(0, 24).
-spec apply_to_attributes
(
- attributes:type(),
- weapon:type()
+ sh_attributes:type(),
+ bm_weapon:type()
)
-> attributes:type().
apply_to_attributes (Attributes, Weapon) ->
- Dexterity = attributes:get_dexterity(Attributes),
- Speed = attributes:get_speed(Attributes),
+ Dexterity = sh_attributes:get_dexterity(Attributes),
+ Speed = sh_attributes:get_speed(Attributes),
RangeModifier = Weapon#weapon.range_mod,
DamageModifier = Weapon#weapon.damage_mod,
WithRangeModifier =
case RangeModifier of
long ->
- attributes:set_dexterity(max(0, (Dexterity - 20)), Attributes);
+ sh_attributes:set_dexterity(max(0, (Dexterity - 20)), Attributes);
_ -> Attributes
end,
case DamageModifier of
- heavy ->
- attributes:set_speed(max(0, (Speed - 20)), WithRangeModifier);
+ heavy -> sh_attributes:set_speed(max(0, (Speed - 20)), WithRangeModifier);
_ -> WithRangeModifier
end.
diff --git a/src/battlemap/src/util/array_util.erl b/src/battlemap/util/array_util.erl
index 418d9ce..418d9ce 100644
--- a/src/battlemap/src/util/array_util.erl
+++ b/src/battlemap/util/array_util.erl