summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-06-06 22:27:15 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-06-06 22:27:15 +0200
commitd99f1e8b0efedf1286ab15c656a0ea874823865f (patch)
treecb59e56498b59d369eed6b53cf58edc72521068b /src
parentdaa6c9b3fa9a62d3f6a1a696f67976e904d641b9 (diff)
... it actually seems to work rather well.reorganizing
Quite a lot of missing db_query:op() though.
Diffstat (limited to 'src')
-rw-r--r--src/battlemap/bm_handler.erl12
-rw-r--r--src/battlemap/bm_shim.erl106
-rw-r--r--src/shared/io/sh_database.erl118
-rw-r--r--src/shared/io/sh_timed_caches_manager.erl2
4 files changed, 134 insertions, 104 deletions
diff --git a/src/battlemap/bm_handler.erl b/src/battlemap/bm_handler.erl
index 09659e9..d355ea1 100644
--- a/src/battlemap/bm_handler.erl
+++ b/src/battlemap/bm_handler.erl
@@ -18,6 +18,16 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
start (_YawsParams) ->
{ok, Pid} = sh_timed_caches_manager:start(),
- bm_database_shim:generate_db(),
+ case sh_database:fetch(battle_db, <<"0">>) of
+ {ok, _} -> ok;
+ not_found ->
+ sh_database:insert
+ (
+ battle_db,
+ <<"0">>,
+ any,
+ bm_shim:generate_random_battle()
+ )
+ end,
sh_timed_caches_manager:new_cache(Pid, battle_db, none),
ok.
diff --git a/src/battlemap/bm_shim.erl b/src/battlemap/bm_shim.erl
new file mode 100644
index 0000000..3789ed0
--- /dev/null
+++ b/src/battlemap/bm_shim.erl
@@ -0,0 +1,106 @@
+-module(bm_shim).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-export([generate_random_battle/0 ]).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+-spec generate_random_characters
+ (
+ non_neg_integer(),
+ non_neg_integer(),
+ non_neg_integer(),
+ non_neg_integer(),
+ bm_battlemap:type(),
+ list(bm_location:type()),
+ list(bm_character:type())
+ )
+ -> list(bm_character:type()).
+generate_random_characters
+(
+ 0,
+ 0,
+ _CharactersPerPlayer,
+ _TotalCharacterCount,
+ _Battlemap,
+ _ForbiddenLocations,
+ Result
+) ->
+ Result;
+generate_random_characters
+(
+ MaxPlayerID,
+ 0,
+ CharactersPerPlayer,
+ TotalCharacterCount,
+ Battlemap,
+ ForbiddenLocations,
+ Result
+) ->
+ generate_random_characters
+ (
+ (MaxPlayerID - 1),
+ CharactersPerPlayer,
+ CharactersPerPlayer,
+ TotalCharacterCount,
+ Battlemap,
+ ForbiddenLocations,
+ Result
+ );
+generate_random_characters
+(
+ MaxPlayerID,
+ PlayerCharacterCount,
+ CharactersPerPlayer,
+ TotalCharacterCount,
+ Battlemap,
+ ForbiddenLocations,
+ Result
+) ->
+ NewCharacter =
+ bm_character:random
+ (
+ TotalCharacterCount,
+ list_to_binary(integer_to_list(MaxPlayerID)),
+ bm_battlemap:get_width(Battlemap),
+ bm_battlemap:get_height(Battlemap),
+ ForbiddenLocations
+ ),
+ Character =
+ case MaxPlayerID of
+ 0 -> bm_character:set_is_active(true, NewCharacter);
+ _ -> NewCharacter
+ end,
+
+ generate_random_characters
+ (
+ MaxPlayerID,
+ (PlayerCharacterCount - 1),
+ CharactersPerPlayer,
+ (TotalCharacterCount + 1),
+ Battlemap,
+ [bm_character:get_location(Character)|ForbiddenLocations],
+ [Character|Result]
+ ).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec generate_random_battle () -> bm_battle:type().
+generate_random_battle () ->
+ BattlemapWidth = sh_roll:between(16, 64),
+ BattlemapHeight = sh_roll:between(16, 64),
+ Battlemap = bm_battlemap:random(0, BattlemapWidth, BattlemapHeight),
+ Characters = generate_random_characters(1, 8, 8, 0, Battlemap, [], []),
+ PlayersAsList = [bm_player:new(<<"0">>), bm_player:new(<<"1">>)],
+ Battle = bm_battle:new(<<"0">>, PlayersAsList, Battlemap, Characters),
+
+ Battle.
diff --git a/src/shared/io/sh_database.erl b/src/shared/io/sh_database.erl
index 5fa791f..8b52f9e 100644
--- a/src/shared/io/sh_database.erl
+++ b/src/shared/io/sh_database.erl
@@ -10,7 +10,7 @@
-export
(
[
- generate_db/0,
+ insert/4,
fetch/2,
commit/1
]
@@ -19,119 +19,33 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-get_db_node () ->
- list_to_atom("db_node@" ++ net_adm:localhost()).
+get_db_node () -> list_to_atom("db_node@" ++ net_adm:localhost()).
--spec generate_random_characters
- (
- non_neg_integer(),
- non_neg_integer(),
- non_neg_integer(),
- non_neg_integer(),
- bm_battlemap:type(),
- list(bm_location:type()),
- list(bm_character:type())
- )
- -> list(bm_character:type()).
-generate_random_characters
-(
- 0,
- 0,
- _CharactersPerPlayer,
- _TotalCharacterCount,
- _Battlemap,
- _ForbiddenLocations,
- Result
-) ->
- Result;
-generate_random_characters
-(
- MaxPlayerID,
- 0,
- CharactersPerPlayer,
- TotalCharacterCount,
- Battlemap,
- ForbiddenLocations,
- Result
-) ->
- generate_random_characters
- (
- (MaxPlayerID - 1),
- CharactersPerPlayer,
- CharactersPerPlayer,
- TotalCharacterCount,
- Battlemap,
- ForbiddenLocations,
- Result
- );
-generate_random_characters
-(
- MaxPlayerID,
- PlayerCharacterCount,
- CharactersPerPlayer,
- TotalCharacterCount,
- Battlemap,
- ForbiddenLocations,
- Result
-) ->
- NewCharacter =
- bm_character:random
- (
- TotalCharacterCount,
- list_to_binary(integer_to_list(MaxPlayerID)),
- bm_battlemap:get_width(Battlemap),
- bm_battlemap:get_height(Battlemap),
- ForbiddenLocations
- ),
- Character =
- case MaxPlayerID of
- 0 -> bm_character:set_is_active(true, NewCharacter);
- _ -> NewCharacter
- end,
-
- generate_random_characters
- (
- MaxPlayerID,
- (PlayerCharacterCount - 1),
- CharactersPerPlayer,
- (TotalCharacterCount + 1),
- Battlemap,
- [bm_character:get_location(Character)|ForbiddenLocations],
- [Character|Result]
- ).
+do_remote_operation (Op, Params) ->
+ rpc:call(get_db_node(), db_access, Op, Params).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec generate_db () -> 'ok'.
-generate_db () ->
- BattlemapWidth = sh_roll:between(16, 64),
- BattlemapHeight = sh_roll:between(16, 64),
- Battlemap = bm_battlemap:random(0, BattlemapWidth, BattlemapHeight),
- Characters = generate_random_characters(1, 8, 8, 0, Battlemap, [], []),
- PlayersAsList = [bm_player:new(<<"0">>), bm_player:new(<<"1">>)],
- Battle = bm_battle:new(<<"0">>, PlayersAsList, Battlemap, Characters),
-
- {atomic, ok} =
- rpc:call
- (
- get_db_node(),
- storage_access,
- insert,
- [battle_db, <<"0">>, any, Battle]
- ),
+-spec insert (atom(), any(), sh_db_user:permission(), any()) -> 'ok'.
+insert (DB, ObjectID, Permission, Value) ->
+ {atomic, _} = do_remote_operation(insert, [DB, ObjectID, Permission, Value]),
+ io:format
+ (
+ "~nsh_database:insert(~p) -> ok.~n",
+ [{DB, ObjectID, Permission, Value}]
+ ),
ok.
-spec fetch (atom(), any()) -> ({'ok', any()} | 'not_found').
fetch (DB, ObjectID) ->
- {atomic, Reply} =
- rpc:call(get_db_node(), storage_access, read, [DB, ObjectID]),
- io:format("~ndb_shim:fetch(~p) -> ~p.~n", [{DB, ObjectID}, Reply]),
+ {atomic, Reply} = do_remote_operation(read, [DB, ObjectID]),
+ io:format("~nsh_database:fetch(~p) -> ~p.~n", [{DB, ObjectID}, Reply]),
Reply.
-spec commit (sh_db_query:type()) -> 'ok'.
commit (Query) ->
- {atomic, ok} = rpc:call(get_db_node(), storage_access, query, [Query]),
- io:format("~ndb_shim:commit(~p) -> ok.~n", [Query]),
+ {atomic, ok} = do_remote_operation(query, [Query]),
+ io:format("~nsh_database:commit(~p) -> ok.~n", [Query]),
ok.
diff --git a/src/shared/io/sh_timed_caches_manager.erl b/src/shared/io/sh_timed_caches_manager.erl
index 7921552..ea92c08 100644
--- a/src/shared/io/sh_timed_caches_manager.erl
+++ b/src/shared/io/sh_timed_caches_manager.erl
@@ -140,7 +140,7 @@ handle_info(_, State) ->
%%%% Interface Functions
start () ->
- gen_server:start(timed_caches_manager, [], []).
+ gen_server:start(?MODULE, [], []).
new_cache (ManagerPid, DB, Heir) ->
gen_server:cast(ManagerPid, {add, DB, Heir}).