summaryrefslogtreecommitdiff
blob: 243051b2b00f5a5fe282eaba0ceb781983c62a3f (plain)
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
91
92
93
94
-module(database_shim).
-export
(
   [
      generate_db/1,
      fetch/2,
      commit/3
   ]
).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
create_db (_Heir) ->
   ets:new
   (
      db_shim,
      [
         set,
         public,
         named_table,
         {keypos, 1},
         {read_concurrency, true}
      ]
   ),
   io:format("~ndb_shim ets created.~n").

add_to_db (ID, Val) ->
   io:format("~nadd to db_shim: ~p.~n", [{ID, Val}]),
   ets:insert(db_shim, {ID, Val}).

generate_char_instances (Battlemap, Characters) ->
   lists:map
   (
      fun (Char) ->
         {
            character:get_id(Char),
            character_instance:new_instance_of
            (
               Char,
               (rand:uniform(2) - 1), % team,
               {
                  rand:uniform(battlemap:get_width(Battlemap) - 1), % X
                  rand:uniform(battlemap:get_heigth(Battlemap) - 1)  % Y
               }
            )
         }
      end,
      Characters
   ).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
generate_db (Heir) ->
   Pid = self(),
   spawn(fun () -> create_db(Heir), Pid ! ok, receive ok -> ok end end),
   receive
      ok -> ok
   end,
   Players = [<<"0">>, <<"1">>],
   Battlemap = battlemap_shim:generate_random(),
   Characters = character_shim:generate_random(rand:uniform(12) + 4),
   CharacterInsts = generate_char_instances(Battlemap, Characters),
   BattlemapInstance =
      battlemap_instance_shim:generate_random
      (
         CharacterInsts,
         Players
      ),
   add_to_db({battlemap_db, battlemap:get_id(Battlemap)}, Battlemap),
   lists:map
   (
      fun (Char) ->
         add_to_db({character_db, character:get_id(Char)}, Char)
      end,
      Characters
   ),
   add_to_db
   (
      {battlemap_instance_db, battlemap_instance:get_id(BattlemapInstance)},
      BattlemapInstance
   ).

fetch (DB, ObjectID) ->
   io:format("~ndb_shim lookup: ~p.~n", [{DB, ObjectID}]),
   case ets:lookup(db_shim, {DB, ObjectID}) of
      [{_Key, Value}] -> {ok, Value};
      [] -> nothing
   end.

commit (DB, ObjectID, Value) ->
   add_to_db({DB, ObjectID}, Value),
   timed_cache:invalidate(DB, ObjectID).