X-Git-Url: https://git.yukkurigames.com/?p=python-bulletml.git;a=blobdiff_plain;f=bulletml%2Fparser.py;h=1470ed37bee5959dd2496a5ffc0fe52351f686df;hp=8bc23c0be3334f3471b046a5ef13512f6dda380b;hb=HEAD;hpb=67aa3f0b15d5f8122a8f99f5903ec2e2029937c4 diff --git a/bulletml/parser.py b/bulletml/parser.py index 8bc23c0..1470ed3 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,16 +814,17 @@ class FireDef(object): return fire def __call__(self, owner, action, params, rank, created): - direction, speed, tags, appearance, actions = self.bullet(params, rank) - if self.direction: + direction, speed, tags, appearance, actions = self.bullet( + owner, action, params, rank, created) + if self.direction is not None: direction = self.direction(params, rank) - if self.speed: + if self.speed is not None: speed = self.speed(params, rank) tags = tags.union(self.tags) - if self.appearance: + if self.appearance is not None: appearance = self.appearance - if direction: + if direction is not None: direction, type = direction if type == "aim" or type is None: direction += owner.aim @@ -832,7 +836,7 @@ class FireDef(object): direction = owner.aim action.previous_fire_direction = direction - if speed: + if speed is not None: speed, type = speed if type == "sequence": speed += action.previous_fire_speed @@ -847,8 +851,9 @@ class FireDef(object): speed = 1 action.previous_fire_speed = speed - x, y = owner.x, owner.y - if self.offset: + x = owner.x + y = owner.y + if self.offset is not None: off_x, off_y = self.offset(params, rank) if self.offset.type == "relative": s = sin(direction) @@ -861,9 +866,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,