Mercurial > nagslang
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'], }, ],