comparison skaapsteker/sprites/player.py @ 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 0dc80b153580
comparison
equal deleted inserted replaced
314:f29999d1bba6 315:0fc2b9d1a9cb
34 self.running = False 34 self.running = False
35 self.sprinting = 0 35 self.sprinting = 0
36 self.jumping = False 36 self.jumping = False
37 self.flying = False 37 self.flying = False
38 self._load_images() 38 self._load_images()
39 self.inventory_image = None
39 # We muck with these in load for convience, so ensure they're right 40 # We muck with these in load for convience, so ensure they're right
40 self.the_world = the_world 41 self.the_world = the_world
41 self.set_facing('left') 42 self.set_facing('left')
42 self.set_image() 43 self.set_image()
43 self.set_pos((0, 0)) 44 self.set_pos((0, 0))
296 297
297 def discard_item(self): 298 def discard_item(self):
298 self.the_world.fox.item = None 299 self.the_world.fox.item = None
299 300
300 301
301 def drop_item(self): 302 def get_sprite(self):
302 my_item = self.the_world.fox.item 303 my_item = self.the_world.fox.item
303 if my_item is None: 304 if my_item is None:
304 return 305 return None
305 self.discard_item()
306 world_item = getattr(self.the_world.items, my_item) 306 world_item = getattr(self.the_world.items, my_item)
307 world_item.level = self.the_world.fox.level 307 world_item.level = self.the_world.fox.level
308 world_item.pos = [a/b for a, b in zip(self.rect.center, TILE_SIZE)] 308 world_item.pos = [a/b for a, b in zip(self.rect.center, TILE_SIZE)]
309 sprite_dict = world_item.copy() 309 sprite_dict = world_item.copy()
310 sprite_dict.pop('level') 310 sprite_dict.pop('level')
311 sprite_dict['name'] = my_item 311 sprite_dict['name'] = my_item
312 sprite_dict['world'] = self.the_world 312 sprite_dict['world'] = self.the_world
313 ItemRepopulationEvent.post(find_sprite(sprite_dict, 'items')) 313 return find_sprite(sprite_dict, 'items')
314
315
316 def drop_item(self):
317 sprite = self.get_sprite()
318 if sprite is None:
319 return
320 self.discard_item()
321 ItemRepopulationEvent.post(sprite)
314 322
315 323
316 def take_item(self, item): 324 def take_item(self, item):
317 self.take_item_by_name(item.name) 325 self.take_item_by_name(item.name)
318 # We create a scaled version of the image for the inventory display 326 # We create a scaled version of the image for the inventory display
319 image = item.image 327 item.kill()
328 print "took", item
329 self.make_inventory_image()
330
331
332 def make_inventory_image(self):
333 sprite = self.get_sprite()
334 if sprite is None:
335 self.inventory_image = None
336 image = sprite.image
320 if image.get_width() > image.get_height(): 337 if image.get_width() > image.get_height():
321 new_width = 48 338 new_width = 48
322 new_height = int(image.get_height() * (48.0 / image.get_width())) 339 new_height = int(image.get_height() * (48.0 / image.get_width()))
323 else: 340 else:
324 new_height = 48 341 new_height = 48
325 new_width = int(image.get_width() * (48.0 / image.get_height())) 342 new_width = int(image.get_width() * (48.0 / image.get_height()))
326 self.inventory_image = pygame.transform.scale(image, (new_width, new_height)) 343 self.inventory_image = pygame.transform.scale(image, (new_width, new_height))
327 item.kill()
328 print "took", item
329 344
330 345
331 def take_item_by_name(self, item_name): 346 def take_item_by_name(self, item_name):
332 self.drop_item() 347 self.drop_item()
333 getattr(self.the_world.items, item_name).level = "_limbo" 348 getattr(self.the_world.items, item_name).level = "_limbo"