# HG changeset patch # User Simon Cross # Date 1316038463 -7200 # Node ID f9cc701a6be082ed81023e37f12347aec12156e7 # Parent c2d9051068a07ee6072ef278694eaa5552d67ec8 Hook up tunnels. diff -r c2d9051068a0 -r f9cc701a6be0 mamba/level.py --- 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): diff -r c2d9051068a0 -r f9cc701a6be0 mamba/sprites.py --- 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]) diff -r c2d9051068a0 -r f9cc701a6be0 mamba/world.py --- 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