seeAndMoveToAttackRange method
void
seeAndMoveToAttackRange({
- required dynamic positioned(),
- VoidCallback? notObserved,
- VoidCallback? observed,
- double radiusVision = 32,
- double? visionAngle,
- double? angle,
- double? minDistanceFromPlayer,
- bool runOnlyVisibleInScreen = true,
Checks whether the Enemy is within range. If so, move to it.
visionAngle
in radians
angle
in radians. is automatically picked up using the component's direction.
Implementation
void seeAndMoveToAttackRange({
required Function(Enemy) positioned,
VoidCallback? notObserved,
VoidCallback? observed,
double radiusVision = 32,
double? visionAngle,
double? angle,
double? minDistanceFromPlayer,
bool runOnlyVisibleInScreen = true,
}) {
if (isDead) return;
seeComponentType<Enemy>(
radiusVision: radiusVision,
angle: angle ?? lastDirection.toRadians(),
visionAngle: visionAngle,
observed: (enemy) {
observed?.call();
positionsItselfAndKeepDistance(
enemy.first,
minDistanceFromPlayer: minDistanceFromPlayer,
radiusVision: radiusVision,
runOnlyVisibleInScreen: runOnlyVisibleInScreen,
positioned: (enemy) {
final playerDirection = getComponentDirectionFromMe(enemy);
lastDirection = playerDirection;
if (lastDirection == Direction.left ||
lastDirection == Direction.right) {
lastDirectionHorizontal = lastDirection;
}
idle();
positioned(enemy as Enemy);
},
);
},
notObserved: () {
if (!isIdle) {
idle();
}
notObserved?.call();
},
);
}