# HG changeset patch # User Stefano Rivera # Date 1378244756 -7200 # Node ID ad1d3de210cda57ea24da6d9e844408df06d5870 # Parent 3d54fe7a29987c67c50b496816198aeb941770f2 Drop compatibility imports, and allow an optional module on classnames diff -r 3d54fe7a2998 -r ad1d3de210cd data/levels/level1 --- 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] diff -r 3d54fe7a2998 -r ad1d3de210cd data/levels/level2 --- 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] diff -r 3d54fe7a2998 -r ad1d3de210cd nagslang/game_object.py --- 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 diff -r 3d54fe7a2998 -r ad1d3de210cd nagslang/level.py --- 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): diff -r 3d54fe7a2998 -r ad1d3de210cd nagslang/tests/test_level.py --- 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'], }, ],