Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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);
                }
            }
        }