while True:
filename = argv[file_idx % len(argv)]
doc = bulletml.BulletML.FromDocument(open(filename, "rU"))
- actions = [act([], 0.5) for act in doc.top]
+ actions = [act([], 0.5) for act in doc.actions]
source = bulletml.Bullet(
x=150, y=150, target=target, actions=actions, rank=0.5)
elif event.key == pygame.K_RETURN:
newfile = True
elif event.key == pygame.K_s:
- actions = [act([], 0.5) for act in doc.top]
+ actions = [act([], 0.5) for act in doc.actions]
source = bulletml.Bullet(
x=150, y=150, target=target,
actions=actions, rank=0.5)
elif tag == "actionRef":
actions.append(ActionRef.FromXML(doc, subelem))
dfn = cls(actions, direction, speed)
- doc.bullets[element.get("label")] = dfn
+ doc._bullets[element.get("label")] = dfn
return dfn
def __call__(self, params, rank):
else:
actions.append(ctr.FromXML(doc, subelem))
dfn = cls(actions)
- doc.actions[element.get("label")] = dfn
+ doc._actions[element.get("label")] = dfn
return dfn
def __call__(self, params, rank):
try:
params = self.bullet.params
except AttributeError:
- state = dict(bullet=self.bullet)
+ state.append(('bullet', self.bullet))
else:
if params.params:
state.append(('bullet', self.bullet))
except UnboundLocalError as exc:
raise ParseError(str(exc))
else:
- doc.fires[element.get("label")] = fire
+ doc._fires[element.get("label")] = fire
return fire
def __call__(self, params, rank):
class BulletML(object):
"""BulletML document.
- A BulletML document is a collection of bullets, actions, and
- firings, as well as a base game type.
+ A BulletML document is a collection of top-level actions and the
+ base game type.
You can add tags to the BulletML.CONSTRUCTORS dictionary to extend
its parsing. It maps tag names to classes with a FromXML
fire=FireDef,
)
- def __init__(self, type="none", bullets=None, fires=None, actions=None):
+ def __init__(self, type="none", actions=None):
self.type = type
- self.bullets = {} if bullets is None else bullets
- self.actions = {} if actions is None else actions
- self.fires = {} if fires is None else fires
+ self.actions = [] if actions is None else actions
def __getstate__(self):
return [('type', self.type), ('actions', self.actions)]
self = cls(type=root.get("type", "none"))
+ self._bullets = {}
+ self._actions = {}
+ self._fires = {}
self._bullet_refs = []
self._action_refs = []
self._fire_refs = []
try:
for ref in self._bullet_refs:
- ref.bullet = self.bullets[ref.bullet]
+ ref.bullet = self._bullets[ref.bullet]
for ref in self._fire_refs:
- ref.fire = self.fires[ref.fire]
+ ref.fire = self._fires[ref.fire]
for ref in self._action_refs:
- ref.action = self.actions[ref.action]
+ ref.action = self._actions[ref.action]
except KeyError as exc:
raise ParseError("unknown reference %s" % exc)
+ self.actions = [act for name, act in self._actions.items()
+ if name and name.startswith("top")]
+
del(self._bullet_refs)
del(self._action_refs)
del(self._fire_refs)
-
- self.bullets.pop(None, None)
- self.actions.pop(None, None)
- self.fires.pop(None, None)
-
+ del(self._bullets)
+ del(self._actions)
+ del(self._fires)
+
return self
@classmethod
else:
raise ParseError("unknown initial character %r" % start)
- @property
- def top(self):
- """Get a list of all top-level actions."""
- return [dfn for name, dfn in self.actions.items()
- if name and name.startswith("top")]
-
def __repr__(self):
return "%s(type=%r, bullets=%r, actions=%r, fires=%r)" % (
type(self).__name__, self.type, self.bullets, self.actions,