changeset 315:0fc2b9d1a9cb

Recreate inventory image on scene changes
author Neil Muller <drnlmuller@gmail.com>
date Sat, 09 Apr 2011 00:04:35 +0200
parents f29999d1bba6
children 2011c418698d
files skaapsteker/levelscene.py skaapsteker/sprites/player.py
diffstat 2 files changed, 25 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/skaapsteker/levelscene.py	Fri Apr 08 23:29:24 2011 +0200
+++ b/skaapsteker/levelscene.py	Sat Apr 09 00:04:35 2011 +0200
@@ -193,7 +193,9 @@
         my_item = fox.item
         if my_item:
             # Get image and resize it
-            inv_pos = self._clip_rect.left + 8, self._clip_rect.top + 8
+            inv_pos = self._clip_rect.left + 8, self._clip_rect.top + 32
+            if self._player.inventory_image is None:
+                self._player.make_inventory_image()
             self._level_surface.blit(self._player.inventory_image, inv_pos)
 
 
--- a/skaapsteker/sprites/player.py	Fri Apr 08 23:29:24 2011 +0200
+++ b/skaapsteker/sprites/player.py	Sat Apr 09 00:04:35 2011 +0200
@@ -36,6 +36,7 @@
         self.jumping = False
         self.flying = False
         self._load_images()
+        self.inventory_image = None
         # We muck with these in load for convience, so ensure they're right
         self.the_world = the_world
         self.set_facing('left')
@@ -298,11 +299,10 @@
         self.the_world.fox.item = None
 
 
-    def drop_item(self):
+    def get_sprite(self):
         my_item = self.the_world.fox.item
         if my_item is None:
-            return
-        self.discard_item()
+            return None
         world_item = getattr(self.the_world.items, my_item)
         world_item.level = self.the_world.fox.level
         world_item.pos = [a/b for a, b in zip(self.rect.center, TILE_SIZE)]
@@ -310,13 +310,30 @@
         sprite_dict.pop('level')
         sprite_dict['name'] = my_item
         sprite_dict['world'] = self.the_world
-        ItemRepopulationEvent.post(find_sprite(sprite_dict, 'items'))
+        return find_sprite(sprite_dict, 'items')
+
+
+    def drop_item(self):
+        sprite = self.get_sprite()
+        if sprite is None:
+            return
+        self.discard_item()
+        ItemRepopulationEvent.post(sprite)
 
 
     def take_item(self, item):
         self.take_item_by_name(item.name)
         # We create a scaled version of the image for the inventory display
-        image = item.image
+        item.kill()
+        print "took", item
+        self.make_inventory_image()
+
+
+    def make_inventory_image(self):
+        sprite = self.get_sprite()
+        if sprite is None:
+            self.inventory_image = None
+        image = sprite.image
         if image.get_width() > image.get_height():
             new_width = 48
             new_height = int(image.get_height() * (48.0 / image.get_width()))
@@ -324,8 +341,6 @@
             new_height = 48
             new_width = int(image.get_width() * (48.0 / image.get_height()))
         self.inventory_image = pygame.transform.scale(image, (new_width, new_height))
-        item.kill()
-        print "took", item
 
 
     def take_item_by_name(self, item_name):