/*****************************************************************************************/ 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()); } }