diff --git a/examples/zm_boids/Boid.java b/examples/zm_boids/Boid.java index 9b5c118..02f67d2 100644 --- a/examples/zm_boids/Boid.java +++ b/examples/zm_boids/Boid.java @@ -82,7 +82,9 @@ public class Boid extends Creature { alignment.add(c.getVelocity()); double distSq = position.distanceSq(c.getPosition()); - separation.add(Vector.sub(position, c.getPosition()).div(distSq)); + if( distSq > 0 ) { + separation.add(Vector.sub(position, c.getPosition()).div(distSq)); + } boids += 1; } diff --git a/examples/zm_boids/Boids.java b/examples/zm_boids/Boids.java index 7b9a4c0..05f3cfc 100644 --- a/examples/zm_boids/Boids.java +++ b/examples/zm_boids/Boids.java @@ -45,6 +45,10 @@ public class Boids extends Zeichenmaschine { synchronized( creatures ) { for( Creature c : creatures ) { c.update(creatures); + if( Double.isNaN(c.getPosition().x) ) { + pause(); + break; + } } } } @@ -70,9 +74,37 @@ public class Boids extends Zeichenmaschine { @Override public void keyPressed() { - if( keyCode == KeyEvent.VK_G ) { + if( keyCode == KEY_G ) { setSize(800, 800); + } else if( keyCode == KEY_C ) { + int cnt = 0; + for( Creature c : creatures ) { + Vector pos = c.getPosition(); + if( pos.x >= 0 && pos.x <= width && pos.y >= 0 && pos.y <= height ) { + cnt++; + } else { + System.out.printf("Missing: %s\n", c.getPosition().toString()); + } + } + System.out.printf("Screen: %dx%d\nCreatures: %d of %d\n", width, height, cnt, creatures.size()); + } else if( keyCode == KEY_F ) { + setFullscreen(true); + } else if( keyCode == KEY_Q ) { + for( Creature c : creatures ) { + c.getPosition().set(width/2, height/2); + } } } + /*@Override + public void fullscreenChanged() { + if( creatures != null ) { + synchronized( creatures ) { + for( Creature c : creatures ) { + c.limitPosition(); + } + } + } + } + */ } diff --git a/examples/zm_boids/Creature.java b/examples/zm_boids/Creature.java index 42a584a..91b7d2b 100644 --- a/examples/zm_boids/Creature.java +++ b/examples/zm_boids/Creature.java @@ -28,7 +28,7 @@ public abstract class Creature extends Constants { public abstract void update( List creatures ); - protected void limitPosition() { + public void limitPosition() { if( position.x < 0 ) { if( Boids.BORDER_WRAP ) { position.x = width;