X-Git-Url: https://git.yukkurigames.com/?p=python-bulletml.git;a=blobdiff_plain;f=bulletml%2Fimpl.py;h=0c40f1ebd2596752ab10861f9042cdb6c82cfd31;hp=8ef78abd7f0863f65fb379f812809e9bfdfde92e;hb=4c64c8e05ac3b3c452255a4987bd67a2892a8007;hpb=e0a48bf90fd856cb7009eb2140187145c7d0ebaf diff --git a/bulletml/impl.py b/bulletml/impl.py index 8ef78ab..0c40f1e 100644 --- a/bulletml/impl.py +++ b/bulletml/impl.py @@ -131,9 +131,11 @@ class Bullet(object): rank - game difficulty, 0 to 1, default 0.5 tags - string tags set by the running actions appearance - string used to set bullet appearance + radius - radius for collision + finished - true if all actions are finished and the bullet vanished Contructor Arguments: - x, y, direction, speed, target, rank, tags, appearance + x, y, direction, speed, target, rank, tags, appearance, radius - same as the above attributes actions - internal action list Action - custom Action constructor @@ -141,14 +143,17 @@ class Bullet(object): """ def __init__(self, x=0, y=0, direction=0, speed=0, target=None, - actions=(), rank=0.5, tags=(), appearance=None): + actions=(), rank=0.5, tags=(), appearance=None, + radius=0.5): self.x = self.px = x self.y = self.py = y + self.radius = radius self.mx = 0 self.my = 0 self.direction = direction self.speed = speed self.vanished = False + self.finished = False self.target = target self.rank = rank self.tags = set(tags) @@ -166,7 +171,7 @@ class Bullet(object): def __repr__(self): return ("%s(%r, %r, accel=%r, direction=%r, speed=%r, " - "actions=%r, target=%r, appearance=vanished=%r)") % ( + "actions=%r, target=%r, appearance=%r, vanished=%r)") % ( type(self).__name__, self.x, self.y, (self.mx, self.my), self.direction, self.speed, self.actions, self.target, self.appearance, self.vanished) @@ -185,24 +190,6 @@ class Bullet(object): else: return atan2(target_x - self.x, target_y - self.y) - @property - 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). - """ - if not self.vanished: - return False - for action in self.actions: - if not action.finished: - return False - return True - def vanish(self): """Vanish this bullet and stop all actions.""" self.vanished = True @@ -232,8 +219,14 @@ class Bullet(object): """ created = [] + finished = self.vanished for action in self.actions: action.step(self, created) + finished = finished and action.finished + if finished: + for action in self.actions: + finished = finished and action.finished + self.finished = finished speed = self.speed direction = self.direction