changeset 199:986e72d2cb4d

Rejiggered entrances and shifted directions around.
author Jeremy Thurgood <firxen@gmail.com>
date Wed, 14 Sep 2011 19:48:20 +0200
parents 2876658d0b98
children d920768357de
files data/levels/dev.txt mamba/constants.py mamba/level.py mamba/snake.py mamba/sprites.py mamba/widgets/game.py
diffstat 6 files changed, 52 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/data/levels/dev.txt	Wed Sep 14 19:29:15 2011 +0200
+++ b/data/levels/dev.txt	Wed Sep 14 19:48:20 2011 +0200
@@ -28,5 +28,5 @@
 X......................................X
 X......................................X
 X......................................X
-X^.....................................X
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+X......................................X
+XeXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--- a/mamba/constants.py	Wed Sep 14 19:29:15 2011 +0200
+++ b/mamba/constants.py	Wed Sep 14 19:48:20 2011 +0200
@@ -26,6 +26,9 @@
 FOCUS_COLOR = 'yellow'
 COLOR = 'black'
 
+# Directions
+UP, DOWN, LEFT, RIGHT = [(0, -1), (0, 1), (-1, 0), (1, 0)]
+
 # Default command-line options
 DEFAULTS = {
     'debug': False,
--- a/mamba/level.py	Wed Sep 14 19:29:15 2011 +0200
+++ b/mamba/level.py	Wed Sep 14 19:48:20 2011 +0200
@@ -5,9 +5,9 @@
 from pygame.surface import Surface
 from pygame.sprite import RenderUpdates
 
+from mamba.constants import UP, DOWN, LEFT, RIGHT
 from mamba.data import load_file
 from mamba import sprites
-from mamba.snake import Snake
 
 
 class InvalidMapError(Exception):
@@ -24,10 +24,7 @@
         solid=True),
     'R': mktile(sprites.DoorSprite, colour='red'),
     'B': mktile(sprites.DoorSprite, colour='blue'),
-    '^': mktile(sprites.EntrySprite, direction=Snake.UP),
-    'v': mktile(sprites.EntrySprite, direction=Snake.DOWN),
-    '<': mktile(sprites.EntrySprite, direction=Snake.LEFT),
-    '>': mktile(sprites.EntrySprite, direction=Snake.RIGHT),
+    'e': mktile(sprites.EntrySprite),
     'E': mktile(sprites.ExitSprite),
     '~': mktile(sprites.PuddleSprite),
     'r': mktile(sprites.Painter, colour='red'),
@@ -122,14 +119,32 @@
                 tile = self.tileset.get_tile(tile_char, (x, y), self.sprites)
                 tile_row.append(tile)
                 if isinstance(tile, sprites.EntrySprite):
-                    if self.entry is not None:
-                        raise InvalidMapError("Too many entry points.")
-                    self.entry = tile
+                    self.rejigger_entry_tile(tile)
             self.tiles.append(tile_row)
         if self.entry is None:
             raise InvalidMapError("Not enough entry points.")
         self.set_tile_orientations()
 
