public override IEnumerator UsePower(int index = 0) { //Destroy a season. IEnumerator coroutine = base.GameController.SelectAndDestroyCard(base.HeroTurnTakerController, new LinqCardCriteria((Card c) => IsSeason(c), "season"), false, cardSource: GetCardSource()); if (base.UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } //Play a season... List <PlayCardAction> storedResults = new List <PlayCardAction>(); coroutine = base.GameController.SelectAndPlayCardFromHand(base.HeroTurnTakerController, false, storedResults: storedResults, cardCriteria: new LinqCardCriteria((Card c) => IsSeason(c), "season"), cardSource: GetCardSource()); if (base.UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } // ...and change the next damage dealt by {LadyOfTheWood} to a type listed on it. if (DidPlayCards(storedResults)) { Card season = storedResults.First().CardToPlay; DamageType?dt = GetDamageTypeFromSeason(season); if (dt != null) { DamageType damageType = dt.Value; ChangeDamageTypeStatusEffect effect = new ChangeDamageTypeStatusEffect(damageType); effect.NumberOfUses = 1; effect.SourceCriteria.IsSpecificCard = base.Card; coroutine = AddStatusEffect(effect); if (base.UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } } } // You may use a power coroutine = base.GameController.SelectAndUsePower(base.HeroTurnTakerController, cardSource: GetCardSource()); if (base.UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } yield break; }
public override IEnumerator UseIncapacitatedAbility(int index) { switch (index) { case 0: { List <DiscardCardAction> storedResultsDiscard = new List <DiscardCardAction>(); List <SelectTurnTakerDecision> storedResultsTurnTaker = new List <SelectTurnTakerDecision>(); var coroutine = base.GameController.SelectHeroToDiscardCard(this.DecisionMaker, storedResultsTurnTaker: storedResultsTurnTaker, storedResultsDiscard: storedResultsDiscard, cardSource: base.GetCardSource()); if (base.UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } if (DidDiscardCards(storedResultsDiscard, 1)) { var httc = base.FindHeroTurnTakerController(GetSelectedTurnTaker(storedResultsTurnTaker).ToHero()); coroutine = base.DrawCards(httc, 3); if (base.UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } } break; } case 1: { var coroutine = base.GameController.SelectAndDestroyCard(this.DecisionMaker, new LinqCardCriteria(c => c.IsEnvironment, "enviroment"), false, cardSource: GetCardSource()); if (base.UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } yield break; } case 2: { List <SelectDamageTypeDecision> storedResults = new List <SelectDamageTypeDecision>(); var coroutine = base.GameController.SelectDamageType(this.DecisionMaker, storedResults, cardSource: GetCardSource()); if (base.UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } var selectedType = GetSelectedDamageType(storedResults); if (selectedType.HasValue) { ChangeDamageTypeStatusEffect status = new ChangeDamageTypeStatusEffect(selectedType.Value); status.SourceCriteria.IsHero = true; status.SourceCriteria.IsTarget = true; status.UntilStartOfNextTurn(this.TurnTaker); status.CardSource = Card; coroutine = base.AddStatusEffect(status); if (base.UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } } break; } } yield break; }
private IEnumerator ModifyDamageFromEffectResponse(AddStatusEffectAction se, int increaseAmount, Power power) { IncreaseDamageStatusEffect increaseDamageStatusEffect = new IncreaseDamageStatusEffect(increaseAmount); increaseDamageStatusEffect.StatusEffectCriteria.Effect = se.StatusEffect; if (power != null && power.CardController != null) { increaseDamageStatusEffect.StatusEffectCriteria.CardWithPower = power.CardController.Card; } IEnumerator coroutine = AddStatusEffect(increaseDamageStatusEffect); if (UseUnityCoroutines) { yield return(GameController.StartCoroutine(coroutine)); } else { GameController.ExhaustCoroutine(coroutine); } var storedYesNo = new List <YesNoCardDecision>(); coroutine = GameController.MakeYesNoCardDecision(DecisionMaker, SelectionType.DamageType, this.Card, storedResults: storedYesNo, associatedCards: new Card[] { power.CardSource.Card }, cardSource: GetCardSource()); if (UseUnityCoroutines) { yield return(GameController.StartCoroutine(coroutine)); } else { GameController.ExhaustCoroutine(coroutine); } if (DidPlayerAnswerYes(storedYesNo)) { var makeDamagePsychic = new ChangeDamageTypeStatusEffect(DamageType.Psychic); makeDamagePsychic.StatusEffectCriteria.Effect = se.StatusEffect; if (power != null && power.CardController != null) { increaseDamageStatusEffect.StatusEffectCriteria.CardWithPower = power.CardController.Card; } coroutine = AddStatusEffect(makeDamagePsychic, false); if (UseUnityCoroutines) { yield return(GameController.StartCoroutine(coroutine)); } else { GameController.ExhaustCoroutine(coroutine); } coroutine = GameController.SendMessageAction($"Damage from the status effect made by {power.Title} will be changed to psychic.", Priority.Medium, GetCardSource()); if (UseUnityCoroutines) { yield return(GameController.StartCoroutine(coroutine)); } else { GameController.ExhaustCoroutine(coroutine); } } }