summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/battlemap/src/game-logic/next_turn.erl12
-rw-r--r--src/battlemap/src/game-logic/turn_actions.erl55
-rw-r--r--src/battlemap/src/query/character_turn.erl5
-rw-r--r--src/battlemap/src/struct/character_turn_update.erl4
-rw-r--r--src/battlemap/src/struct/db_query.erl68
-rw-r--r--src/battlemap/src/struct/direction.erl3
6 files changed, 129 insertions, 18 deletions
diff --git a/src/battlemap/src/game-logic/next_turn.erl b/src/battlemap/src/game-logic/next_turn.erl
index af54d3b..3de69fd 100644
--- a/src/battlemap/src/game-logic/next_turn.erl
+++ b/src/battlemap/src/game-logic/next_turn.erl
@@ -76,11 +76,19 @@ activate_next_players_characters (Battle, NextPlayer) ->
add_activation_updates ([], Update) ->
Update;
add_activation_updates ([IX|NextIXs], Update) ->
- % TODO: use DB update elements.
add_activation_updates
(
NextIXs,
- character_turn_update:add_to_db(IX, Update)
+ character_turn_update:add_to_db
+ (
+ db_query:update_indexed
+ (
+ character,
+ IX,
+ [db_query:set_field(active, true)]
+ ),
+ Update
+ )
).
-spec update (character_turn_update:type()) -> character_turn_update:type().
diff --git a/src/battlemap/src/game-logic/turn_actions.erl b/src/battlemap/src/game-logic/turn_actions.erl
index b9108f7..c789908 100644
--- a/src/battlemap/src/game-logic/turn_actions.erl
+++ b/src/battlemap/src/game-logic/turn_actions.erl
@@ -40,17 +40,28 @@ handle_switch_weapon (Update) ->
character:set_weapon_ids(UpdatedWeaponIDs, Character)
),
- % TODO: db update entries...
- % {character, CharacterIX, wp0, SecondaryWeaponID},
- % {character, CharacterIX, wp1, PrimaryWeaponID}
+ DBQuery =
+ db_query:update_indexed
+ (
+ character,
+ CharacterIX,
+ [
+ db_query:set_field(wp0, SecondaryWeaponID),
+ db_query:set_field(wp1, PrimaryWeaponID)
+ ]
+ ),
UpdatedData = character_turn_data:set_character(UpdatedCharacter, Data),
- character_turn_update:add_to_timeline
- (
- turn_result:new_character_switched_weapons(CharacterIX),
- character_turn_update:set_data(UpdatedData, Update)
- ).
+ S0Update = character_turn_update:set_data(UpdatedData, Update),
+ S1Update =
+ character_turn_update:add_to_timeline
+ (
+ turn_result:new_character_switched_weapons(CharacterIX),
+ S0Update
+ ),
+
+ character_turn_update:add_to_db(DBQuery, S1Update).
%%%% MOVING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec get_path_cost_and_destination
@@ -130,9 +141,19 @@ commit_move (Update, Path, NewLocation) ->
Update
),
- %[{character, CharacterIX, loc, NewLocation}],
+ S1Update =
+ character_turn_update:add_to_db
+ (
+ db_query:update_indexed
+ (
+ character,
+ CharacterIX,
+ [db_query:set_field(loc, NewLocation)]
+ ),
+ S0Update
+ ),
- character_turn_update:set_data(UpdatedData, S0Update).
+ character_turn_update:set_data(UpdatedData, S1Update).
-spec handle_move
(
@@ -278,6 +299,7 @@ handle_attack (BattleAction, Update) ->
Battle
),
+
S0Data = character_turn_data:set_battle(UpdatedBattle, Data),
S1Data =
character_turn_data:set_character
@@ -286,6 +308,7 @@ handle_attack (BattleAction, Update) ->
S0Data
),
+
S0Update =
character_turn_update:add_to_timeline
(
@@ -297,7 +320,17 @@ handle_attack (BattleAction, Update) ->
),
Update
),
- character_turn_update:set_data(S1Data, S0Update).
+ S1Update = character_turn_update:set_data(S1Data, S0Update),
+
+ DBQuery =
+ db_query:update_indexed
+ (
+ character,
+ TargetIX,
+ [ db_query:set_field(health, RemainingDefenderHealth) ]
+ ),
+
+ character_turn_update:add_to_db(DBQuery, S1Update).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/src/battlemap/src/query/character_turn.erl b/src/battlemap/src/query/character_turn.erl
index a96f984..a4b69a2 100644
--- a/src/battlemap/src/query/character_turn.erl
+++ b/src/battlemap/src/query/character_turn.erl
@@ -180,7 +180,8 @@ send_to_database (Update, Request) ->
Data = character_turn_update:get_data(Update),
Battle = character_turn_data:get_battle(Data),
- %% TODO: differential commit
+ % TODO: send queries to an actual DB...
+
database_shim:commit
(
battle_db,
@@ -229,7 +230,7 @@ disconnect_user (Request) ->
ok.
%%%% REPLY GENERATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec generate_reply (character_turn_update:data()) -> binary().
+-spec generate_reply (character_turn_update:type()) -> binary().
generate_reply (Update) ->
NewTimelineItems = character_turn_update:get_timeline(Update),
diff --git a/src/battlemap/src/struct/character_turn_update.erl b/src/battlemap/src/struct/character_turn_update.erl
index 9e0041f..a3aa819 100644
--- a/src/battlemap/src/struct/character_turn_update.erl
+++ b/src/battlemap/src/struct/character_turn_update.erl
@@ -9,7 +9,7 @@
{
data :: character_turn_data:type(),
timeline :: list(any()),
- db :: list(any())
+ db :: list(db_query:type())
}
).
@@ -68,6 +68,6 @@ set_data (Data, Update) ->
add_to_timeline (Item, Update) ->
Update#type{ timeline = [turn_result:encode(Item)|Update#type.timeline] }.
--spec add_to_db (any(), type()) -> type().
+-spec add_to_db (db_query:type(), type()) -> type().
add_to_db (Item, Update) ->
Update#type{ db = [Item|Update#type.db] }.
diff --git a/src/battlemap/src/struct/db_query.erl b/src/battlemap/src/struct/db_query.erl
new file mode 100644
index 0000000..c6a4fa5
--- /dev/null
+++ b/src/battlemap/src/struct/db_query.erl
@@ -0,0 +1,68 @@
+-module(db_query).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+-record
+(
+ set_field,
+ {
+ name :: atom(),
+ value :: any()
+ }
+).
+
+-record
+(
+ add_to_field,
+ {
+ name :: atom(),
+ values :: list(any())
+ }
+).
+
+-record
+(
+ update_indexed,
+ {
+ name :: atom(),
+ ix :: non_neg_integer(),
+ update :: list(type())
+ }
+).
+
+-opaque type() :: (#update_indexed{} | #set_field{} | #add_to_field{}).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-export_type([type/0]).
+
+-export
+(
+ [
+ set_field/2,
+ add_to_field/2,
+ update_indexed/3
+ ]
+).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec set_field (atom(), any()) -> type().
+set_field (Name, Value) ->
+ #set_field { name = Name, value = Value }.
+
+-spec add_to_field (atom(), list(any())) -> type().
+add_to_field (Name, Values) ->
+ #add_to_field { name = Name, values = Values }.
+
+-spec update_indexed (atom(), non_neg_integer(), list(type())) -> type().
+update_indexed (Name, IX, Updates) ->
+ #update_indexed { name = Name, ix = IX, update = Updates}.
diff --git a/src/battlemap/src/struct/direction.erl b/src/battlemap/src/struct/direction.erl
index 84ae272..be43a13 100644
--- a/src/battlemap/src/struct/direction.erl
+++ b/src/battlemap/src/struct/direction.erl
@@ -4,8 +4,9 @@
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-type enum() :: ('up' | 'down' | 'left' | 'right').
+-type type() :: enum().
--export_type([enum/0]).
+-export_type([enum/0, type/0]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%