# HG changeset patch # User Jeremy Thurgood # Date 1302292728 -7200 # Node ID c68f2f3efc7f23efc4d262e0cfbd442fcad40996 # Parent 16ffe6f5dbb81fbd99498abac0eb4a3457ce4e91 Item dropping and swapping. diff -r 16ffe6f5dbb8 -r c68f2f3efc7f skaapsteker/engine.py --- a/skaapsteker/engine.py Fri Apr 08 21:44:39 2011 +0200 +++ b/skaapsteker/engine.py Fri Apr 08 21:58:48 2011 +0200 @@ -151,3 +151,14 @@ """Send a DsmEvent event to all NPCs. """ super(GlobalNpcEvent, cls).post(ev=ev) + + +class ItemRepopulationEvent(UserEvent): # TODO: Needed? + + utype = "ITEM_REPOPULATION_EVENT" + + @classmethod + def post(cls, item): + """Put a Sprite back in the world. + """ + super(ItemRepopulationEvent, cls).post(item=item) diff -r 16ffe6f5dbb8 -r c68f2f3efc7f skaapsteker/levelscene.py --- a/skaapsteker/levelscene.py Fri Apr 08 21:44:39 2011 +0200 +++ b/skaapsteker/levelscene.py Fri Apr 08 21:58:48 2011 +0200 @@ -52,7 +52,6 @@ self._player.set_pos(doorway._starting_tile_pos) # Double tap stuff - self._last_keys_down = [] self._last_keydown_time = None self._last_keyup_time = None @@ -66,11 +65,11 @@ K_LEFT: action('left'), K_RIGHT: action('right'), K_UP: action('up'), - K_DOWN: action('down'), } self._fast_keys_down = set() self._slow_key_map = { + K_DOWN: action('down'), K_ESCAPE: self._quit, K_p: self._toggle_pause, } @@ -85,7 +84,7 @@ self._key_tap_map = { (K_LEFT, K_LEFT) : action('double_left'), (K_RIGHT, K_RIGHT) : action('double_right'), - (K_DOWN, K_DOWN) : action('double_down'), + (K_UP, K_UP) : action('double_up'), } def _quit(self, pause=True): @@ -240,3 +239,5 @@ self._open_dialogue(ev.npc) elif engine.CloseDialog.matches(ev): self._close_dialogue() + elif engine.ItemRepopulationEvent.matches(ev): + self._world.add(ev.item) diff -r 16ffe6f5dbb8 -r c68f2f3efc7f skaapsteker/sprites/player.py --- 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()