runRandomMovement method
void
runRandomMovement(
- double dt, {
- double? speed,
- double maxDistance = 50,
- double minDistance = 25,
- int timeKeepStopped = 2000,
- bool updateAngle = false,
- bool checkDirectionWithRayCast = false,
- RandomMovementDirections directions = RandomMovementDirections.all,
- dynamic onStartMove(
- Direction direction
- dynamic onStopMove()?,
Method that bo used in update method.
Implementation
void runRandomMovement(
double dt, {
double? speed,
double maxDistance = 50,
double minDistance = 25,
/// milliseconds
int timeKeepStopped = 2000,
bool updateAngle = false,
bool checkDirectionWithRayCast = false,
RandomMovementDirections directions = RandomMovementDirections.all,
Function(Direction direction)? onStartMove,
Function()? onStopMove,
}) {
_lastMinDistance = minDistance;
_onStartMove = onStartMove;
_onStopMove = onStopMove;
if (distanceToArrived == null) {
if (checkInterval(_KEY_INTERVAL_KEEP_STOPPED, timeKeepStopped, dt)) {
final diffDistane = maxDistance - minDistance;
distanceToArrived = minDistance + _random.nextDouble() * diffDistane;
final randomInt = _random.nextInt(directions.length);
_currentDirection = directions.values[randomInt];
_originPosition = absoluteCenter.clone();
if (checkDirectionWithRayCast) {
if (!canMove(_currentDirection, displacement: distanceToArrived)) {
_stop();
return;
}
}
_onStartMove?.call(_currentDirection);
}
} else {
_travelledDistance = absoluteCenter.distanceTo(_originPosition);
if (_travelledDistance >= distanceToArrived!) {
_stop();
return;
}
moveFromDirection(_currentDirection, speed: speed);
if (updateAngle) {
angle = _currentDirection.toRadians();
}
}
}