| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2018-06-07 12:47:34 +0200 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2018-06-07 12:47:34 +0200 | 
| commit | 9b55ecea81edbc12196a5818077fd38421f8f1a8 (patch) | |
| tree | c6d590615695cacbb5a2a3f21fe20639292d134e | |
| parent | d99f1e8b0efedf1286ab15c656a0ea874823865f (diff) | |
Now it seems to work perfectly.
Getting both nodes to start made some unexpected issues about the
hostnames appear, despite both using either "-name" or "-sname".
| -rw-r--r-- | src/battlemap/game-logic/bm_next_turn.erl | 108 | ||||
| -rw-r--r-- | src/battlemap/game-logic/bm_turn_actions.erl | 96 | ||||
| -rw-r--r-- | src/battlemap/query/bm_character_turn.erl | 36 | ||||
| -rw-r--r-- | src/battlemap/struct/bm_character_turn_update.erl | 20 | ||||
| -rw-r--r-- | src/battlemap/struct/bm_player.erl | 6 | ||||
| -rw-r--r-- | src/db/logic/db_access.erl | 16 | ||||
| -rw-r--r-- | src/db/struct/db_model.erl | 5 | ||||
| -rw-r--r-- | src/shared/io/sh_database.erl | 7 | ||||
| -rw-r--r-- | src/shared/util/sh_array_util.erl (renamed from src/battlemap/util/array_util.erl) | 2 | 
9 files changed, 182 insertions, 114 deletions
| diff --git a/src/battlemap/game-logic/bm_next_turn.erl b/src/battlemap/game-logic/bm_next_turn.erl index abe286e..79cea14 100644 --- a/src/battlemap/game-logic/bm_next_turn.erl +++ b/src/battlemap/game-logic/bm_next_turn.erl @@ -16,20 +16,27 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec set_player_turn_to_next (bm_battle:type()) -> bm_battle:type(). +-spec set_player_turn_to_next (bm_battle:type()) +   -> {bm_battle:type(), sh_db_query:op()}.  set_player_turn_to_next (Battle) ->     Players = bm_battle:get_players(Battle),     CurrentPlayerTurn = bm_battle:get_current_player_turn(Battle),     NextPlayerTurn = bm_player_turn:next(array:size(Players), CurrentPlayerTurn), -   bm_battle:set_current_player_turn(NextPlayerTurn, Battle). +   UpdatedBattle = bm_battle:set_current_player_turn(NextPlayerTurn, Battle), --spec reset_next_player_timeline -   ( -      bm_battle:type() -   ) -   -> {bm_battle:type(), bm_player:type()}. +   DBQuery = +      sh_db_query:set_field +      ( +         bm_battle:get_current_player_turn_field(), +         NextPlayerTurn +      ), + +   {UpdatedBattle, DBQuery}. + +-spec reset_next_player_timeline (bm_battle:type()) +   -> {bm_battle:type(), bm_player:type(), sh_db_query:op()}.  reset_next_player_timeline (Battle) ->     NextPlayerTurn = bm_battle:get_current_player_turn(Battle),     NextPlayerIX = bm_player_turn:get_player_ix(NextPlayerTurn), @@ -39,21 +46,25 @@ reset_next_player_timeline (Battle) ->     UpdatedBattle =        bm_battle:set_player(NextPlayerIX, UpdatedNextPlayer, Battle), -   {UpdatedBattle, UpdatedNextPlayer}. +   DBQuery = +      sh_db_query:update_indexed +      ( +         bm_battle:get_players_field(), +         NextPlayerIX, +         [ sh_db_query:set_field(bm_player:get_timeline_field(), []) ] +      ), +   {UpdatedBattle, UpdatedNextPlayer, DBQuery}. --spec activate_next_players_characters -   ( -      bm_battle:type(), -      bm_player:type() -   ) -   -> {bm_battle:type(), list(non_neg_integer())}. + +-spec activate_next_players_characters (bm_battle:type(), bm_player:type()) +   -> {bm_battle:type(), list(sh_db_query:op())}.  activate_next_players_characters (Battle, NextPlayer) ->     NextPlayerID = bm_player:get_id(NextPlayer),     Characters = bm_battle:get_characters(Battle),     {UpdatedCharacters, ModifiedIXs} = -      array_util:mapiff +      sh_array_util:mapiff        (           fun (Character) ->              (bm_character:get_owner_id(Character) == NextPlayerID) @@ -64,33 +75,29 @@ activate_next_players_characters (Battle, NextPlayer) ->           Characters        ), -   UpdatedBattle = bm_battle:set_characters(UpdatedCharacters, Battle), +   DBQueries = +      lists:map +      ( +         fun (IX) -> +            sh_db_query:update_indexed +            ( +               bm_battle:get_characters_field(), +               IX, +               [ +                  sh_db_query:set_field +                  ( +                     bm_character:get_active_field(), +                     true +                  ) +               ] +            ) +         end, +         ModifiedIXs +      ), -   {UpdatedBattle, ModifiedIXs}. +   UpdatedBattle = bm_battle:set_characters(UpdatedCharacters, Battle), --spec add_activation_updates -   ( -      list(non_neg_integer()), -      bm_character_turn_update:type() -   ) -   -> bm_character_turn_update:type(). -add_activation_updates ([], Update) -> -   Update; -add_activation_updates ([IX|NextIXs], Update) -> -   add_activation_updates -   ( -      NextIXs, -      bm_character_turn_update:add_to_db -      ( -         sh_db_query:update_indexed -         ( -            bm_battle:get_characters_field(), -            IX, -            [sh_db_query:set_field(bm_character:get_active_field(), true)] -         ), -         Update -      ) -   ). +   {UpdatedBattle, DBQueries}.  -spec update     ( @@ -101,16 +108,23 @@ update (Update) ->     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), -   {S2Battle, ActivatedCharactersIX} = +   {S0Battle, DBQuery0} = set_player_turn_to_next(Battle), +   {S1Battle, NextPlayer, DBQuery1} = reset_next_player_timeline(S0Battle), +   {S2Battle, DBQueries} =        activate_next_players_characters(S1Battle, NextPlayer), -   S0Update = add_activation_updates(ActivatedCharactersIX, Update), +   S0Data = bm_character_turn_data:set_battle(S2Battle, Data), +   S0Update = bm_character_turn_update:set_data(S0Data, Update), -   UpdatedData = bm_character_turn_data:set_battle(S2Battle, Data), +   S1Update = +      lists:foldl +      ( +         fun bm_character_turn_update:add_to_db/2, +         S0Update, +         [DBQuery0|[DBQuery1|DBQueries]] +      ), -   bm_character_turn_update:set_data(UpdatedData, S0Update). +   S1Update.  -spec requires_update (bm_character_turn_update:type()) -> boolean().  requires_update (Update) -> @@ -118,7 +132,7 @@ requires_update (Update) ->     Battle = bm_character_turn_data:get_battle(Data),     Characters = bm_battle:get_characters(Battle), -   array_util:none(fun bm_character:get_is_active/1, Characters). +   sh_array_util:none(fun bm_character:get_is_active/1, Characters).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/battlemap/game-logic/bm_turn_actions.erl b/src/battlemap/game-logic/bm_turn_actions.erl index bf4075f..e94d36a 100644 --- a/src/battlemap/game-logic/bm_turn_actions.erl +++ b/src/battlemap/game-logic/bm_turn_actions.erl @@ -40,6 +40,8 @@ handle_switch_weapon (Update) ->           bm_character:set_weapon_ids(UpdatedWeaponIDs, Character)        ), +   TimelineItem = bm_turn_result:new_character_switched_weapons(CharacterIX), +     DBQuery =        sh_db_query:update_indexed        ( @@ -57,14 +59,8 @@ handle_switch_weapon (Update) ->     UpdatedData = bm_character_turn_data:set_character(UpdatedCharacter, Data),     S0Update = bm_character_turn_update:set_data(UpdatedData, Update), -   S1Update = -      bm_character_turn_update:add_to_timeline -      ( -         bm_turn_result:new_character_switched_weapons(CharacterIX), -         S0Update -      ), -   bm_character_turn_update:add_to_db(DBQuery, S1Update). +   bm_character_turn_update:add_to_timeline(TimelineItem, DBQuery, S0Update).  %%%% MOVING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  -spec get_path_cost_and_destination @@ -137,32 +133,32 @@ commit_move (Update, Path, NewLocation) ->     UpdatedData = bm_character_turn_data:set_character(UpdatedCharacter, Data), -   S0Update = -      bm_character_turn_update:add_to_timeline +   TimelineItem = +      bm_turn_result:new_character_moved(CharacterIX, Path, NewLocation), + +   DBQuery = +      sh_db_query:update_indexed        ( -         bm_turn_result:new_character_moved(CharacterIX, Path, NewLocation), -         Update +         bm_battle:get_characters_field(), +         CharacterIX, +         [ +            sh_db_query:set_field +            ( +               bm_character:get_location_field(), +               NewLocation +            ) +         ]        ), -   S1Update = -      bm_character_turn_update:add_to_db +   S0Update = +      bm_character_turn_update:add_to_timeline        ( -         sh_db_query:update_indexed -         ( -            bm_battle:get_characters_field(), -            CharacterIX, -            [ -               sh_db_query:set_field -               ( -                  bm_character:get_location_field(), -                  NewLocation -               ) -            ] -         ), -         S0Update +         TimelineItem, +         DBQuery, +         Update        ), -   bm_character_turn_update:set_data(UpdatedData, S1Update). +   bm_character_turn_update:set_data(UpdatedData, S0Update).  -spec handle_move     ( @@ -282,19 +278,10 @@ handle_attack (BattleAction, Update) ->     AttackSequence = get_attack_sequence(Character, TargetCharacter),     {AttackEffects, RemainingAttackerHealth, RemainingDefenderHealth} = -      handle_attack_sequence -      ( -         Character, -         TargetCharacter, -         AttackSequence -      ), +      handle_attack_sequence(Character, TargetCharacter, AttackSequence),     UpdatedCharacter = -      bm_character:set_current_health -      ( -         RemainingAttackerHealth, -         Character -      ), +      bm_character:set_current_health(RemainingAttackerHealth, Character),     UpdatedBattle =        bm_battle:set_character @@ -310,26 +297,15 @@ handle_attack (BattleAction, Update) ->     S0Data = bm_character_turn_data:set_battle(UpdatedBattle, Data), -   S1Data = -      bm_character_turn_data:set_character -      ( -         UpdatedCharacter, -         S0Data -      ), - +   S1Data = bm_character_turn_data:set_character(UpdatedCharacter, S0Data), -   S0Update = -      bm_character_turn_update:add_to_timeline +   TimelineItem = +      bm_turn_result:new_character_attacked        ( -         bm_turn_result:new_character_attacked -         ( -            CharacterIX, -            TargetIX, -            AttackEffects -         ), -         Update +         CharacterIX, +         TargetIX, +         AttackEffects        ), -   S1Update = bm_character_turn_update:set_data(S1Data, S0Update),     DBQuery =        sh_db_query:update_indexed @@ -345,7 +321,15 @@ handle_attack (BattleAction, Update) ->           ]        ), -   bm_character_turn_update:add_to_db(DBQuery, S1Update). +   S0Update = +      bm_character_turn_update:add_to_timeline +      ( +         TimelineItem, +         DBQuery, +         Update +      ), + +   bm_character_turn_update:set_data(S1Data, S0Update).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/battlemap/query/bm_character_turn.erl b/src/battlemap/query/bm_character_turn.erl index 26b8dce..ccd9182 100644 --- a/src/battlemap/query/bm_character_turn.erl +++ b/src/battlemap/query/bm_character_turn.erl @@ -114,7 +114,18 @@ finalize_character (Update) ->     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). +   DBQuery = +      sh_db_query:update_indexed +      ( +         bm_battle:get_characters_field(), +         bm_character_turn_data:get_character_ix(Data), +         [ sh_db_query:set_field(bm_character:get_active_field(), false) ] +      ), + +   S0Update = bm_character_turn_update:set_data(FinalizedData, Update), +   S1Update = bm_character_turn_update:add_to_db(DBQuery, S0Update), + +   S1Update.  -spec handle_actions     ( @@ -148,7 +159,26 @@ update_timeline (Update) ->     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). +   DBQuery = +      sh_db_query:update_indexed +      ( +         bm_battle:get_players_field(), +         PlayerIX, +         [ +            sh_db_query:add_to_field +            ( +               bm_player:get_timeline_field(), +               NewTimelineElements, +               true % We add those to the start of the list +            ) +         ] +      ), + +   S0Update = bm_character_turn_update:set_data(UpdatedData, Update), +   S1Update = bm_character_turn_update:add_to_db(DBQuery, S0Update), + +   S1Update. +  -spec update_data     ( @@ -175,8 +205,6 @@ send_to_database (Update, 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. diff --git a/src/battlemap/struct/bm_character_turn_update.erl b/src/battlemap/struct/bm_character_turn_update.erl index 078075c..1ca5d94 100644 --- a/src/battlemap/struct/bm_character_turn_update.erl +++ b/src/battlemap/struct/bm_character_turn_update.erl @@ -30,7 +30,7 @@        get_db/1,        set_data/2, -      add_to_timeline/2, +      add_to_timeline/3,        add_to_db/2     ]  ). @@ -64,9 +64,21 @@ get_db (Update) -> Update#type.db.  set_data (Data, Update) ->     Update#type{ data = Data}. --spec add_to_timeline (bm_turn_result:type(), type()) -> type(). -add_to_timeline (Item, Update) -> -   Update#type{ timeline = [bm_turn_result:encode(Item)|Update#type.timeline] }. +-spec add_to_timeline +   ( +      bm_turn_result:type(), +      sh_db_query:op(), +      type() +   ) -> type(). +add_to_timeline (Item, DBUpdate, Update) -> +   add_to_db +   ( +      DBUpdate, +      Update#type +      { +         timeline = [bm_turn_result:encode(Item)|Update#type.timeline] +      } +   ).  -spec add_to_db (sh_db_query:op(), type()) -> type().  add_to_db (Item, Update) -> diff --git a/src/battlemap/struct/bm_player.erl b/src/battlemap/struct/bm_player.erl index 3f14a6f..fa877c1 100644 --- a/src/battlemap/struct/bm_player.erl +++ b/src/battlemap/struct/bm_player.erl @@ -26,7 +26,9 @@        get_id/1,        get_timeline/1,        add_to_timeline/2, -      reset_timeline/1 +      reset_timeline/1, + +      get_timeline_field/0     ]  ). @@ -70,3 +72,5 @@ new (ID) ->        timeline = []     }. +-spec get_timeline_field () -> non_neg_integer(). +get_timeline_field () -> #player.timeline. diff --git a/src/db/logic/db_access.erl b/src/db/logic/db_access.erl index f589ba8..99d17ea 100644 --- a/src/db/logic/db_access.erl +++ b/src/db/logic/db_access.erl @@ -18,12 +18,22 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec get_value (list(sh_db_item:type())) -> ({'ok', any()} | 'not_found').  get_value ([]) -> not_found;  get_value ([Regval]) -> {ok, sh_db_item:get_value(Regval)}. +-spec read_transaction (atom(), any()) -> ({'ok', any()} | 'not_found').  read_transaction (DB, ID) ->     get_value(mnesia:read(DB, ID)). +-spec insert_transaction +   ( +      atom(), +      any(), +      sh_db_user:permission(), +      any() +   ) +   -> 'ok'.  insert_transaction (DB, ID, Perm, Value) ->     StoredItem = sh_db_item:new(ID, Perm, Value),     % FIXME: handle return value, mnesia:write -> (transaction abort | ok). @@ -31,6 +41,7 @@ insert_transaction (DB, ID, Perm, Value) ->     mnesia:write(DB, StoredItem, sticky_write),     ok. +-spec query_transaction (sh_db_query:type()) -> 'ok'.  query_transaction (Query) ->     DB = sh_db_query:get_database(Query),     ID = sh_db_query:get_entry_id(Query), @@ -44,11 +55,16 @@ query_transaction (Query) ->  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec read (atom(), any()) +   -> ({'aborted', any()} | {'atomic', ({'ok', any()} | 'not_found')}).  read (DB, ID) ->     mnesia:transaction(fun read_transaction/2, [DB, ID]). +-spec insert (atom(), any(), sh_db_user:permission(), any()) +   -> ({'aborted', any()} | {'atomic', 'ok'}).  insert (DB, ID, Perm, Value) ->     mnesia:transaction(fun insert_transaction/4, [DB, ID, Perm, Value]). +-spec query (sh_db_query:type()) -> ({'aborted', any()} | {'atomic', 'ok'}).  query (Query) ->     mnesia:transaction(fun query_transaction/1, [Query]). diff --git a/src/db/struct/db_model.erl b/src/db/struct/db_model.erl index 8097bcb..3e00b95 100644 --- a/src/db/struct/db_model.erl +++ b/src/db/struct/db_model.erl @@ -45,6 +45,7 @@ new (DBName, StorageFile, Neighbors) ->        neighbors = Neighbors     }. +-spec start(type()) -> 'ok'.  start (Model) ->     DBName = Model#db_model.name,     StorageFile = Model#db_model.store_file, @@ -68,4 +69,6 @@ start (Model) ->           {type, ordered_set},           {local_content, false}        ] -   ). +   ), + +   ok. diff --git a/src/shared/io/sh_database.erl b/src/shared/io/sh_database.erl index 8b52f9e..233e37d 100644 --- a/src/shared/io/sh_database.erl +++ b/src/shared/io/sh_database.erl @@ -19,8 +19,15 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec get_db_node () -> node().  get_db_node () -> list_to_atom("db_node@" ++ net_adm:localhost()). +-spec do_remote_operation (atom(), list(any())) -> +   ( +      {'badrpc', any()} +      | {'aborted', any()} +      | {'atomic', ({'ok', any()} | 'ok' | 'not_found')} +   ).  do_remote_operation (Op, Params) ->     rpc:call(get_db_node(), db_access, Op, Params). diff --git a/src/battlemap/util/array_util.erl b/src/shared/util/sh_array_util.erl index 418d9ce..5f58b36 100644 --- a/src/battlemap/util/array_util.erl +++ b/src/shared/util/sh_array_util.erl @@ -1,4 +1,4 @@ --module(array_util). +-module(sh_array_util).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | 


