# HG changeset patch # User Jeremy Thurgood # Date 1315758939 -7200 # Node ID c8d6ca296884e6af2eda4e1982b1859950ddd597 # Parent 679d9bbe268314b46250a4a554790255f9c5b3dd Better level entry points. diff -r 679d9bbe2683 -r c8d6ca296884 data/levels/dev.txt --- a/data/levels/dev.txt Sun Sep 11 18:34:37 2011 +0200 +++ b/data/levels/dev.txt Sun Sep 11 18:35:39 2011 +0200 @@ -1,6 +1,6 @@ lab XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -X...~....e.............................X +X...~....E.............................X X..~~~.................................X X......................................X X...XXX................................X @@ -27,5 +27,5 @@ X......................................X X......................................X X......................................X -XE.....................................X +X^.....................................X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX diff -r 679d9bbe2683 -r c8d6ca296884 mamba/level.py --- a/mamba/level.py Sun Sep 11 18:34:37 2011 +0200 +++ b/mamba/level.py Sun Sep 11 18:35:39 2011 +0200 @@ -10,12 +10,19 @@ EntrySprite, ExitSprite, PuddleSprite) +class InvalidMapError(Exception): + pass + + TILE_MAP = { '.': None, 'X': (TileSprite, 'wall'), 'R': (DoorSprite, 'red'), 'B': (DoorSprite, 'blue'), - 'e': (EntrySprite,), + '^': (EntrySprite, 'up'), + 'v': (EntrySprite, 'down'), + '<': (EntrySprite, 'left'), + '>': (EntrySprite, 'right'), 'E': (ExitSprite,), '~': (PuddleSprite,), } @@ -66,12 +73,26 @@ tileset_name = level_data.readline().strip() self.tileset = Tileset(tileset_name) tiles_ascii = level_data.readlines() - self.tilegroup = RenderUpdates() - self.tiles = [[self.tileset.get_tile(tile, (x, y), self.tilegroup) - for x, tile in enumerate(row.strip())] - for y, row in enumerate(tiles_ascii)] + self.setup_tiles(tiles_ascii) self.make_background() + def setup_tiles(self, tiles_ascii): + self.sprites = RenderUpdates() + self.tiles = [] + self.entry = None + for y, row in enumerate(tiles_ascii): + tile_row = [] + for x, tile_char in enumerate(row.strip()): + tile = self.tileset.get_tile(tile_char, (x, y), self.sprites) + tile_row.append(tile) + if isinstance(tile, EntrySprite): + if self.entry is not None: + raise InvalidMapError("Too many entry points.") + self.entry = tile + self.tiles.append(tile_row) + if self.entry is None: + raise InvalidMapError("Not enough entry points.") + def get_tile_size(self): return (len(self.tiles[0]), len(self.tiles)) @@ -84,3 +105,6 @@ self.background = Surface(self.get_size()) [self.background.blit(self.tileset.floor, tile_sizify((x, y))) for x in range(sx) for y in range(sy)] + + def get_entry(self): + return (self.entry.tile_pos, self.entry.direction) diff -r 679d9bbe2683 -r c8d6ca296884 mamba/sprites.py --- a/mamba/sprites.py Sun Sep 11 18:34:37 2011 +0200 +++ b/mamba/sprites.py Sun Sep 11 18:35:39 2011 +0200 @@ -24,6 +24,7 @@ self.image = load_image('tiles/%s/%s.png' % (tileset, image_name)) def set_tile_pos(self, tile_pos): + self.tile_pos = tile_pos self.rect = self.image.get_rect().move(tile_sizify(tile_pos)) @@ -46,9 +47,12 @@ class EntrySprite(SingleImageTileSprite): - # image_name = 'entry' image_name = 'puddle-r' + def __init__(self, tileset_name, direction, *groups): + self.direction = direction + super(EntrySprite, self).__init__(tileset_name, direction) + class ExitSprite(SingleImageTileSprite): # image_name = 'exit' diff -r 679d9bbe2683 -r c8d6ca296884 mamba/widgets/level.py --- a/mamba/widgets/level.py Sun Sep 11 18:34:37 2011 +0200 +++ b/mamba/widgets/level.py Sun Sep 11 18:35:39 2011 +0200 @@ -11,7 +11,7 @@ def draw(self, surface): surface.blit(self.level.background, (0, 0)) - self.level.tilegroup.draw(surface) + self.level.sprites.draw(surface) def event(self, event): # TODO: Implement