changeset 209:ad1d3de210cd

Drop compatibility imports, and allow an optional module on classnames
author Stefano Rivera <stefano@rivera.za.net>
date Tue, 03 Sep 2013 23:45:56 +0200
parents 3d54fe7a2998
children f2128ddc0acd
files data/levels/level1 data/levels/level2 nagslang/game_object.py nagslang/level.py nagslang/tests/test_level.py
diffstat 5 files changed, 17 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/data/levels/level1	Tue Sep 03 23:42:51 2013 +0200
+++ b/data/levels/level1	Tue Sep 03 23:45:56 2013 +0200
@@ -27,7 +27,7 @@
   classname: FloorLight
   name: light2
 - args: [light_switch, door_switch]
-  classname: StateLogicalAndPuzzler
+  classname: puzzle.StateLogicalAndPuzzler
   name: both_switches
 - args:
   - [400, 400]
--- a/data/levels/level2	Tue Sep 03 23:42:51 2013 +0200
+++ b/data/levels/level2	Tue Sep 03 23:45:56 2013 +0200
@@ -6,6 +6,7 @@
   - level1
   - [600, 700]
   classname: Door
+lines: []
 polygons:
   1:
   - [70, 440]
--- a/nagslang/game_object.py	Tue Sep 03 23:42:51 2013 +0200
+++ b/nagslang/game_object.py	Tue Sep 03 23:45:56 2013 +0200
@@ -11,12 +11,6 @@
 from nagslang.widgets.text import LabelWidget
 
 
-# For levels to import, until we get module names in 'classname'
-StateProxyPuzzler = puzzle.StateProxyPuzzler
-StateLogicalAndPuzzler = puzzle.StateLogicalAndPuzzler
-CollidePuzzler = puzzle.CollidePuzzler
-
-
 class Physicser(object):
     def __init__(self, space):
         self._space = space
--- a/nagslang/level.py	Tue Sep 03 23:42:51 2013 +0200
+++ b/nagslang/level.py	Tue Sep 03 23:45:56 2013 +0200
@@ -72,9 +72,16 @@
             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.
-        # At least this is better than just calling `eval`, right?
-        cls = getattr(go, classname)
+        modules = {
+            'game_object': go,
+            'puzzle': puzzle,
+        }
+        if '.' in classname:
+            module, classname = classname.split('.')
+        else:
+            module = 'game_object'
+        cls = getattr(modules[module], classname)
+
         if issubclass(cls, puzzle.Puzzler):
             gobj = cls(*args)
         elif issubclass(cls, go.GameObject):
--- a/nagslang/tests/test_level.py	Tue Sep 03 23:42:51 2013 +0200
+++ b/nagslang/tests/test_level.py	Tue Sep 03 23:45:56 2013 +0200
@@ -3,6 +3,7 @@
 from StringIO import StringIO
 
 from nagslang import game_object as go
+from nagslang import puzzle
 from nagslang.level import Level
 from nagslang.yamlish import load
 
@@ -76,9 +77,10 @@
             self.assertEqual(['foo', 'foo_proxy'],
                              sorted(puzzle_bits.keys()))
             self.assertTrue(
-                isinstance(puzzle_bits['foo_proxy'], go.StateProxyPuzzler))
+                isinstance(puzzle_bits['foo_proxy'], puzzle.StateProxyPuzzler))
             self.assertEqual('foo', puzzle_bits['foo_proxy']._state_source)
-            self.assertTrue(isinstance(puzzle_bits['foo'], go.CollidePuzzler))
+            self.assertTrue(isinstance(puzzle_bits['foo'],
+                                       puzzle.CollidePuzzler))
 
         level = self.make_level('foo', {
             'size': [5, 10],
@@ -96,7 +98,7 @@
                 },
                 {
                     'name': 'foo_proxy',
-                    'classname': 'StateProxyPuzzler',
+                    'classname': 'puzzle.StateProxyPuzzler',
                     'args': ['foo'],
                 },
             ],