public override void PlayBoostCard()
 {
     base.PlayBoostCard();
     if (_boostAudio)
     {
         AudioHelper.PlayClip2D(_boostAudio, 0.5f);
     }
     EndedSelection?.Invoke();
 }
    // TODO I don't think it's best that this goes here, but I don't know a better way to organize it yet
    // TODO these if checks are kinda disgusting
    IEnumerator AbilityCardSelection(AbilityCard card, int index)
    {
        SelectedAbilityCard?.Invoke(card);
        if (_selectedAudio)
        {
            AudioHelper.PlayClip2D(_selectedAudio, 0.5f);
        }
        yield return(new WaitForEndOfFrame());

        while (true)
        {
            if (Input.GetMouseButtonDown(0))
            {
                RaycastHit hit   = GetPointerRaycast();
                BoardSpace space = hit.collider?.GetComponent <BoardSpace>();
                if (space != null) // && hit.collider.gameObject.layer == LayerMask.NameToLayer("PlayerSpace"))
                {
                    if (!space.UseCard(card))
                    {
                        EndedSelection?.Invoke();
                        _abilityRoutine = null;
                        yield break;
                    }
                    Actions -= card.Cost;
                    Hand.Remove(index);
                    AbilityDiscard.Add(card);

                    RaiseActions(Actions);
                    RaiseDiscard(AbilityDiscard);
                    RaiseHand(Hand);
                    EndedSelection?.Invoke();

                    _abilityRoutine = null;
                    yield break;
                }
                else
                {
                    if (_clickFailAudio)
                    {
                        AudioHelper.PlayClip2D(_clickFailAudio, 0.5f);
                    }
                }
            }
            else if (Input.GetMouseButtonDown(1))
            {
                EndedSelection?.Invoke();
                if (_droppedAudio)
                {
                    AudioHelper.PlayClip2D(_droppedAudio, 0.5f);
                }
                _abilityRoutine = null;
                yield break;
            }

            yield return(null);
        }
    }
    IEnumerator BoostCardSelection()
    {
        SelectedBoostCard?.Invoke(BoostDeck.TopItem);
        if (_selectedAudio)
        {
            AudioHelper.PlayClip2D(_selectedAudio, 0.5f);
        }
        yield return(new WaitForEndOfFrame());

        while (true)
        {
            if (Input.GetMouseButtonDown(0))
            {
                RaycastHit hit       = GetPointerRaycast();
                IBoostable boostable = hit.collider?.GetComponent <IBoostable>();
                if (boostable != null)
                {
                    ITargetable boostTarget = boostable as ITargetable;
                    TargetController.CurrentTarget = boostTarget;
                    PlayBoostCard();

                    _boostRoutine = null;
                    yield break;
                }
                else if (hit.collider?.gameObject.layer == LayerMask.NameToLayer("PlayerTarget"))
                {
                    TargetController.CurrentTarget = GetComponent <ITargetable>();
                    PlayBoostCard();

                    EndedSelection?.Invoke();
                    _boostRoutine = null;
                    yield break;
                }
                else
                {
                    if (_clickFailAudio)
                    {
                        AudioHelper.PlayClip2D(_clickFailAudio, 0.5f);
                    }
                }
            }
            else if (Input.GetMouseButtonDown(1))
            {
                EndedSelection?.Invoke();
                if (_droppedAudio)
                {
                    AudioHelper.PlayClip2D(_droppedAudio, 0.5f);
                }
                _boostRoutine = null;
                yield break;
            }
            yield return(null);
        }
    }