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