public Attack(
            AttackType type,
            Direction direction,
            float strength,
            int range,
            Vector2Int size,
            Physics.PhysicsLayer layers)
        {
            this.Type = type;

            this.Direction = direction;

            this.Strength = strength;

            switch (direction)
            {
            case Direction.Left:
            case Direction.Right:
                LocalPosition = new Vector2Int(range, 0) * (direction == Direction.Left ? -1 : 1);
                break;

            case Direction.Up:
            case Direction.Down:
                LocalPosition = new Vector2Int(0, range) * (direction == Direction.Down ? -1 : 1);
                break;
            }

            hitBox = AddComponent(new BoxCollider(size.X, size.Y));
            hitBox.CollidesWithLayers = (int)layers;
            hitBox.PhysicsLayer       = (int)Physics.PhysicsLayer.None;

            spriteController =
                AddComponent(new AttackSpriteController(
                                 AddComponent(new SpriteAnimator())));

            spriteController.SpriteAnimator.FlipX = direction == Direction.Right;
        }
 public static bool IsCollidable(Physics.PhysicsLayer layers)
 {
     return
         ((layers & Physics.PhysicsLayer.Collidable) != 0 ||
          (layers & Physics.PhysicsLayer.Object) != 0);
 }