/*****************************************************************************************/
        protected override IEnumerator ActionLogic()
        {
            if (investigator.IsDefeat)
            {
                yield break;
            }
            List <CardEffect> cardEffects = new List <CardEffect>();

            foreach (CardComponent card in investigator.Hand.ListCards.FindAll(c => !c.IsWeakness))
            {
                cardEffects.Add(new CardEffect(
                                    card: card,
                                    effect: () => new DiscardAction(card, withPreview: true, withTopUp: false).RunNow(),
                                    type: EffectType.Choose,
                                    name: "Descartar " + card.Info.Name,
                                    investigatorImageCardInfoOwner: investigator));
            }
            yield return(new SelectInvestigatorAction(investigator).RunNow());

            ChooseCardAction chooseCard = new ChooseCardAction(cardEffects, isOptionalChoice: isOptional, withPreview: false, buttonText: isOptional ? "Descarta una carta o pulsa aquí para cancelar." : "Debes descartar una carta.");

            yield return(chooseCard.RunNow());

            IsCanceled = chooseCard.IsCancel;
        }
        IEnumerator StartAction()
        {
            GameControl.CurrentAction = this;
            if (GameActionInfo != null)
            {
                yield return(AllComponents.PhasesUI.ShowInfo(GameActionInfo));
            }
            yield return(Animation());

            ChooseCardOptionalAction = new ChooseCardAction(new List <CardEffect>(), isOptionalChoice: true, isLoop: true, withPreview: false);
            CardsEvent.ForEach(c => c.CardLogic.BeginGameActionEvents(this));
            if (ChooseCardOptionalAction.ChosenCardEffects.Count > 0)
            {
                ChooseCardOptionalAction.AddActionTo();
            }
            if (flow.Count > 0)
            {
                yield return(flow.Dequeue().StartAction());
            }
            if (!IsActionCanceled)
            {
                yield return(ActionLogic());

                ChooseCardOptionalAction = new ChooseCardAction(new List <CardEffect>(), isOptionalChoice: true, isLoop: true);
                CardsEvent.ForEach(c => c.CardLogic.EndGameActionEvents(this));
                if (ChooseCardOptionalAction.ChosenCardEffects.Count > 0)
                {
                    ChooseCardOptionalAction.AddActionTo();
                }
                if (flow.Count > 0)
                {
                    yield return(flow.Dequeue().StartAction());
                }
            }
            GameControl.CurrentAction = ActionParent;
            if (ActionParent.flow.Count > 0 && !isRunNow)
            {
                yield return(ActionParent.flow.Dequeue().StartAction());
            }
        }