summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2018-05-30 21:03:24 +0200
committernsensfel <SpamShield0@noot-noot.org>2018-05-30 21:03:24 +0200
commit09bdaed7100ac97392e152a488d21db016952213 (patch)
tree023a1f053270548fdf8629cebe8d103be051e91e
parent2a50c908383d5d5d14cb501f8ad707dcba1da212 (diff)
Looking into dynamically updated records/tuples.
So far, the plan is for the DB to not even know what it's storing. Instead, it trusts the queries to know what they are accessing (using record fields positions with erlang:setelement and such). That might turn out to be a terrible idea, though.
-rw-r--r--src/battlemap/src/game-logic/next_turn.erl4
-rw-r--r--src/battlemap/src/game-logic/turn_actions.erl29
-rw-r--r--src/battlemap/src/struct/battle.erl16
-rw-r--r--src/battlemap/src/struct/character.erl19
-rw-r--r--src/battlemap/src/struct/db_query.erl30
5 files changed, 75 insertions, 23 deletions
diff --git a/src/battlemap/src/game-logic/next_turn.erl b/src/battlemap/src/game-logic/next_turn.erl
index 3de69fd..8e7ca8a 100644
--- a/src/battlemap/src/game-logic/next_turn.erl
+++ b/src/battlemap/src/game-logic/next_turn.erl
@@ -83,9 +83,9 @@ add_activation_updates ([IX|NextIXs], Update) ->
(
db_query:update_indexed
(
- character,
+ battle:get_characters_field(),
IX,
- [db_query:set_field(active, true)]
+ [db_query:set_field(character:get_active_field(), true)]
),
Update
)
diff --git a/src/battlemap/src/game-logic/turn_actions.erl b/src/battlemap/src/game-logic/turn_actions.erl
index c789908..e6aac9e 100644
--- a/src/battlemap/src/game-logic/turn_actions.erl
+++ b/src/battlemap/src/game-logic/turn_actions.erl
@@ -43,11 +43,14 @@ handle_switch_weapon (Update) ->
DBQuery =
db_query:update_indexed
(
- character,
+ battle:get_characters_field(),
CharacterIX,
[
- db_query:set_field(wp0, SecondaryWeaponID),
- db_query:set_field(wp1, PrimaryWeaponID)
+ db_query:set_field
+ (
+ character:get_weapons_field(),
+ UpdatedWeaponIDs
+ )
]
),
@@ -146,9 +149,15 @@ commit_move (Update, Path, NewLocation) ->
(
db_query:update_indexed
(
- character,
+ battle:get_characters_field(),
CharacterIX,
- [db_query:set_field(loc, NewLocation)]
+ [
+ db_query:set_field
+ (
+ character:get_location_field(),
+ NewLocation
+ )
+ ]
),
S0Update
),
@@ -325,9 +334,15 @@ handle_attack (BattleAction, Update) ->
DBQuery =
db_query:update_indexed
(
- character,
+ battle:get_characters_field(),
TargetIX,
- [ db_query:set_field(health, RemainingDefenderHealth) ]
+ [
+ db_query:set_field
+ (
+ character:get_current_health_field(),
+ RemainingDefenderHealth
+ )
+ ]
),
character_turn_update:add_to_db(DBQuery, S1Update).
diff --git a/src/battlemap/src/struct/battle.erl b/src/battlemap/src/struct/battle.erl
index 37e0d1b..6a76975 100644
--- a/src/battlemap/src/struct/battle.erl
+++ b/src/battlemap/src/struct/battle.erl
@@ -42,7 +42,11 @@
set_character/3,
set_players/2,
set_player/3,
- set_current_player_turn/2
+ set_current_player_turn/2,
+
+ get_characters_field/0,
+ get_players_field/0,
+ get_current_player_turn_field/0
]
).
@@ -181,3 +185,13 @@ new (ID, PlayersAsList, Battlemap, CharactersAsList) ->
players = array:from_list(PlayersAsList),
current_player_turn = player_turn:new(0, 0)
}.
+
+
+-spec get_characters_field () -> non_neg_integer().
+get_characters_field () -> #battle.characters.
+
+-spec get_players_field () -> non_neg_integer().
+get_players_field () -> #battle.players.
+
+-spec get_current_player_turn_field () -> non_neg_integer().
+get_current_player_turn_field () -> #battle.current_player_turn.
diff --git a/src/battlemap/src/struct/character.erl b/src/battlemap/src/struct/character.erl
index 930bdc9..2792da5 100644
--- a/src/battlemap/src/struct/character.erl
+++ b/src/battlemap/src/struct/character.erl
@@ -50,7 +50,13 @@
set_statistics/2,
set_location/2,
set_current_health/2,
- set_is_active/2
+ set_is_active/2,
+
+ get_statistics_field/0,
+ get_weapons_field/0,
+ get_location_field/0,
+ get_current_health_field/0,
+ get_active_field/0
]
).
@@ -220,3 +226,14 @@ random (ID, OwnerID, BattlemapWidth, BattlemapHeight, ForbiddenLocations) ->
current_health = statistics:get_health(Statistics),
active = false
}.
+
+-spec get_statistics_field() -> non_neg_integer().
+get_statistics_field () -> #character.statistics.
+-spec get_weapons_field() -> non_neg_integer().
+get_weapons_field () -> #character.weapon_ids.
+-spec get_location_field() -> non_neg_integer().
+get_location_field () -> #character.location.
+-spec get_current_health_field() -> non_neg_integer().
+get_current_health_field () -> #character.current_health.
+-spec get_active_field() -> non_neg_integer().
+get_active_field () -> #character.active.
diff --git a/src/battlemap/src/struct/db_query.erl b/src/battlemap/src/struct/db_query.erl
index c6a4fa5..bf4b0f3 100644
--- a/src/battlemap/src/struct/db_query.erl
+++ b/src/battlemap/src/struct/db_query.erl
@@ -8,7 +8,7 @@
(
set_field,
{
- name :: atom(),
+ field :: non_neg_integer(),
value :: any()
}
).
@@ -17,7 +17,7 @@
(
add_to_field,
{
- name :: atom(),
+ field :: non_neg_integer(),
values :: list(any())
}
).
@@ -26,7 +26,7 @@
(
update_indexed,
{
- name :: atom(),
+ field :: non_neg_integer(),
ix :: non_neg_integer(),
update :: list(type())
}
@@ -55,14 +55,20 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec set_field (atom(), any()) -> type().
-set_field (Name, Value) ->
- #set_field { name = Name, value = Value }.
+-spec set_field (non_neg_integer(), any()) -> type().
+set_field (Field, Value) ->
+ #set_field { field = Field, value = Value }.
--spec add_to_field (atom(), list(any())) -> type().
-add_to_field (Name, Values) ->
- #add_to_field { name = Name, values = Values }.
+-spec add_to_field (non_neg_integer(), list(any())) -> type().
+add_to_field (Field, Values) ->
+ #add_to_field { field = Field, 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}.
+-spec update_indexed
+ (
+ non_neg_integer(),
+ non_neg_integer(),
+ list(type())
+ )
+ -> type().
+update_indexed (Field, IX, Updates) ->
+ #update_indexed { field = Field, ix = IX, update = Updates}.