Mercurial > mamba
changeset 81:c8d6ca296884
Better level entry points.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sun, 11 Sep 2011 18:35:39 +0200 |
parents | 679d9bbe2683 |
children | 136d96b1aa75 |
files | data/levels/dev.txt mamba/level.py mamba/sprites.py mamba/widgets/level.py |
diffstat | 4 files changed, 37 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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)
--- 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'
--- 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