simpleAttackRangeByAngle method

void simpleAttackRangeByAngle({
  1. required Future<SpriteAnimation> animationUp,
  2. required double width,
  3. required double height,
  4. required double radAngleDirection,
  5. Future<SpriteAnimation>? animationDestroy,
  6. dynamic id,
  7. double speed = 150,
  8. double damage = 1,
  9. bool withCollision = true,
  10. VoidCallback? onDestroy,
  11. CollisionConfig? collision,
  12. LightingConfig? lightingConfig,
})

Execute the ranged attack using a component with animation

Implementation

void simpleAttackRangeByAngle({
  required Future<SpriteAnimation> animationUp,
  required double width,
  required double height,
  required double radAngleDirection,
  Future<SpriteAnimation>? animationDestroy,
  dynamic id,
  double speed = 150,
  double damage = 1,
  bool withCollision = true,
  VoidCallback? onDestroy,
  CollisionConfig? collision,
  LightingConfig? lightingConfig,
}) {
  var initPosition = (isObjectCollision()
      ? (this as ObjectCollision).rectCollision
      : this.position);

  Vector2 startPosition = initPosition.center.toVector2();

  double displacement = max(initPosition.width, initPosition.height) * 1.2;
  double nextX = displacement * cos(radAngleDirection);
  double nextY = displacement * sin(radAngleDirection);

  Vector2 diffBase = Vector2(nextX, nextY);

  startPosition.add(diffBase);
  startPosition.add(Vector2(-width / 2, -height / 2));
  gameRef.add(FlyingAttackAngleObject(
    id: id,
    position: startPosition,
    radAngle: radAngleDirection,
    width: width,
    height: height,
    damage: damage,
    speed: speed,
    attackFrom: this is Player ? AttackFromEnum.PLAYER : AttackFromEnum.ENEMY,
    collision: collision,
    withCollision: withCollision,
    onDestroy: onDestroy,
    flyAnimation: animationUp,
    destroyAnimation: animationDestroy,
    lightingConfig: lightingConfig,
  ));
}