+    def rejigger_entry_tile(self, tile):
+        if self.entry is not None:
+            raise InvalidMapError("Too many entry points.")
+        self.entry = tile
+        direction = []
+        x, y = tile.tile_pos
+        if x == 0:
+            direction.append(RIGHT)
+        elif x == self.tile_size[0] - 1:
+            direction.append(LEFT)
+        if y == 0:
+            direction.append(DOWN)
+        elif y == self.tile_size[1] - 1:
+            direction.append(UP)
+        if len(direction) < 1:
+            raise InvalidMapError("Entry point must be along an edge.")
+        if len(direction) > 1:
+            raise InvalidMapError("Entry point must not be on a corner.")
+        tile.set_direction(direction[0])
+
     def set_tile_orientations(self):
         tiles = [tile  # This is a scary listcomp. It makes me happy.
                  for row in self.tiles
--- a/mamba/snake.py	Wed Sep 14 19:29:15 2011 +0200
+++ b/mamba/snake.py	Wed Sep 14 19:48:20 2011 +0200
@@ -2,7 +2,7 @@
 
 from pygame.sprite import Group, spritecollide
 
-from mamba.constants import TILE_SIZE
+from mamba.constants import TILE_SIZE, UP, DOWN, LEFT, RIGHT
 from mamba.sprites import BaseSprite
 from mamba.engine import SnakeDiedEvent
 from mamba import mutators
@@ -10,8 +10,6 @@
 
 class Snake(object):
 
-    UP, DOWN, LEFT, RIGHT = [(0, -1), (0, 1), (-1, 0), (1, 0)]
-
     def __init__(self, tile_pos, orientation):
         self.segments = self.create_segments(tile_pos, orientation)
         self.segment_group = Group()
@@ -91,7 +89,7 @@
         super(Segment, self).__init__()
         self.set_base_image(image_name)
         self._colour_overlay = self.GREEN
-        self.orientation = Snake.UP
+        self.orientation = UP
 
         self.make_images()
         self.update_image()
@@ -113,10 +111,10 @@
     def make_images(self):
         self._images = {}
         for orientation, muts in [
-            (Snake.RIGHT, (mutators.RIGHT,)),
-            (Snake.LEFT, (mutators.LEFT,)),
-            (Snake.UP, (mutators.UP,)),
-            (Snake.DOWN, (mutators.DOWN,)),
+            (RIGHT, (mutators.RIGHT,)),
+            (LEFT, (mutators.LEFT,)),
+            (UP, (mutators.UP,)),
+            (DOWN, (mutators.DOWN,)),
             ]:
             all_muts = (self._colour_overlay,) + self._detail_mutators + muts
             self._images[orientation] = self.load_image(self._base_image,
--- a/mamba/sprites.py	Wed Sep 14 19:29:15 2011 +0200
+++ b/mamba/sprites.py	Wed Sep 14 19:48:20 2011 +0200
@@ -1,7 +1,8 @@
 from pygame.sprite import Sprite
+from pygame import Rect
 
 from mamba.data import load_image
-from mamba.constants import TILE_SIZE
+from mamba.constants import TILE_SIZE, UP, DOWN, LEFT, RIGHT
 from mamba import mutators
 
 
@@ -109,7 +110,7 @@
 
     def set_tile_pos(self, tile_pos):
         self.tile_pos = tile_pos
-        self.rect = self.image.get_rect().move(tile_sizify(tile_pos))
+        self.rect = Rect(tile_sizify(tile_pos), TILE_SIZE)
 
     def get_variant(self, top, bottom, left, right):
         if self.variants is None:
@@ -157,13 +158,20 @@
         return COLOURS[self.colour] != segment._colour_overlay
 
 
-class EntrySprite(SingleImageTileSprite):
+class EntrySprite(TileSprite):
     image_name = 'arrow-r'
     name = 'entrance'
 
-    def __init__(self, direction, **kw):
+    def set_direction(self, direction):
         self.direction = direction
-        super(EntrySprite, self).__init__(**kw)
+        mutator = {
+            UP: mutators.UP,
+            DOWN: mutators.DOWN,
+            LEFT: mutators.LEFT,
+            RIGHT: mutators.RIGHT,
+            }[direction]
+        print "entrance", direction
+        self.image = self.load_image(self.image_name, (mutator,))
 
 
 class ExitSprite(SingleImageTileSprite):
--- a/mamba/widgets/game.py	Wed Sep 14 19:29:15 2011 +0200
+++ b/mamba/widgets/game.py	Wed Sep 14 19:48:20 2011 +0200
@@ -3,9 +3,9 @@
 from pygame.rect import Rect
 from pygame.locals import KEYDOWN, K_LEFT, K_RIGHT, K_DOWN, K_UP
 
+from mamba.constants import UP, DOWN, LEFT, RIGHT
 from mamba.widgets.base import Widget
 from mamba.widgets.messagebox import MessageBox
-from mamba.snake import Snake
 from mamba.engine import SnakeDiedEvent
 
 
@@ -19,10 +19,10 @@
 
     def create_action_map(self):
         actions = {}
-        actions[K_LEFT] = (self.world.snake.set_orientation, (Snake.LEFT,))
-        actions[K_RIGHT] = (self.world.snake.set_orientation, (Snake.RIGHT,))
-        actions[K_DOWN] = (self.world.snake.set_orientation, (Snake.DOWN,))
-        actions[K_UP] = (self.world.snake.set_orientation, (Snake.UP,))
+        actions[K_LEFT] = (self.world.snake.set_orientation, (LEFT,))
+        actions[K_RIGHT] = (self.world.snake.set_orientation, (RIGHT,))
+        actions[K_DOWN] = (self.world.snake.set_orientation, (DOWN,))
+        actions[K_UP] = (self.world.snake.set_orientation, (UP,))
         return actions
 
     def event(self, ev):