seeAndMoveToPlayer method
void
seeAndMoveToPlayer({
- required dynamic closePlayer(),
- BoolCallback? notObserved,
- double radiusVision = 32,
- double margin = 10,
- bool runOnlyVisibleInScreen = true,
Checks whether the player is within range. If so, move to it.
Implementation
void seeAndMoveToPlayer({
required Function(Player) closePlayer,
// return true to stop move.
BoolCallback? notObserved,
double radiusVision = 32,
double margin = 10,
bool runOnlyVisibleInScreen = true,
}) {
if ((runOnlyVisibleInScreen && !isVisible) || isDead) {
return;
}
seePlayer(
radiusVision: radiusVision,
observed: (player) {
final radAngle = getAngleToPlayer();
final playerRect = player.rectCollision;
final rectPlayerCollision = playerRect.inflate(margin);
if (rectCollision.overlaps(rectPlayerCollision)) {
closePlayer(player);
moveFromAngle(radAngle);
stopMove();
return;
}
moveFromAngle(radAngle);
},
notObserved: () {
final stop = notObserved?.call() ?? true;
if (stop) {
stopMove();
}
},
);
}