X-Git-Url: http://nitlanguage.org diff --git a/contrib/nitrpg/src/events.nit b/contrib/nitrpg/src/events.nit index 227469a..08d387d 100644 --- a/contrib/nitrpg/src/events.nit +++ b/contrib/nitrpg/src/events.nit @@ -24,8 +24,11 @@ import game redef class GameEntity - # Saves `event` in `self`. - fun add_event(event: GameEvent) do event.save_in(self) + # Register a new game event for this entity. + fun add_event(event: GameEvent) do + event.owner = self + event.save + end # List all events registered in this entity. # @@ -33,13 +36,12 @@ redef class GameEntity # # To add events see `add_event`. fun load_events: Array[GameEvent] do - var key = key / "events" + var req = new JsonObject + req["game"] = game.key + req["owner"] = key var res = new Array[GameEvent] - if not game.store.has_collection(key) then return res - var coll = game.store.list_collection(key) - for id in coll do - var name = id.to_s - res.add load_event(name).as(not null) + for obj in game.db.collection("events").find_all(req) do + res.add new GameEvent.from_json(game, obj) end (new EventTimeComparator).sort(res) return res @@ -50,10 +52,13 @@ redef class GameEntity # Looks for the event save file in game data. # Returns `null` if the event cannot be found. fun load_event(id: String): nullable GameEvent do - var key = key / "events" / id - if not game.store.has_key(key) then return null - var json = game.store.load_object(key) - return new GameEvent.from_json(game, json) + var req = new JsonObject + req["game"] = game.key + req["owner"] = key + req["internal_id"] = id + var res = game.db.collection("events").find(req) + if res != null then return new GameEvent.from_json(game, res) + return null end end @@ -61,10 +66,13 @@ end class GameEvent super GameEntity - redef var key is lazy do return "events" / internal_id + redef var collection_name = "events" redef var game + # Entity this event belongs to. + var owner: nullable GameEntity = null + # String used to dissociate events in the display. var kind: String @@ -76,6 +84,8 @@ class GameEvent # GameEvent uniq id used for storage. var internal_id: String is noinit + redef var key = internal_id is lazy + # Date and time of the event. var time: ISODate is noinit, writable @@ -89,19 +99,20 @@ class GameEvent # # Used to load events from json storage. init from_json(game: Game, json: JsonObject) do - self.game = game - internal_id = json["internal_id"].to_s - kind = json["kind"].to_s - time = new ISODate.from_string(json["time"].to_s) - data = json["data"].as(JsonObject) + init(game, json["kind"].as(String), json["data"].as(JsonObject)) + internal_id = json["internal_id"].as(String) + time = new ISODate.from_string(json["time"].as(String)) end - redef fun to_json do + redef fun to_json_object do var json = new JsonObject json["internal_id"] = internal_id.to_s json["kind"] = kind json["time"] = time.to_s json["data"] = data + json["game"] = game.key + var owner = self.owner + if owner != null then json["owner"] = owner.key return json end end