Mercurial > mamba
diff mamba/level.py @ 230:e4f983b68ef5
Start of advanced sprite definitions.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Wed, 14 Sep 2011 23:28:25 +0200 |
parents | 066198428ee9 |
children | bf7bf54ed6ff |
line wrap: on
line diff
--- a/mamba/level.py Wed Sep 14 23:07:56 2011 +0200 +++ b/mamba/level.py Wed Sep 14 23:28:25 2011 +0200 @@ -77,7 +77,6 @@ class Level(object): def __init__(self, level_name): self.level_name = level_name - self.tiles_ascii = '' self.load_level_data() def load_level_data(self): @@ -89,8 +88,12 @@ tileset_name = level_data.readline().strip() self.tileset = Tileset(tileset_name) tiles_ascii = [line.strip() for line in level_data.readlines()] + end = tiles_ascii.index("end") + sprites_ascii = tiles_ascii[end + 1:] + tiles_ascii = tiles_ascii[:end] self.tiles_ascii = tiles_ascii - self.setup_tiles(tiles_ascii) + self.sprites_ascii = sprites_ascii + self.setup_level(tiles_ascii, sprites_ascii) self.make_background() def save_level(self): @@ -105,9 +108,16 @@ else: save_file.write('.') save_file.write('\n') + save_file.write('end\n') + for sprite_ascii in self.sprites_ascii: + save_file.write(sprite_ascii) + + def setup_level(self, tiles_ascii, sprites_ascii): + self.sprites = RenderUpdates() + self.setup_tiles(tiles_ascii) + self.setup_sprites(sprites_ascii) def setup_tiles(self, tiles_ascii): - self.sprites = RenderUpdates() self.tiles = [] self.entry = None self.tile_size = (len(tiles_ascii[0]), len(tiles_ascii)) @@ -156,6 +166,21 @@ orientation = self.get_tile_orientation(tile) tile.use_variant(*orientation) + def setup_sprites(self, sprites_ascii): + 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() + print pos, class_name, args + cls = sprites.find_sprite(class_name) + sprite = cls(*args) + sprite.set_tile_pos(pos) + print sprite + self.extra_sprites.append(sprite) + self.sprites.add(sprite) + def is_same_tile(self, tile, x, y): """Is there a tile of the same type?""" if tile.tile_char is None: @@ -225,5 +250,5 @@ def restart(self): """Reset the level state""" - self.setup_tiles(self.tiles_ascii) + self.setup_level(self.tiles_ascii, self.sprites_ascii) self.make_background()