import pygame
import bulletml
+import bulletml.bulletyaml
+from bulletml.collision import collides
+
+try:
+ import yaml
+except ImportError:
+ yaml = None
+
+try:
+ import psyco
+except ImportError:
+ pass
+else:
+ psyco.full()
def main(argv):
if not argv:
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
elif event.key == pygame.K_RETURN:
newfile = True
elif event.key == pygame.K_s:
- actions = [act([], 0.5) for act in doc.top]
+ actions = [act([], 0.5) for act in doc.actions]
source = bulletml.Bullet(
x=150, y=150, target=target,
actions=actions, rank=0.5)
target.y /= 2
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)
or not (-50 < obj.x < 350)
or not (-50 < obj.y < 350)):
active.remove(obj)
+ collides(obj, lactive[0])
elapsed = time.time() - start
frames += 1
if frames % 100 == 0:
- seconds_per_bullet = elapsed / count
- bullets_per_second = count / elapsed
print " Processing: %04d: %d bullets, %d active." % (
frames, total, count)
- print " %g seconds per bullet (60Hz max: %g)." % (
- seconds_per_bullet, bullets_per_second / 60)
+ 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: