from math import atan2, sin, cos
-from bulletml.parser import ActionDef, ActionRef
-
__all__ = ["Action", "Bullet"]
class Action(object):
return "%s(pc=%r, actions=%r)" % (
type(self).__name__, self.pc, self.actions)
- def Child(self, action, params, rank, repeat=1):
- actions, params = action(params, rank)
- return type(self)(self, actions, params, rank, repeat)
-
def vanish(self):
"""End this action and its parents."""
if self.parent:
owner.speed += self.speed
if self.direction_frames > 0:
- # I'm still not sure what the aim check is supposed to do.
self.direction_frames -= 1
+ # I'm still not sure what the aim check is supposed to do.
if self.aiming and self.direction_frames <= 0:
owner.direction += owner.aim
else:
self.pc = 0
action = self.actions[self.pc]
- if isinstance(action, (ActionDef, ActionRef)):
- child = self.Child(action, s_params, rank)
- owner.replace(self, child)
- child.step(owner, created)
- break
-
- elif action(owner, self, s_params, rank, created):
+ if action(owner, self, s_params, rank, created):
break
class Bullet(object):
"""
def __init__(self, x=0, y=0, direction=0, speed=0, target=None,
- actions=(), rank=0.5, tags=(), appearance=None,
- Action=Action):
+ actions=(), rank=0.5, tags=(), appearance=None):
self.x = self.px = x
self.y = self.py = y
self.mx = 0
self.rank = rank
self.tags = set(tags)
self.appearance = appearance
- # New bullets reset the parent hierarchy.
- self.actions = [Action(None, action, params, rank)
- for action, params in actions]
+ self.actions = list(actions)
@classmethod
def FromDocument(cls, doc, x=0, y=0, direction=0, speed=0, target=None,
params=(), rank=0.5, Action=Action):
"""Construct a new Bullet from a loaded BulletML document."""
- actions = [a(params, rank) for a in doc.actions]
+ actions = [action(None, Action, params, rank)
+ for action in doc.actions]
return cls(x=x, y=y, direction=direction, speed=speed,
- target=target, actions=actions, rank=rank, Action=Action)
+ target=target, actions=actions, rank=rank)
def __repr__(self):
return ("%s(%r, %r, accel=%r, direction=%r, speed=%r, "