X-Git-Url: https://git.yukkurigames.com/?p=python-bulletml.git;a=blobdiff_plain;f=bulletml%2Fparser.py;fp=bulletml%2Fparser.py;h=150ca4544ef53d6a43f177c7957ef709c1ccf537;hp=8bc23c0be3334f3471b046a5ef13512f6dda380b;hb=e0a48bf90fd856cb7009eb2140187145c7d0ebaf;hpb=ed0fa877fb0b846eb6227b0e6e4b88ca6e330ef8 diff --git a/bulletml/parser.py b/bulletml/parser.py index 8bc23c0..150ca45 100644 --- a/bulletml/parser.py +++ b/bulletml/parser.py @@ -367,10 +367,7 @@ class Repeat(object): def __call__(self, owner, action, params, rank, created): repeat = self.times(params, rank) - child = action.Child(self.action, params, rank, repeat) - owner.replace(action, child) - child.step(owner, created) - return True + return self.action(owner, action, params, rank, created, repeat) def __repr__(self): return "%s(%r, %r)" % (type(self).__name__, self.times, self.action) @@ -421,10 +418,7 @@ class If(object): branch = self.else_ if branch: - child = action.Child(branch, params, rank) - owner.replace(action, child) - child.step(owner, created) - return True + return branch(owner, action, params, rank, created) def __repr__(self): if self.else_: @@ -566,8 +560,9 @@ class BulletDef(object): doc._bullets[element.get("label")] = dfn return dfn - def __call__(self, params, rank): - actions = [action(params, rank) for action in self.actions] + def __call__(self, owner, action, params, rank, created): + actions = [a(None, action, params, rank, created) + for a in self.actions] return ( self.direction and self.direction(params, rank), self.speed and self.speed(params, rank), @@ -607,8 +602,9 @@ class BulletRef(object): doc._bullet_refs.append(bullet) return bullet - def __call__(self, params, rank): - return self.bullet(self.params(params, rank), rank) + def __call__(self, owner, action, params, rank, created): + params = self.params(params, rank) + return self.bullet(owner, action, params, rank, created) def __repr__(self): return "%s(params=%r, bullet=%r)" % ( @@ -652,8 +648,14 @@ class ActionDef(object): doc._actions[element.get("label")] = dfn return dfn - def __call__(self, params, rank): - return self.actions, params + def __call__(self, owner, action, params, rank, created=(), repeat=1): + Action = action if isinstance(action, type) else type(action) + parent = None if owner is None else action + child = Action(parent, self.actions, params, rank, repeat) + if owner is not None: + owner.replace(parent, child) + child.step(owner, created) + return child def __repr__(self): return "%s(%r)" % (type(self).__name__, self.actions) @@ -686,8 +688,9 @@ class ActionRef(object): doc._action_refs.append(action) return action - def __call__(self, params, rank): - return self.action(self.params(params, rank), rank) + def __call__(self, owner, action, params, rank, created=(), repeat=1): + params = self.params(params, rank) + return self.action(owner, action, params, rank, created, repeat) def __repr__(self): return "%s(params=%r, action=%r)" % ( @@ -811,7 +814,8 @@ class FireDef(object): return fire def __call__(self, owner, action, params, rank, created): - direction, speed, tags, appearance, actions = self.bullet(params, rank) + direction, speed, tags, appearance, actions = self.bullet( + owner, action, params, rank, created) if self.direction: direction = self.direction(params, rank) if self.speed: @@ -861,9 +865,6 @@ class FireDef(object): if appearance is None: appearance = owner.appearance - Action = action.__class__ - actions = [Action(None, action, params, rank) - for action, params in actions] bullet = owner.__class__( x=x, y=y, direction=direction, speed=speed, target=owner.target, actions=actions, rank=rank,