Bullet.step: Manage finished state here. Although this increases the time spent in...
authorJoe Wreschnig <joe.wreschnig@gmail.com>
Sat, 24 Apr 2010 08:28:10 +0000 (01:28 -0700)
committerJoe Wreschnig <joe.wreschnig@gmail.com>
Sat, 24 Apr 2010 08:28:10 +0000 (01:28 -0700)
bulletml/impl.py

index 4785ef2..a2e8dec 100644 (file)
@@ -132,6 +132,7 @@ class Bullet(object):
     tags - string tags set by the running actions
     appearance - string used to set bullet appearance
     radius - radius for collision
     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, radius
 
     Contructor Arguments:
     x, y, direction, speed, target, rank, tags, appearance, radius
@@ -152,6 +153,7 @@ class Bullet(object):
         self.direction = direction
         self.speed = speed
         self.vanished = False
         self.direction = direction
         self.speed = speed
         self.vanished = False
+        self.finished = False
         self.target = target
         self.rank = rank
         self.tags = set(tags)
         self.target = target
         self.rank = rank
         self.tags = set(tags)
@@ -188,24 +190,6 @@ class Bullet(object):
         else:
             return atan2(target_x - self.x, target_y - self.y)
 
         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
     def vanish(self):
         """Vanish this bullet and stop all actions."""
         self.vanished = True
@@ -235,8 +219,11 @@ class Bullet(object):
         """
         created = []
 
         """
         created = []
 
+        finished = self.vanished
         for action in self.actions:
             action.step(self, created)
         for action in self.actions:
             action.step(self, created)
+            finished = finished and action.finished
+        self.finished = finished
 
         speed = self.speed
         direction = self.direction
 
         speed = self.speed
         direction = self.direction