diff nagslang/level.py @ 139:d1f543ff0805

YAML levels
author Stefano Rivera <stefano@rivera.za.net>
date Mon, 02 Sep 2013 18:27:58 +0200
parents 02423600d958
children 0c49627920eb
line wrap: on
line diff
--- a/nagslang/level.py	Mon Sep 02 18:12:42 2013 +0200
+++ b/nagslang/level.py	Mon Sep 02 18:27:58 2013 +0200
@@ -2,6 +2,7 @@
 import pygame.locals as pgl
 
 from nagslang.resources import resources
+from nagslang.yamlish import load, dump
 
 POLY_COLORS = {
     1: pygame.color.THECOLORS['red'],
@@ -27,41 +28,14 @@
         self._exterior = False
 
     def load(self):
-
-        def add_polygon(polygon, index, num_points):
-            self.polygons[index] = polygon
-            if len(polygon) != num_points:
-                print 'Error - incorrect polygon size'
-                print 'Expected: %d, got %d' % (num_points, len(polygon))
-
-        inpoly = False
-        polygon = []
-        index = 0
-        num_points = 0
         with resources.get_file('levels', self.name) as f:
-            for line in f:
-                if inpoly:
-                    if not line.startswith('Point:'):
-                        add_polygon(polygon, index, num_points)
-                        polygon = []
-                        inpoly = False
-                        index = 0
-                    else:
-                        point = line.split(':', 1)[1]
-                        x, y = [int(i) for i in point.split()]
-                        polygon.append((x, y))
-                if line.startswith('X-Size:'):
-                    self.x = int(line.split(':', 1)[1])
-                elif line.startswith('Y-Size:'):
-                    self.y = int(line.split(':', 1)[1])
-                elif line.startswith('Base tile:'):
-                    self.basetile = line.split(':', 1)[1].strip()
-                elif line.startswith('Polygon'):
-                    rest = line.split(' ', 1)[1]
-                    index, num_points = [int(x) for x in rest.split(':', 1)]
-                    inpoly = True
-        if index:
-            add_polygon(polygon, index, num_points)
+            data = load(f)
+        self.x, self.y = data['size']
+        self.base_tile = data['base_tile']
+        for i, points in data['polygons'].iteritems():
+            self.polygons[i] = []
+            for point in points:
+                self.polygons[i].append(tuple(point))
 
     def all_closed(self):
         """Check if all the polygons are closed"""
@@ -84,15 +58,11 @@
         if not closed:
             return False
         with resources.get_file('levels', self.name, mode='w') as f:
-            f.write('X-Size: %s\n' % self.x)
-            f.write('Y-Size: %s\n' % self.y)
-            f.write('Base tile: %s\n' % self.basetile)
-            for i, poly in self.polygons.items():
-                if len(poly) == 0:
-                    continue
-                f.write('Polygon %d : %d\n' % (i, len(poly)))
-                for point in poly:
-                    f.write('Point: %d %d\n' % point)
+            dump({
+                'size': [self.x, self.y],
+                'base_tile': self.basetile,
+                'polygons': self.polygons,
+            }, f)
         return True
 
     def get_size(self):