X-Git-Url: https://git.yukkurigames.com/?p=python-bulletml.git;a=blobdiff_plain;f=bulletml-runner;h=faaf9e01006fbbf47de14c2f549af7c4d5e628db;hp=7ad5addd678ada824c88385ed2a08d625ea90231;hb=a14b854db961815ff29962285bd4f632b98b98d9;hpb=2e2790231b49d4a2ed9299825ac0cf8121a655e2 diff --git a/bulletml-runner b/bulletml-runner index 7ad5add..faaf9e0 100755 --- a/bulletml-runner +++ b/bulletml-runner @@ -1,39 +1,56 @@ #!/usr/bin/env python +import os import sys +import time import pygame import bulletml +import bulletml.bulletyaml + +try: + import yaml +except ImportError: + yaml = None + +try: + import psyco +except ImportError: + pass +else: + psyco.full() def main(argv): + if not argv: + raise SystemExit("Usage: %s filename ..." % sys.argv[0]) + pygame.display.init() screen = pygame.display.set_mode([600, 600], pygame.DOUBLEBUF) bullet = pygame.Surface([3, 3]) bullet.fill([255, 0, 0]) - filename = argv[0] clock = pygame.time.Clock() target = bulletml.Bullet() file_idx = 0 - if not argv: - raise SystemExit - while True: - doc = bulletml.BulletML(open(argv[file_idx % len(argv)], "rU")) - source = bulletml.Bullet.FromDoc( + filename = argv[file_idx % len(argv)] + doc = bulletml.BulletML.FromDocument(open(filename, "rU")) + source = bulletml.Bullet.FromDocument( doc, x=150, y=150, target=target, rank=0.5) 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 newfile = False + pygame.display.set_caption(os.path.basename(filename)) + while active and not newfile: go = False @@ -53,12 +70,21 @@ def main(argv): newfile = True 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.vanished = True + active.add(source) target.x, target.y = pygame.mouse.get_pos() target.x /= 2 target.y /= 2 if not paused or go: + start = time.time() + count = len(active) for obj in list(active): new = obj.step() total += len(new) @@ -67,11 +93,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: @@ -86,18 +118,8 @@ def main(argv): x -= 1 y -= 1 screen.blit(bullet, [x, y]) - pygame.display.flip() - clock.tick(60) - - for event in pygame.event.get(): - if event.type == pygame.QUIT: - raise SystemExit - elif event.type == pygame.KEYDOWN: - if event.key == pygame.K_SPACE: - paused ^= True - elif event.key == pygame.K_RIGHT: - go = True + pygame.display.flip() print " Finished: %04d: %d bullets." % (frames, total)