| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2018-05-30 21:03:24 +0200 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2018-05-30 21:03:24 +0200 | 
| commit | 09bdaed7100ac97392e152a488d21db016952213 (patch) | |
| tree | 023a1f053270548fdf8629cebe8d103be051e91e | |
| parent | 2a50c908383d5d5d14cb501f8ad707dcba1da212 (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.erl | 4 | ||||
| -rw-r--r-- | src/battlemap/src/game-logic/turn_actions.erl | 29 | ||||
| -rw-r--r-- | src/battlemap/src/struct/battle.erl | 16 | ||||
| -rw-r--r-- | src/battlemap/src/struct/character.erl | 19 | ||||
| -rw-r--r-- | src/battlemap/src/struct/db_query.erl | 30 | 
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}. | 


