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()