@Override
    public void update() {
      if (setVisible(Dungeon.visible[pos])) {

        super.update();

        if ((rippleDelay -= Game.elapsed) <= 0) {
          GameScene.ripple(pos + Dungeon.level.getWidth()).y -= DungeonTilemap.SIZE / 2;
          rippleDelay = Random.Float(0.2f, 0.3f);
        }
      }
    }
  public void move(int from, int to) {
    play(run);

    motion = new PosTweener(this, worldToCamera(to), MOVE_INTERVAL);
    motion.listener = this;
    getParent().add(motion);

    isMoving = true;

    turnTo(from, to);

    if (getVisible() && Dungeon.level.water[from] && !ch.flying) {
      GameScene.ripple(from);
    }

    ch.onMotionComplete();
  }