simpleAttackRangeByAngle method
void
simpleAttackRangeByAngle({
- required Future<
SpriteAnimation> animation, - required Vector2 size,
- required double angle,
- required double damage,
- required AttackFromEnum attackFrom,
- Vector2? destroySize,
- Future<
SpriteAnimation> ? animationDestroy, - dynamic id,
- double speed = 150,
- bool withDecorationCollision = true,
- VoidCallback? onDestroy,
- CollisionConfig? collision,
- LightingConfig? lightingConfig,
- double marginFromOrigin = 16,
Execute the ranged attack using a component with animation
Implementation
void simpleAttackRangeByAngle({
/// use animation facing right.
required Future<SpriteAnimation> animation,
required Vector2 size,
/// Use radians angle
required double angle,
required double damage,
required AttackFromEnum attackFrom,
Vector2? destroySize,
Future<SpriteAnimation>? animationDestroy,
dynamic id,
double speed = 150,
bool withDecorationCollision = true,
VoidCallback? onDestroy,
CollisionConfig? collision,
LightingConfig? lightingConfig,
double marginFromOrigin = 16,
}) {
var initPosition = (isObjectCollision()
? (this as ObjectCollision).rectCollision
: this.toRect());
Vector2 startPosition = initPosition.center.toVector2();
double displacement =
max(initPosition.width / 2, initPosition.height / 2) + marginFromOrigin;
double nextX = displacement * cos(angle);
double nextY = displacement * sin(angle);
Vector2 diffBase = Vector2(nextX, nextY);
startPosition.add(diffBase);
startPosition.add(Vector2(-size.x / 2, -size.y / 2));
gameRef.add(FlyingAttackObject.byAngle(
id: id,
position: startPosition,
size: size,
angle: angle,
damage: damage,
speed: speed,
attackFrom: attackFrom,
collision: collision,
withDecorationCollision: withDecorationCollision,
onDestroy: onDestroy,
destroySize: destroySize,
flyAnimation: animation,
animationDestroy: animationDestroy,
lightingConfig: lightingConfig,
));
}