X-Git-Url: https://git.yukkurigames.com/?p=python-bulletml.git;a=blobdiff_plain;f=bulletml-runner;h=f361d75172e820eddee0c26c81542021611a4d12;hp=62e9fdfe4e29918ffbb30c0bb744d119faa835dd;hb=HEAD;hpb=957c866b2ee0e135016728c810fb8e802969a519 diff --git a/bulletml-runner b/bulletml-runner index 62e9fdf..f361d75 100755 --- a/bulletml-runner +++ b/bulletml-runner @@ -7,6 +7,13 @@ import time import pygame import bulletml +import bulletml.bulletyaml +from bulletml.collision import collides_all + +try: + import yaml +except ImportError: + yaml = None try: import psyco @@ -21,24 +28,29 @@ 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: filename = argv[file_idx % len(argv)] 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) + 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 @@ -66,21 +78,23 @@ 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.top] - 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 + target.px = target.x + target.py = target.y + collides = False 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) @@ -88,6 +102,8 @@ def main(argv): or not (-50 < obj.x < 350) or not (-50 < obj.y < 350)): active.remove(obj) + if lactive: + collides = collides_all(target, lactive) elapsed = time.time() - start frames += 1 @@ -97,10 +113,10 @@ def main(argv): 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) + print " %g seconds per bullet (120Hz max: %g)." % ( + seconds_per_bullet, bullets_per_second / 120) - screen.fill([0, 0, 0]) + screen.fill([0, 0, 64] if collides else [0, 0, 0] ) for obj in active: try: x, y = obj.x, obj.y @@ -112,7 +128,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()