run method
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();
}
}
}