run method

void run(
  1. double dt
)

Executes random movement. Should be called inside the component's update method.

Implementation

void run(
  double dt,
) {
  if (_distanceToArrived == null) {
    final tick = _intervalTick.update(
      dt,
    );
    if (tick) {
      final target = _getTarget(
        _minDistance,
        _maxDistance,
        _checkDirectionWithRayCast,
        _directions,
      );
      if (target == null) {
        _stop();
        return;
      }
      _currentDirection = target.direction;
      _distanceToArrived = target.distance;
      _originPosition = _comp.absoluteCenter.clone();
      _notifyStartMove(_currentDirection);
    }
  } else {
    _travelledDistance = _comp.absoluteCenter.distanceTo(_originPosition);
    final isCanMove = _comp.canMove(_currentDirection, displacement: _speed);
    if (_travelledDistance >= _distanceToArrived! || !isCanMove) {
      _stop();
      return;
    }

    _comp.moveFromDirection(_currentDirection, speed: _speed);
    if (_updateAngle) {
      _comp.angle = _currentDirection.toRadians();
    }
  }
}