bulletml-runner: Construct bullets from the document.
[python-bulletml.git] / bulletml-runner
index faaf9e0..d2d9ce0 100755 (executable)
@@ -8,6 +8,7 @@ import pygame
 
 import bulletml
 import bulletml.bulletyaml
+from bulletml.collision import collides_all
 
 try:
     import yaml
@@ -27,11 +28,17 @@ def main(argv):
 
     pygame.display.init()
     screen = pygame.display.set_mode([600, 600], pygame.DOUBLEBUF)
-    bullet = pygame.Surface([3, 3])
-    bullet.fill([255, 0, 0])
+    red = pygame.Surface([3, 3])
+    red.fill([255, 0, 0])
+    green = pygame.Surface([3, 3])
+    green.fill([0, 255, 0])
+    blue = pygame.Surface([3, 3])
+    blue.fill([0, 0, 255])
     clock = pygame.time.Clock()
     target = bulletml.Bullet()
 
+    bullets = dict(red=red, green=green, blue=blue)
+
     file_idx = 0
 
     while True:
@@ -43,7 +50,7 @@ def main(argv):
         active = set([source])
         source.vanished = True
         print filename
-        print "  Loaded %d top-level actions." % len(source._actions)
+        print "  Loaded %d top-level actions." % len(source.actions)
         frames = 0
         total = 0
         paused = False
@@ -71,21 +78,20 @@ def main(argv):
                     elif event.key == pygame.K_RETURN:
                         newfile = True
                     elif event.key == pygame.K_s:
-                        actions = [act([], 0.5) for act in doc.actions]
-                        source = bulletml.Bullet(
-                            x=150, y=150, target=target,
-                            actions=actions, rank=0.5)
+                        source = bulletml.Bullet.FromDocument(
+                            doc, x=150, y=150, target=target, rank=0.5)
                         source.vanished = True
                         active.add(source)
             target.x, target.y = pygame.mouse.get_pos()
             target.x /= 2
             target.y /= 2
+            target.y = 300 - target.y
 
             if not paused or go:
-
+                lactive = list(active)
                 start = time.time()
                 count = len(active)
-                for obj in list(active):
+                for obj in lactive:
                     new = obj.step()
                     total += len(new)
                     active.update(new)
@@ -93,6 +99,8 @@ def main(argv):
                         or not (-50 < obj.x < 350)
                         or not (-50 < obj.y < 350)):
                         active.remove(obj)
+                if lactive:
+                    collides_all(lactive[0], lactive)
                 elapsed = time.time() - start
 
                 frames += 1
@@ -117,7 +125,8 @@ def main(argv):
                         y *= 2
                         x -= 1
                         y -= 1
-                        screen.blit(bullet, [x, y])
+                        bullet = bullets.get(obj.appearance, red)
+                        screen.blit(bullet, [x, 600 - y])
             clock.tick(60)
             pygame.display.flip()