Begun YAML-based loading system
+import os
+import imp
+import yaml
+from Collage import Collage
+from Surface import SurfaceSet
+from Stage import Stage, Layer
+
+classpath = ['classes', 'Richter']
+
+def findClass(classname):
+ "A fun bit of metaprogramming, loading a class based on its name"
+ mod = imp.find_module(classname, classpath)
+ try:
+ c = imp.load_module(classname, *mod)
+ mod[0].close()
+ return eval("c.%s" % classname)
+ finally:
+ mod[0].close()
+
+
+class Level:
+ def __init__(self, dir):
+ self.env = {}
+ self.load(dir)
+
+
+ def load(self, dir):
+ f = open(os.path.join(dir, 'level.yaml'), 'r')
+ layers = yaml.safe_load(f)
+ f.close()
+
+ self.stage = Stage()
+
+ for layer in layers:
+ print layer
+ collage = None
+ surfaces = None
+ scale = 1.0
+ parallax = 1.0
+
+ print 'Name:', layer['name']
+ if layer.has_key('collage'):
+ collage = Collage(os.path.join(dir, 'collages', layer['collage']))
+ if layer.has_key('surfaces'):
+ surfaces = SurfaceSet(os.path.join(dir, 'surfaces', layer['surfaces']))
+ if layer.has_key('properties'):
+ if layer['properties'].has_key('scale'):
+ scale = layer['properties']['scale']
+ if layer['properties'].has_key('parallax'):
+ parallax = layer['properties']['parallax']
+
+ new_layer = Layer(collage, surfaces, scale, parallax)
+ self.stage.addLayerBack(new_layer)
+
+ if layer.has_key('things'):
+ self.compileThings(new_layer, layer['things'])
+
+
+ def compileThings(self, layer, things):
+ for (name, t) in things.iteritems():
+ c = findClass(t['class'])
+ properties = {}
+ if t.has_key('properties'):
+ properties = t['properties']
+ self.env[name] = c(**properties)
+ layer.add(self.env[name])