@Override
  protected void stopAction() {
    Vector2f pos = getLevelBowPosition();
    Vector2f speed = controllerUtils.getCurrentDirection(SPEED, getScreenBowPosition());

    projectileController.add(
        new Arrow(
            pos.getX(), pos.getY(), playerController.getPlayer(), speed.getX(), speed.getY()));
    soundController.play(bowSound, 0.7f);
  }
 public void spawnBirds() {
   for (Vector2f coordinate :
       birdformations.getRandomBirdFormation(
           (random.nextFloat() * 1300) + 0, (random.nextFloat() * 420) + 0)) {
     sceneHandler.spawn(coordinate.getX(), coordinate.getY(), PBird.class);
   }
 }
    /**
     * Get the value to use at a given time value
     *
     * @param t The time value (expecting t in [0,1])
     * @return The value to use at the specified time
     */
    @Override
    public float getValue(float t) {
      // first: determine the segment we are in
      Vector2f p0 = curve.get(0);
      for (int i = 1; i < curve.size(); i++) {
        Vector2f p1 = curve.get(i);

        if (t >= p0.getX() && t <= p1.getX()) {
          // found the segment
          float st = (t - p0.getX()) / (p1.getX() - p0.getX());
          float r = p0.getY() + st * (p1.getY() - p0.getY());
          // System.out.println( "t: " + t + ", " + p0.x + ", " + p0.y + " : " + p1.x + ", " + p1.y
          // + " => " + r );

          return r;
        }

        p0 = p1;
      }
      return 0;
    }
 void update(Timer timer) {
   if (pathing) {
     distance = position.distance(target);
     float x = (target.getX() - position.getX());
     float y = (target.getY() - position.getY());
     float vx = speed * slf * (x / distance);
     float vy = speed * slf * (y / distance);
     velocity.set(vx, vy);
     scaledVelocity.set(vx * scale, vy * scale);
     if ((timer.getTick() % (timer.getTimerSetting().getSpeed() * 0.05f)) == 0) {
       Vector2f v = velocity.scale(0.05f);
       // Vector2f sv = velocity.scale(0.05f);
       if (distance < 1f) {
         position.set(target);
         setPosition(position.getX(), position.getY());
       } else {
         position.set(position.getX() + (v.getX() * scale), position.getY() + (v.getY() * scale));
         setPosition(position.getX(), position.getY());
       }
     }
   }
 }
 protected void translate(Vector2f difference) {
   this.position =
       new Point(
           this.position.getX() + difference.getX(), this.position.getY() + difference.getY());
 }