diff gamelib/state.py @ 55:2e2f6ff54780

Part of the cryo door puzzle.
author Jeremy Thurgood <firxen@gmail.com>
date Mon, 23 Aug 2010 13:27:50 +0200
parents 8f1fccb8cadf
children 75bf3d3689e9
line wrap: on
line diff
--- a/gamelib/state.py	Mon Aug 23 13:23:38 2010 +0200
+++ b/gamelib/state.py	Mon Aug 23 13:27:50 2010 +0200
@@ -63,7 +63,24 @@
         print msg
 
 
-class Scene(object):
+class StatefulGizmo(object):
+
+    # initial data (optional, defaults to none)
+    INITIAL_DATA = None
+
+    def __init__(self):
+        self.data = {}
+        if self.INITIAL_DATA:
+            self.data.update(self.INITIAL_DATA)
+
+    def set_data(self, key, value):
+        self.data[key] = value
+
+    def get_data(self, key):
+        return self.data.get(key, None)
+
+
+class Scene(StatefulGizmo):
     """Base class for scenes."""
 
     # sub-folder to look for resources in
@@ -75,10 +92,8 @@
     # name of scene (optional, defaults to folder)
     NAME = None
 
-    # initial scene data (optional, defaults to none)
-    INITIAL_DATA = None
-
     def __init__(self, state):
+        StatefulGizmo.__init__(self)
         # scene name
         self.name = self.NAME if self.NAME is not None else self.FOLDER
         # link back to state object
@@ -86,9 +101,6 @@
         # map of thing names -> Thing objects
         self.things = {}
         self._background = get_image(self.FOLDER, self.BACKGROUND)
-        self.data = {}
-        if self.INITIAL_DATA:
-            self.data.update(self.INITIAL_DATA)
 
     def add_item(self, item):
         self.state.add_item(item)
@@ -112,7 +124,7 @@
         self.draw_things(surface)
 
 
-class Thing(object):
+class Thing(StatefulGizmo):
     """Base class for things in a scene that you can interact with."""
 
     # sub-folder to look for resources in
@@ -122,6 +134,7 @@
     IMAGE = None
 
     def __init__(self, name, rect):
+        StatefulGizmo.__init__(self)
         self.name = name
         # area within scene that triggers calls to interact
         self.rect = rect