moveToPositionAnimated method

void moveToPositionAnimated(
  1. Offset position, {
  2. double zoom = 1,
  3. double angle = 0,
  4. VoidCallback? finish,
  5. Duration? duration,
  6. Curve curve = Curves.decelerate,
})

Implementation

void moveToPositionAnimated(
  Offset position, {
  double zoom = 1,
  double angle = 0,
  VoidCallback? finish,
  Duration? duration,
  Curve curve = Curves.decelerate,
}) {
  if (zoom <= 0.0 || _isMoving) return;
  config.target = null;
  _isMoving = true;

  double diffX = this.position.dx - position.dx;
  double diffY = this.position.dy - position.dy;
  double originX = this.position.dx;
  double originY = this.position.dy;

  double diffZoom = config.zoom - zoom;
  double initialZoom = config.zoom;

  double diffAngle = config.angle - angle;
  double originAngle = config.angle;

  gameRef.getValueGenerator(
    duration ?? Duration(seconds: 1),
    onChange: (value) {
      this.position = this.position.copyWith(
            x: originX - (diffX * value),
          );
      this.position = this.position.copyWith(
            y: originY - (diffY * value),
          );
      config.zoom = initialZoom - (diffZoom * value);
      config.angle = originAngle - (diffAngle * value);

      if (config.moveOnlyMapArea) {
        _keepInMapArea();
      }
    },
    onFinish: () {
      _isMoving = false;
      finish?.call();
    },
    curve: curve,
  ).start();
}