simpleAttackRangeByDirection method

void simpleAttackRangeByDirection({
  1. required Future<SpriteAnimation> animationRight,
  2. required Future<SpriteAnimation> animationLeft,
  3. required Future<SpriteAnimation> animationUp,
  4. required Future<SpriteAnimation> animationDown,
  5. required Vector2 size,
  6. required Direction direction,
  7. required AttackFromEnum attackFrom,
  8. Vector2? destroySize,
  9. dynamic id,
  10. double speed = 150,
  11. double damage = 1,
  12. bool withCollision = true,
  13. bool enableDiagonal = true,
  14. VoidCallback? onDestroy,
  15. CollisionConfig? collision,
  16. LightingConfig? lightingConfig,
  17. Future<SpriteAnimation>? animationDestroy,
})

Execute the ranged attack using a component with animation

Implementation

void simpleAttackRangeByDirection({
  required Future<SpriteAnimation> animationRight,
  required Future<SpriteAnimation> animationLeft,
  required Future<SpriteAnimation> animationUp,
  required Future<SpriteAnimation> animationDown,
  required Vector2 size,
  required Direction direction,
  required AttackFromEnum attackFrom,
  Vector2? destroySize,
  dynamic id,
  double speed = 150,
  double damage = 1,
  bool withCollision = true,
  bool enableDiagonal = true,
  VoidCallback? onDestroy,
  CollisionConfig? collision,
  LightingConfig? lightingConfig,
  Future<SpriteAnimation>? animationDestroy,
}) {
  Vector2 startPosition;
  Future<SpriteAnimation> attackRangeAnimation;

  Direction attackDirection = direction;

  Rect rectBase = rectConsideringCollision;

  switch (attackDirection) {
    case Direction.left:
      attackRangeAnimation = animationLeft;
      startPosition = Vector2(
        rectBase.left - size.x,
        (rectBase.top + (rectBase.height - size.y) / 2),
      );
      break;
    case Direction.right:
      attackRangeAnimation = animationRight;
      startPosition = Vector2(
        rectBase.right,
        (rectBase.top + (rectBase.height - size.y) / 2),
      );
      break;
    case Direction.up:
      attackRangeAnimation = animationUp;
      startPosition = Vector2(
        (rectBase.left + (rectBase.width - size.x) / 2),
        rectBase.top - size.y,
      );
      break;
    case Direction.down:
      attackRangeAnimation = animationDown;
      startPosition = Vector2(
        (rectBase.left + (rectBase.width - size.x) / 2),
        rectBase.bottom,
      );
      break;
    case Direction.upLeft:
      attackRangeAnimation = animationLeft;
      startPosition = Vector2(
        rectBase.left - size.x,
        (rectBase.top + (rectBase.height - size.y) / 2),
      );
      break;
    case Direction.upRight:
      attackRangeAnimation = animationRight;
      startPosition = Vector2(
        rectBase.right,
        (rectBase.top + (rectBase.height - size.y) / 2),
      );
      break;
    case Direction.downLeft:
      attackRangeAnimation = animationLeft;
      startPosition = Vector2(
        rectBase.left - size.x,
        (rectBase.top + (rectBase.height - size.y) / 2),
      );
      break;
    case Direction.downRight:
      attackRangeAnimation = animationRight;
      startPosition = Vector2(
        rectBase.right,
        (rectBase.top + (rectBase.height - size.y) / 2),
      );
      break;
  }

  gameRef.add(
    FlyingAttackObject.byDirection(
      id: id,
      direction: attackDirection,
      flyAnimation: attackRangeAnimation,
      animationDestroy: animationDestroy,
      position: startPosition,
      size: size,
      damage: damage,
      speed: speed,
      enabledDiagonal: enableDiagonal,
      attackFrom: attackFrom,
      onDestroy: onDestroy,
      destroySize: destroySize,
      withDecorationCollision: withCollision,
      collision: collision,
      lightingConfig: lightingConfig,
    ),
  );
}