seeAndMoveToPlayer method
void
seeAndMoveToPlayer({})
Checks whether the player is within range. If so, move to it.
Implementation
void seeAndMoveToPlayer({
required Function(Player) closePlayer,
double radiusVision = 32,
double margin = 10,
bool runOnlyVisibleInScreen = true,
}) {
if (isDead) return;
if (runOnlyVisibleInScreen && !this.isVisible) return;
seePlayer(
radiusVision: radiusVision,
observed: (player) {
double _radAngle = getAngleFomPlayer();
Vector2Rect playerRect = player is ObjectCollision
? (player as ObjectCollision).rectCollision
: player.position;
Rect rectPlayerCollision = Rect.fromLTWH(
playerRect.rect.left - margin,
playerRect.rect.top - margin,
playerRect.rect.width + (margin * 2),
playerRect.rect.height + (margin * 2),
);
Vector2Rect rectToMove = this.isObjectCollision()
? (this as ObjectCollision).rectCollision
: position;
if (rectToMove.rect.overlaps(rectPlayerCollision)) {
closePlayer(player);
this.idle();
this.moveFromAngleDodgeObstacles(0, _radAngle);
return;
}
this.moveFromAngleDodgeObstacles(speed, _radAngle, onCollision: idle);
},
notObserved: () {
this.idle();
},
);
}