changeset 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 821b322e903b
children 6ef7cc57b94b
files gamelib/gamescreen.py gamelib/state.py
diffstat 2 files changed, 16 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/gamelib/gamescreen.py	Wed Sep 08 14:02:11 2010 +0200
+++ b/gamelib/gamescreen.py	Wed Sep 08 17:33:07 2010 +0200
@@ -116,8 +116,8 @@
 
     def show_detail(self, detail):
         self.clear_detail()
-        w, h = self.state.set_current_detail(detail)
-        self.detail.set_image_rect(Rect(0, 0, w, h))
+        detail_obj = self.state.set_current_detail(detail)
+        self.detail.set_image_rect(Rect((0, 0), detail_obj.get_detail_size()))
         self.add_centered(self.detail)
         self.state.do_enter_detail()
 
--- 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):