Mercurial > mamba
changeset 243:f9cc701a6be0
Hook up tunnels.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Thu, 15 Sep 2011 00:14:23 +0200 |
parents | c2d9051068a0 |
children | c629dabe2038 |
files | mamba/level.py mamba/sprites.py mamba/world.py |
diffstat | 3 files changed, 24 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/mamba/level.py Thu Sep 15 00:12:01 2011 +0200 +++ b/mamba/level.py Thu Sep 15 00:14:23 2011 +0200 @@ -173,16 +173,17 @@ tile.use_variant(*orientation) def setup_sprites(self, sprites_ascii): - self.extra_sprites = [] + self.extra_sprites = {} for sprite_ascii in sprites_ascii: pos, _sep, rest = sprite_ascii.partition(':') pos = [int(x.strip()) for x in pos.split(',')] class_name, rest = rest.split(None, 1) args = rest.split() + sprite_id, args = args[0], args[1:] cls = sprites.find_sprite(class_name) sprite = cls(*args) sprite.set_tile_pos(pos) - self.extra_sprites.append(sprite) + self.extra_sprites[sprite_id] = sprite self.sprites.add(sprite) def is_same_tile(self, tile, x, y):
--- a/mamba/sprites.py Thu Sep 15 00:12:01 2011 +0200 +++ b/mamba/sprites.py Thu Sep 15 00:14:23 2011 +0200 @@ -135,9 +135,9 @@ def get_solid(self, snake, segment): return self.solid - def interact(self, snake, segment): - if self.get_solid(snake, segment): - snake.crash() + def interact(self, world, segment): + if self.get_solid(world.snake, segment): + world.snake.crash() class SingleImageTileSprite(TileSprite): @@ -200,8 +200,8 @@ image_name = 'arrow-r' name = 'exit' - def interact(self, snake, segment): - snake.exit_level() + def interact(self, world, segment): + world.snake.exit_level() class TunnelSprite(SingleImageTileSprite): @@ -209,17 +209,19 @@ name = 'tunnel entrance' tileset = 'lab' - def __init__(self, sprite_id, other_id, direction): + def __init__(self, other_id, direction): super(TunnelSprite, self).__init__(tile_char=None) - self.sprite_id = sprite_id self.other_id = other_id self.direction = { 'north': UP, 'south': DOWN, 'east': LEFT, 'west': RIGHT, }[direction] - def interact(self, snake, segment): - print "Warping to other entrace", self.other_id + def interact(self, world, segment): + head = world.snake.head + if segment is head and head.orientation == self.direction: + other = world.get_sprite(self.other_id) + head.shift_tile((other.tile_pos, self.direction)) class PuddleSprite(SingleImageTileSprite): @@ -237,17 +239,17 @@ print "Drownded. :-(" return True - def interact(self, snake, segment): + def interact(self, world, segment): segment.set_colour(segment.GREEN) - super(PuddleSprite, self).interact(snake, segment) + super(PuddleSprite, self).interact(world.snake, segment) class EdibleTile(SingleImageTileSprite): - def interact(self, snake, segment): + def interact(self, world, segment): if not segment.is_head: return - snake.head.mouth_open() - self.eat(snake) + world.snake.head.mouth_open() + self.eat(world.snake) self.alive = False self.kill() @@ -284,5 +286,5 @@ self.image = self.load_image( *colour_with_fittings("spray", self.tileset, colour)) - def interact(self, snake, segment): + def interact(self, world, segment): segment.set_colour(COLOURS[self.colour])
--- a/mamba/world.py Thu Sep 15 00:12:01 2011 +0200 +++ b/mamba/world.py Thu Sep 15 00:14:23 2011 +0200 @@ -20,6 +20,9 @@ self.level.draw(surface) self.snake.draw(surface) + def get_sprite(self, sprite_id): + return self.level.extra_sprites[sprite_id] + def update(self): prev = self._prev self._prev = time.time() @@ -34,7 +37,7 @@ def interact(self, segment): tiles = segment.filter_collisions(self.level.sprites) for tile in tiles: - tile.interact(self.snake, segment) + tile.interact(self, segment) def pause(self): self._paused = True