X-Git-Url: https://git.yukkurigames.com/?p=python-bulletml.git;a=blobdiff_plain;f=bulletml-runner;h=62e9fdfe4e29918ffbb30c0bb744d119faa835dd;hp=96b1efbcc717ae33e8e7727c7a41ce4a282f551f;hb=29b24c8fc17a3bdcccd1ac853eee5b90c6fd0856;hpb=9b685c2cd942cb5b1b0c0c400d9493419730df46 diff --git a/bulletml-runner b/bulletml-runner index 96b1efb..62e9fdf 100755 --- a/bulletml-runner +++ b/bulletml-runner @@ -2,11 +2,19 @@ import os import sys +import time import pygame import bulletml +try: + import psyco +except ImportError: + pass +else: + psyco.full() + def main(argv): if not argv: raise SystemExit("Usage: %s filename ..." % sys.argv[0]) @@ -22,9 +30,10 @@ def main(argv): while True: filename = argv[file_idx % len(argv)] - doc = bulletml.BulletML(open(filename, "rU")) - source = bulletml.Bullet.FromDoc( - doc, x=150, y=150, target=target, rank=0.5) + doc = bulletml.BulletML.FromDocument(open(filename, "rU")) + actions = [act([], 0.5) for act in doc.top] + source = bulletml.Bullet( + x=150, y=150, target=target, actions=actions, rank=0.5) active = set([source]) source.vanished = True @@ -57,8 +66,10 @@ def main(argv): elif event.key == pygame.K_RETURN: newfile = True elif event.key == pygame.K_s: - source = bulletml.Bullet.FromDoc( - doc, x=150, y=150, target=target, rank=0.5) + actions = [act([], 0.5) for act in doc.top] + source = bulletml.Bullet( + x=150, y=150, target=target, + actions=actions, rank=0.5) source.vanished = True active.add(source) target.x, target.y = pygame.mouse.get_pos() @@ -67,6 +78,8 @@ def main(argv): if not paused or go: + start = time.time() + count = len(active) for obj in list(active): new = obj.step() total += len(new) @@ -75,11 +88,17 @@ def main(argv): or not (-50 < obj.x < 350) or not (-50 < obj.y < 350)): active.remove(obj) + elapsed = time.time() - start frames += 1 if frames % 100 == 0: print " Processing: %04d: %d bullets, %d active." % ( - frames, total, len(active)) + frames, total, count) + if elapsed: + seconds_per_bullet = elapsed / count + bullets_per_second = count / elapsed + print " %g seconds per bullet (60Hz max: %g)." % ( + seconds_per_bullet, bullets_per_second / 60) screen.fill([0, 0, 0]) for obj in active: @@ -94,9 +113,8 @@ def main(argv): x -= 1 y -= 1 screen.blit(bullet, [x, y]) - pygame.display.flip() - clock.tick(60) + pygame.display.flip() print " Finished: %04d: %d bullets." % (frames, total)