Mercurial > nagslang
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):