diff nagslang/level.py @ 168:ce8d4fc3baf4

A patrolling alien
author Neil Muller <drnlmuller@gmail.com>
date Tue, 03 Sep 2013 14:39:38 +0200
parents 06c681ff53aa
children e080fcd07fa9
line wrap: on
line diff
--- a/nagslang/level.py	Tue Sep 03 11:21:43 2013 +0200
+++ b/nagslang/level.py	Tue Sep 03 14:39:38 2013 +0200
@@ -2,6 +2,7 @@
 import pygame.locals as pgl
 
 from nagslang import game_object as go
+from nagslang import enemies
 from nagslang.resources import resources
 from nagslang.yamlish import load, dump
 
@@ -30,6 +31,7 @@
         self._glue = go.PuzzleGlue()
         self._drawables = []
         self._game_objects = []
+        self._enemies = []
 
     def _get_data(self):
         # For overriding in tests.
@@ -43,6 +45,7 @@
             'base_tile': self.basetile,
             'polygons': self.polygons,
             'game_objects': self._game_objects,
+            'enemies': self._enemies,
         }, f)
 
     def load(self, space):
@@ -56,6 +59,9 @@
         self._game_objects = data.get('game_objects', [])
         for game_object_dict in self._game_objects:
             self._create_game_object(space, **game_object_dict)
+        self._enemies = data.get('enemies', [])
+        for enemy_dict in self._enemies:
+            self._create_enemy(space, **enemy_dict)
 
     def _create_game_object(self, space, classname, args, name=None):
         # We should probably build a registry of game objects or something.
@@ -73,6 +79,18 @@
         if name is not None:
             self._glue.add_component(name, gobj)
 
+    def _create_enemy(self, space, classname, args, name=None):
+        cls = getattr(enemies, classname)
+        if issubclass(cls, go.GameObject):
+            gobj = cls(space, *args)
+            self._drawables.append(gobj)
+        else:
+            raise TypeError(
+                "Expected a subclass of GameObject, got %s" % (
+                    classname))
+        if name is not None:
+            self._glue.add_component(name, gobj)
+
     def all_closed(self):
         """Check if all the polygons are closed"""
         closed = True