nitrpg: events and achievements have owners
authorAlexandre Terrasa <alexandre@moz-code.org>
Thu, 25 Jun 2015 02:39:46 +0000 (22:39 -0400)
committerAlexandre Terrasa <alexandre@moz-code.org>
Sat, 28 Nov 2015 17:59:21 +0000 (12:59 -0500)
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

contrib/nitrpg/src/achievements.nit
contrib/nitrpg/src/events.nit

index 6bb26d8..24b50ad 100644 (file)
@@ -77,6 +77,12 @@ class Achievement
 
        redef var game
 
+       redef var key is lazy do
+               var owner = self.owner
+               if owner == null then return id
+               return "{owner.key}-{id}"
+       end
+
        # Uniq ID for this achievement.
        var id: String
 
@@ -92,6 +98,9 @@ class Achievement
        # Is this achievement unlocked by somebody?
        var is_unlocked: Bool is lazy do return not load_events.is_empty
 
+       # Game entity this achievement is about.
+       var owner: nullable GameEntity = null
+
        # Init `self` from a `json` object.
        #
        # Used to load achievements from storage.
@@ -105,6 +114,8 @@ class Achievement
                json["name"] = name
                json["desc"] = desc
                json["reward"] = reward
+               json["game"] = game.key
+               if owner != null then json["owner"] = owner.key
                return json
        end
 end
index a233573..bd1ee58 100644 (file)
@@ -24,8 +24,10 @@ import game
 
 redef class GameEntity
 
-       # Saves `event` in `self`.
-       fun add_event(event: GameEvent) do event.save_in(self.key)
+       fun add_event(event: GameEvent) do
+               event.owner = self
+               event.save
+       end
 
        # List all events registered in this entity.
        #
@@ -64,6 +66,9 @@ class GameEvent
 
        redef var game
 
+       # Entity this event belongs to.
+       var owner: nullable GameEntity = null
+
        # String used to dissociate events in the display.
        var kind: String
 
@@ -101,6 +106,8 @@ class GameEvent
                json["kind"] = kind
                json["time"] = time.to_s
                json["data"] = data
+               json["game"] = game.key
+               if owner != null then json["owner"] = owner.key
                return json
        end
 end