# HG changeset patch # User Neil Muller # Date 1302300275 -7200 # Node ID 0fc2b9d1a9cbc420fdeea18c26ba20c48256e6a0 # Parent f29999d1bba6f31bd053aedcac5341cf2a0884d2 Recreate inventory image on scene changes diff -r f29999d1bba6 -r 0fc2b9d1a9cb skaapsteker/levelscene.py --- 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) diff -r f29999d1bba6 -r 0fc2b9d1a9cb skaapsteker/sprites/player.py --- 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):