PI_2 = math.pi * 2
+__all__ = ["Action", "Bullet"]
+
class Action(object):
"""Running action implementation."""
return created
class Bullet(object):
- """Simple bullet implementation."""
+ """Simple bullet implementation.
+
+ Attributes:
+ x, y - current X/Y position
+ px, py - X/Y position prior to the last step
+ mx, my - X/Y axis-oriented speed modifier ("acceleration")
+ direction - direction of movement, in radians
+ speed - speed of movement, in units per frame
+ target - object with .x and .y fields for "aim" directions
+ vanished - set to true by a <vanish> action
+
+ Contructor Arguments:
+ x, y, direction, speed, target - same as the attributes
+ actions - internal action list
+ parent - parent of actions, None for manually-created bullets
+ rank - game difficulty, 0 to 1
+
+ """
def __init__(self, x=0, y=0, direction=0, speed=0, target=None,
actions=(), parent=None, rank=None):
@property
def aim(self):
- """Angle to the target."""
+ """Angle to the target, in radians."""
if self.target is None:
return self.direction
else:
def finished(self):
"""Check if this bullet is finished running.
+ A bullet is finished when it has vanished, and all its
+ actions have finished.
+
If this is true, the bullet should be removed from the screen.
(You will probably want to cull it under other circumstances
as well).
self._actions = []
def replace(self, old, new):
- """Replace an active action with another."""
+ """Replace an active action with another.
+
+ This is mostly used by actions internally to queue children.
+ """
try:
idx = self._actions.index(old)
except ValueError:
def step(self):
"""Advance by one frame.
- This updates the direction, speed, x, y, px, and py members,
- and may set the vanished flag.
+ This updates the position and velocity, and may also set the
+ vanished flag.
+
+ It returns any new bullets this bullet spawned during this step.
"""
created = []
self.y += self.my - math.cos(self.direction) * self.speed
return created
-
- @classmethod
- def FromDoc(cls, doc, params=(), x=0, y=0, speed=0, direction=0,
- target=None, rank=0.5):
- """Construct a bullet from top-level actions in a document."""
- actions = [act(params, rank) for act in doc.top]
- return cls(x, y, direction, speed, target, actions, rank=rank)