diff skaapsteker/sprites/player.py @ 290:c68f2f3efc7f

Item dropping and swapping.
author Jeremy Thurgood <firxen@gmail.com>
date Fri, 08 Apr 2011 21:58:48 +0200
parents 8cac6ff88a9d
children 15b2be883a40
line wrap: on
line diff
--- a/skaapsteker/sprites/player.py	Fri Apr 08 21:44:39 2011 +0200
+++ b/skaapsteker/sprites/player.py	Fri Apr 08 21:58:48 2011 +0200
@@ -3,11 +3,11 @@
 import pygame.transform
 import time
 
-from ..sprites.base import TILE_SIZE, PC_LAYER, MONSTER_LAYER
+from ..sprites.base import find_sprite, TILE_SIZE, PC_LAYER, MONSTER_LAYER
 from ..physics import Sprite
 from ..constants import Layers
 from ..data import get_files, load_image
-from ..engine import PlayerDied
+from ..engine import PlayerDied, ItemRepopulationEvent
 
 
 class Player(Sprite):
@@ -200,15 +200,15 @@
         self.sprinting = 2
         self._sprint_start_time = time.time()
 
-    def action_double_down(self):
-        print 'double down tap'
-
     def action_double_right(self):
         if self.sprinting > 0:
             return
         self.sprinting =  2
         self._sprint_start_time = time.time()
 
+    def action_double_up(self):
+        pass
+
     def action_right(self):
         if self.facing != 'right':
             self.facing = 'right'
@@ -227,8 +227,10 @@
 
     def action_down(self):
         print self._touching_actionables
-        for actionable in self._touching_actionables[:1]:
-            actionable.player_action(self)
+        if self._touching_actionables:
+            self._touching_actionables[0].player_action(self)
+        elif self.the_world.fox.item is not None:
+            self.drop_item()
 
 
     def action_fire1(self):
@@ -291,11 +293,23 @@
                             self._image_dict[sprint_key].append(sprint_image)
 
 
-    def take_item(self, item):
+    def drop_item(self):
         my_item = self.the_world.fox.item
-        if my_item is not None:
-            print "I already have", my_item
+        if my_item is None:
             return
+        self.the_world.fox.item = 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)]
+        sprite_dict = world_item.copy()
+        sprite_dict.pop('level')
+        sprite_dict['name'] = my_item
+        sprite_dict['world'] = self.the_world
+        ItemRepopulationEvent.post(find_sprite(sprite_dict, 'items'))
+
+
+    def take_item(self, item):
+        self.drop_item()
         getattr(self.the_world.items, item.name).level = "_limbo"
         self.the_world.fox.item = item.name
         item.kill()