Flock Behavior

The public and protected methods and data of the FlockBehavior class and its PredatorBehavior and PreyBehavior subclasses are shown in Figure 22-7.

FlockBehavior and its subclasses

Figure 22-7. FlockBehavior and its subclasses

FlockBehavior has two main tasks:

  • To call animateBoid() on every boid periodically

  • To store the velocity rules, which require an examination of the entire flock

FlockBehavior doesn't create boids since that's handled by its subclasses, and the information required for each type of boid is too specialized to be located in the superclass. PredatorBehavior creates a series of PredatorBoids, and PreyBehavior handles PreyBoids. But the subclass behaviors do use the inherited boidsList list for storage.

Animate the Boids

The calls to animateBoid() are carried out in processStimulus():

    public void processStimulus(Enumeration en)
    { Boid b;
      int i = 0;
      while((b = boidsList.getBoid(i)) != null) {
        b.animateBoid();
        i++;
      }
      wakeupOn(timeOut);   // schedule next update
    }

Velocity Rules Again

FlockBehavior is a general-purpose flock manager, so it stores the basic velocity methods used by all boids: Reynolds' cohesion, separation, and alignment rules. All the rules have a similar implementation since they examine nearby flockmates and build an aggregate result. This is converted into a velocity and scaled before being returned.

As explained at the start of this chapter, Reynolds' notion of flockmates ...

Get Killer Game Programming in Java now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.