# HG changeset patch # User Jeremy Thurgood # Date 1316022500 -7200 # Node ID 986e72d2cb4da49dba7b634fb15fc164a37f713d # Parent 2876658d0b987a29069c456a0e07dcd2b8776447 Rejiggered entrances and shifted directions around. diff -r 2876658d0b98 -r 986e72d2cb4d data/levels/dev.txt --- 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 diff -r 2876658d0b98 -r 986e72d2cb4d mamba/constants.py --- 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, diff -r 2876658d0b98 -r 986e72d2cb4d mamba/level.py --- 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 diff -r 2876658d0b98 -r 986e72d2cb4d mamba/snake.py --- 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, diff -r 2876658d0b98 -r 986e72d2cb4d mamba/sprites.py --- 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): diff -r 2876658d0b98 -r 986e72d2cb4d mamba/widgets/game.py --- 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):