From 8c89bcae073f0e3c7e58a880512c8accb863bb07 Mon Sep 17 00:00:00 2001 From: Joe Wreschnig Date: Thu, 18 Mar 2010 00:17:40 -0700 Subject: [PATCH] Bullet tagging. (Fixes issue #7) --- bulletml/impl.py | 11 +++++++++++ bulletml/parser.py | 44 ++++++++++++++++++++++++++++++++++---------- 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/bulletml/impl.py b/bulletml/impl.py index 358aae1..8f94d55 100644 --- a/bulletml/impl.py +++ b/bulletml/impl.py @@ -224,6 +224,15 @@ class Action(object): elif type == "relative": self.my = my / frames + elif isinstance(action, parser.Tag): + owner.tags.add(action.tag) + + elif isinstance(action, parser.Untag): + try: + owner.tags.remove(action.tag) + except KeyError: + pass + elif isinstance(action, parser.Wait): self.wait_frames = action(self.params, rank) break @@ -246,6 +255,7 @@ class Bullet(object): target - object with .x and .y fields for "aim" directions vanished - set to true by a action rank - game difficulty, 0 to 1, default 0.5 + tags - string tags set by the running actions Contructor Arguments: x, y, direction, speed, target, rank - same as the attributes @@ -266,6 +276,7 @@ class Bullet(object): self.vanished = False self.target = target self.rank = rank + self.tags = set() # New bullets reset the parent hierarchy. self._actions = [Action(self, None, action, params, rank) for action, params in actions] diff --git a/bulletml/parser.py b/bulletml/parser.py index a07cc2d..de3e817 100644 --- a/bulletml/parser.py +++ b/bulletml/parser.py @@ -170,6 +170,28 @@ class Wait(object): def __repr__(self): return "%s(%r)" % (type(self).__name__, self.frames) +class Tag(object): + """Set a bullet tag.""" + + def __init__(self, tag): + self.tag = tag + + @classmethod + def FromElement(cls, doc, element): + """Construct using an ElementTree-style element.""" + return cls(element.text) + +class Untag(object): + """Unset a bullet tag.""" + + def __init__(self, tag): + self.tag = tag + + @classmethod + def FromElement(cls, doc, element): + """Construct using an ElementTree-style element.""" + return cls(element.text) + class Vanish(object): """Make the owner disappear.""" @@ -551,13 +573,15 @@ class BulletML(object): self.fires) ActionDef.CONSTRUCTORS = dict( - repeat=Repeat, - fire=FireDef, - fireRef=FireRef, - changeSpeed=ChangeSpeed, - changeDirection=ChangeDirection, - accel=Accel, - wait=Wait, - vanish=Vanish, - action=ActionDef, - actionRef=ActionRef) + repeat=Repeat, + fire=FireDef, + fireRef=FireRef, + changeSpeed=ChangeSpeed, + changeDirection=ChangeDirection, + accel=Accel, + wait=Wait, + vanish=Vanish, + tag=Tag, + untag=Untag, + action=ActionDef, + actionRef=ActionRef) -- 2.30.2