From 2a50c908383d5d5d14cb501f8ad707dcba1da212 Mon Sep 17 00:00:00 2001 From: nsensfel Date: Fri, 1 Jun 2018 18:16:43 +0200 Subject: Preparing to add actual DBs... --- src/battlemap/src/game-logic/next_turn.erl | 12 +++- src/battlemap/src/game-logic/turn_actions.erl | 55 +++++++++++++---- src/battlemap/src/query/character_turn.erl | 5 +- src/battlemap/src/struct/character_turn_update.erl | 4 +- src/battlemap/src/struct/db_query.erl | 68 ++++++++++++++++++++++ src/battlemap/src/struct/direction.erl | 3 +- 6 files changed, 129 insertions(+), 18 deletions(-) create mode 100644 src/battlemap/src/struct/db_query.erl (limited to 'src/battlemap') 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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- cgit v1.2.3-70-g09d2