1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
-module(database_shim).
-export
(
[
generate_db/1,
fetch/2
]
).
-include("timed_cache_data.hrl").
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
create_db (_Heir) ->
ets:new
(
db_shim,
[
set,
public,
named_table,
{keypos, 1},
{read_concurrency, true}
]
).
add_to_db (ID, Val) ->
ets:store(db_shim, {ID, Val}).
generate_char_instances (Battlemap, Characters) ->
lists:map
(
fun (Char) ->
{
Char#character.id,
#character_instance
{
x = rand:uniform(Battlemap#battlemap.width - 1),
y = rand:uniform(Battlemap#battlemap.height - 1),
team = (rand:uniform(2) - 1)
}
}
end,
Characters
).
generate_map_instance (CharInts) ->
#battlemap_instance
{
id = <<"0">>,
chars = dict:from_list(CharInts),
curr_player = <<"0">>,
rem_chars = [],
last_turn = []
}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
generate_db (Heir) ->
Pid = self(),
spawn(fun () -> create_db(Heir), Pid ! ok, receive ok -> ok end end),
receive
ok -> ok
end,
Battlemap = battlemap_shim:generate(),
Characters = character_shim:generate(rand:uniform(14) + 2),
CharacterInsts = generate_char_instances(Battlemap, Characters),
BattlemapInstance = generate_map_instance(CharacterInsts),
add_to_db({battlemap_db, Battlemap#battlemap.id}, Battlemap),
lists:map
(
fun (Char) ->
add_to_db({character_sb, Char#character.id}, Char)
end,
Characters
),
add_to_db
(
{battlemap_instance_db, BattlemapInstance#battlemap_instance.id},
BattlemapInstance
).
fetch (DB, Object_ID) ->
ets:first(db_shim), %% It appears the db does not exist...
case ets:lookup(db_shim, {DB, Object_ID}) of
[{_Key, Value}] -> {ok, Value};
[] -> nothing
end.
|