anchor.diff:  
     DivElement fish;
     ImageElement fishImg;
  -  bool isRight = true;
  -  int width;
  -  int height;
  -  double fishX;
  -  double fishY;
  -  int baitX;
  -  int baitY;
  -  double time;
  -  double spf;
  +  bool isRight; // Whether or not the fish is facing right
  +  int width; // Width of the fish
  +  int height; // Height of the fish
  +  double fishX; // The x position the fish is centered on
  +  double fishY; // The y position the fish is centered on
  +  int baitX; // The x position that the fish is attracted to
  +  int baitY; // The y position that the fish is attracted to
  +  double time; // The time count that regulates undulation
  +  double spf; // Speed factor
  +  double ampX; // The horizontal undulation factor
  +  double ampY; // The vertical undulation factor
   
  -  Fish(DivElement fish, ImageElement fishImg, [double spf = 1]) {
  +  Fish(DivElement fish, ImageElement fishImg,
  +      [double spf = 1.0, double ampX = 40.0, double ampY = 30.0]) {
       this.fish = fish;
       this.fishImg = fishImg;
  -    width  = 0;
  +    width = 0;
       height = 0;
  +    isRight = true;
       fishImg.style.src = rightImg;
       fishX = 0.0;
       fishY = 0.0;
       baitX = 0;
       baitY = 0;
  -    time = 0.0;
  +    time = 2 * PI * rand.nextDouble();
       this.spf = spf;
  +    this.ampX = ampX;
  +    this.ampY = ampY;
     }
   
  +  /// Set up where the fish is heading
     void setBait(int x, int y) {
       baitX = x;
       baitY = y;
     }
   
  +  /// Change the image to match the fish's direction
     void setImg(Dir dir) {
       if (dir == Dir.Left && isRight) {
         fishImg.src = leftImg;
  
positive.code:   window.animationFrame.then(loop);
  }
  
  void loop(num delta) {
    if (delta - start > interval) {
      fish.doAnimation();
      school.forEach((fish) => fish.doAnimation());
      start = delta;
    }
    window.animationFrame.then(loop);
  }
  
  void spawnFish() {
    DivElement fish = new DivElement()..classes.add('abs');
    ImageElement fishImg = new ImageElement()..src = "media/fish_right.png";
    fish.children.add(fishImg);
    document.body.children.add(fish);
    Fish egg = new Fish(fish, fishImg, rand.nextDouble() + 1);
    egg.setBait(mouseX, mouseY);
    school.add(egg);
  }
  
negative.code:       moveX = -deltaX;
      }
  
      if (baitY > fishY + tolY) {
        moveY = deltaY;
      } else if (baitY < fishY - tolY) {
        moveY = -deltaY;
      }
  
      moveX *= spf;
      moveY *= spf;
  
      fishX += moveX;
      fishY += moveY;
  
      int posX = (fishX - (width / 2) + ampX * sin(time / 8)).toInt();
      int posY = (fishY - (height / 2) + ampY * sin(time)).toInt();
  
      fish.style.left = '${posX}px';
      fish.style.top = '${posY}px';
  
      time += 0.1 % (2 * PI);
    }
  }
  