@Override
  public void update(int delta) {
    if (!active) {
      return;
    }

    // calculate x
    x = entity.getX() - (Globals.APP_WIDTH / 2);
    if (x < 0) {
      x = 0;
    }
    if (x >= Engine.getMap().getWidth() - Globals.APP_WIDTH) {
      x = Engine.getMap().getWidth() - Globals.APP_WIDTH;
    }

    // calculate y
    y = entity.getY() - (Globals.APP_HEIGHT / 2);
    if (y < 0) {
      y = 0;
    }
    if (y >= Engine.getMap().getHeight() - Globals.APP_HEIGHT) {
      y = Engine.getMap().getHeight() - Globals.APP_HEIGHT;
    }

    // play the queued effect if there is one
    if (nextEffect != null) {
      if (!nextEffect.isFinished()) {
        nextEffect.update(delta);
      } else {
        nextEffect = null;
      }
    }
  }
 /**
  * Creates a new {@link Camera}, following <code>entity</code>
  *
  * @param entity - the {@link AbstractEntity} to follow
  */
 public Camera(AbstractEntity entity) {
   this.entity = entity;
   Engine.setCamera(this);
 }