Example #1
0
 private IEnumerator HandleChooseCard(
     CardEffectState cardEffectState,
     CardEffectParams cardEffectParams)
 {
     cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, true, (ScreenManager.ScreenActiveCallback)(screen =>
     {
         DeckScreen deckScreen = screen as DeckScreen;
         deckScreen.Setup(new DeckScreen.Params()
         {
             mode               = DeckScreen.Mode.CardSelection,
             targetMode         = cardEffectState.GetTargetMode(),
             showCancel         = false,
             titleKey           = cardEffectState.GetParentCardState().GetTitleKey(),
             instructionsKey    = "SeekCopyInstructions",
             numCardsSelectable = cardEffectState.GetParamInt(),
         });
         deckScreen.AddDeckScreenCardStateChosenDelegate((DeckScreen.CardStateChosenDelegate)(chosenCardState =>
         {
             cardEffectParams.cardManager.DrawSpecificCard(chosenCardState, 0.0f, this.GetDrawSource(cardEffectState.GetTargetMode()), cardEffectParams.playedCard, 1, 1);
             cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, false, (ScreenManager.ScreenActiveCallback)null);
         }));
     }));
     yield break;
 }
        public virtual IEnumerator HandleChooseCard(
            CardEffectState cardEffectState,
            CardEffectParams cardEffectParams)
        {
            // Generate the Scryed Cards
            // Param Int -> Cards to scry, Additional Param Int -> cards to choose
            List <CardState> drawPile         = cardEffectParams.cardManager.GetDrawPile();
            List <CardState> scryedCards      = new List <CardState>();
            CardState        priorityUnitDraw = DivinePriorityUnit(drawPile);

            // Adjust Divine for priority draw
            if (priorityUnitDraw != null)
            {
                scryedCards.Add(priorityUnitDraw);
            }

            // Draw Piles are dumb?
            drawPile.Reverse();

            // Draw normally
            int drawSize = scryedCards.Count;

            for (int i = 0; i < Math.Min(cardsToScry - drawSize, drawPile.Count); i++)
            {
                if (drawPile[i] != priorityUnitDraw)
                {
                    scryedCards.Add(drawPile[i]);
                }
            }

            // Draw Piles are dumb? Yep
            drawPile.Reverse();

            // Hardcoded Divine interaction to always divine a card with ID "ChosenOne"
            foreach (var card in drawPile)
            {
                if (card.GetID() == "ChosenOne")
                {
                    if (!scryedCards.Contains(card))
                    {
                        scryedCards.Add(card);
                    }
                }
            }
            foreach (var card in cardEffectParams.cardManager.GetDiscardPile())
            {
                if (card.GetID() == "ChosenOne")
                {
                    if (!scryedCards.Contains(card))
                    {
                        scryedCards.Add(card);
                    }
                }
            }

            cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, true, screen =>
            {
                DeckScreen deckScreen = screen as DeckScreen;
                deckScreen.Setup(new DeckScreen.Params()
                {
                    mode               = DeckScreen.Mode.CardSelection,
                    showCancel         = true,
                    targetMode         = TargetMode.Deck,
                    titleKey           = cardEffectState.GetParentCardState().GetTitleKey(),
                    instructionsKey    = DescriptionKey,
                    numCardsSelectable = cardEffectState.GetAdditionalParamInt(),
                });

                // Reset the card List to the scryed cards
                AccessTools.Field(typeof(DeckScreen), "cardStates").SetValue(screen, scryedCards);
                AccessTools.Method(typeof(DeckScreen), "ApplyStateToCachedCards").Invoke(screen, new object[] { scryedCards, cardEffectParams.cardManager.GetCardStatistics(), cardEffectParams.cardManager.GetMonsterManager(), cardEffectParams.cardManager.GetHeroManager(), null });

                AddDelegate(cardEffectState, cardEffectParams, deckScreen);
            });

            yield break;
        }
Example #3
0
        public override IEnumerator HandleChooseCard(
            CardEffectState cardEffectState,
            CardEffectParams cardEffectParams)
        {
            List <CardState> toProcessCards = new List <CardState>();

            toProcessCards.AddRange(cardEffectParams.cardManager.GetDrawPile());

            List <CardState> scryedCards = new List <CardState>();

            int num        = 0;
            int intInRange = cardsToScry;

            for (int i = 0; i < toProcessCards.Count; i++)
            {
                if (num >= intInRange)
                {
                    break;
                }
                scryedCards.Add(toProcessCards[i]);
            }
            List <CardState> drawPile = cardEffectParams.cardManager.GetDrawPile();

            drawPile.AddRange(cardEffectParams.cardManager.GetDiscardPile());

            foreach (var card in drawPile)
            {
                if (card.GetID() == "ChosenOne")
                {
                    if (!scryedCards.Contains(card))
                    {
                        scryedCards.Add(card);
                    }
                }
            }

            // Generate the Scryed Cards
            // Param Int -> Cards to scry, Additional Param Int -> cards to choose

            cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, true, screen =>
            {
                DeckScreen deckScreen = screen as DeckScreen;
                deckScreen.Setup(new DeckScreen.Params()
                {
                    mode               = DeckScreen.Mode.CardSelection,
                    showCancel         = true,
                    targetMode         = TargetMode.Deck,
                    titleKey           = cardEffectState.GetParentCardState().GetTitleKey(),
                    instructionsKey    = GetTooltipBaseKey(),
                    numCardsSelectable = cardEffectState.GetAdditionalParamInt(),
                });

                // Reset the card List to the scryed cards
                AccessTools.Field(typeof(DeckScreen), "cardStates").SetValue(screen, scryedCards);
                AccessTools.Method(typeof(DeckScreen), "ApplyStateToCachedCards").Invoke(screen, new object[] { scryedCards, cardEffectParams.cardManager.GetCardStatistics(), cardEffectParams.cardManager.GetMonsterManager(), cardEffectParams.cardManager.GetHeroManager(), null });

                AddDelegate(cardEffectState, cardEffectParams, deckScreen);
            });

            yield break;
        }