diff gamelib/state.py @ 526:a984cf27b527

Defer some resource loading until it's actually necessary.
author Jeremy Thurgood <firxen@gmail.com>
date Wed, 08 Sep 2010 17:33:07 +0200
parents dfb6e57feebe
children 0ce08d5e2acb
line wrap: on
line diff
--- a/gamelib/state.py	Wed Sep 08 14:02:11 2010 +0200
+++ b/gamelib/state.py	Wed Sep 08 17:33:07 2010 +0200
@@ -133,7 +133,7 @@
             self.current_detail = None
         else:
             self.current_detail = self.detail_views[name]
-            return self.current_detail.get_detail_size()
+            return self.current_detail
 
     def add_inventory_item(self, name):
         self.inventory.append(self.items[name])
@@ -250,10 +250,7 @@
         self.state = state
         # map of thing names -> Thing objects
         self.things = {}
-        if self.BACKGROUND is not None:
-            self._background = get_image(self.FOLDER, self.BACKGROUND)
-        else:
-            self._background = None
+        self._background = None
 
     def add_item(self, item):
         self.state.add_item(item)
@@ -290,7 +287,12 @@
                 Rect(400-w/2, 5, w, h))
             description.draw_all(sub)
 
+    def _cache_background(self):
+        if self.BACKGROUND and not self._background:
+            self._background = get_image(self.FOLDER, self.BACKGROUND)
+
     def draw_background(self, surface):
+        self._cache_background()
         if self._background is not None:
             surface.blit(self._background, self.OFFSET, None)
         else:
@@ -350,6 +352,7 @@
         self.update_current_thing(pos)
 
     def get_detail_size(self):
+        self._cache_background()
         return self._background.get_size()
 
 
@@ -506,13 +509,18 @@
         self.tool_name = name
         if self.TOOL_NAME is not None:
             self.tool_name = self.TOOL_NAME
-        self.inventory_image = get_image('items', self.INVENTORY_IMAGE)
+        self.inventory_image = None
+
+    def _cache_inventory_image(self):
+        if not self.inventory_image:
+            self.inventory_image = get_image('items', self.INVENTORY_IMAGE)
 
     def set_state(self, state):
         assert self.state is None
         self.state = state
 
     def get_inventory_image(self):
+        self._cache_inventory_image()
         return self.inventory_image
 
     def get_inverse_interact(self, tool):