コード例 #1
0
        public override void AddDelegate(CardEffectState cardEffectState,
                                         CardEffectParams cardEffectParams,
                                         DeckScreen deckScreen)
        {
            deckScreen.AddDeckScreenCardStateChosenDelegate((DeckScreen.CardStateChosenDelegate)(chosenCardState =>
            {
                CardUpgradeState cardUpgradeState = new CardUpgradeState();
                cardUpgradeState.Setup(cardEffectState.GetParamCardUpgradeData());

                foreach (CardUpgradeMaskData filter in cardUpgradeState.GetFilters())
                {
                    if (!filter.FilterCard(chosenCardState, cardEffectParams.relicManager))
                    {
                        // If any of the filters matches, it doesn't get upgraded
                        return;
                    }
                }

                if (chosenCardState.GetCardType() == CardType.Monster)
                {
                    chosenCardState.GetTemporaryCardStateModifiers().AddUpgrade(cardUpgradeState);
                }
                if (chosenCardState.GetCardType() == CardType.Spell)
                {
                    chosenCardState.AddTemporaryTrait(new CardTraitDataBuilder {
                        TraitStateType = typeof(CardTraitPyreboost)
                    }.Build(), cardEffectParams.cardManager);
                }

                chosenCardState.UpdateCardBodyText();

                cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, false, (ScreenManager.ScreenActiveCallback)null);
            }));
        }
コード例 #2
0
ファイル: StokerPlugin.cs プロジェクト: crazyjackel/Stoker
 //I probably could convert these functions to be generic and the selected objects to a type dictionary... but I am lazy, so too bad.
 public void OnClickCardState(StokerPlugin plugin, SelectionButton <CardState> obj, CardState item)
 {
     //Sets the Selected Card State to this
     plugin.selectedCardState = item;
     //Update old Card State's GameObj's color
     if (plugin.selectedCardStateGameobject != null)
     {
         plugin.selectedCardStateGameobject.button.colors = getGreyColorBlock();
     }
     //Set Selected Card State to this
     plugin.selectedCardStateGameobject = obj;
     //Update Colors
     obj.button.colors    = getRedColorBlock();
     selectedUpgradeData  = null;
     selectedUpgradeState = null;
     if (plugin.selectedUpgradeStateGameobject != null)
     {
         plugin.selectedUpgradeStateGameobject.button.colors = getGreyColorBlock();
         plugin.selectedUpgradeStateGameobject = null;
     }
     if (plugin.selectedUpgradeDataGameobject != null)
     {
         plugin.selectedUpgradeDataGameobject.button.colors = getGreyColorBlock();
         plugin.selectedUpgradeDataGameobject = null;
     }
     selectedCardState.UpdateCardBodyText(currentSave);
     UpdateUpgrades();
     UpdateUpgradeDatabaseByCardState(selectedCardState);
     //Prevents a desync due to deck issues.
     if (!IsInit)
     {
         DeckChangedNotification(currentSave.GetDeckState(), currentSave.GetVisibleDeckCount());
         IsInit = true;
     }
 }
コード例 #3
0
        public static void LoadSaveState(StokerSaveState saveState, SaveManager save)
        {
            if (save != null && saveState != null)
            {
                //remove all cards except for champion

                var deckState = save.GetDeckState();
                if (deckState != null)
                {
                    deckState.RemoveAll(x => !x.IsChampionCard());
                    List <IDeckNotifications> deckNotifications = (List <IDeckNotifications>)AccessTools.Field(typeof(SaveManager), "deckNotifications").GetValue(save);
                    deckNotifications.ForEach(rn => rn.DeckChangedNotification(deckState, save.GetVisibleDeckCount()));
                }
                save.RemoveAllRelics();
                if (saveState.relics != null)
                {
                    foreach (var relic in saveState.relics)
                    {
                        if (relic != null)
                        {
                            var relicData = save.GetAllGameData().FindCollectableRelicData(relic);
                            if (relicData != null)
                            {
                                save.AddRelic(relicData);
                            }
                        }
                    }
                }
                if (saveState.cards != null)
                {
                    foreach (var card in saveState.cards)
                    {
                        if (card.cardName != null || card.cardName != "")
                        {
                            var cardData = save.GetAllGameData().FindCardData(card.cardName);
                            var spawn    = cardData.GetSpawnCharacterData();

                            if (cardData != null && (spawn == null || (spawn != null && !spawn.IsChampion())))
                            {
                                var state = save.AddCardToDeck(cardData);
                                if (card.upgradeNames != null)
                                {
                                    foreach (string upgrade in card.upgradeNames)
                                    {
                                        if (upgrade != "")
                                        {
                                            CardUpgradeState cardUpgradeState = Activator.CreateInstance <CardUpgradeState>();
                                            CardUpgradeData  data             = save.GetAllGameData().FindCardUpgradeData(upgrade);
                                            cardUpgradeState.Setup(data);
                                            state.Upgrade(cardUpgradeState, null);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #4
0
        public override IEnumerator ApplyEffect(CardEffectState cardEffectState, CardEffectParams cardEffectParams)
        {
            foreach (CharacterState target in cardEffectParams.targets)
            {
                if (!OnGainEmber.energyData.TryGetValue(target, out int addEnergy))
                {
                    addEnergy = 1;
                }

                CardUpgradeState upgradeState = new CardUpgradeState();
                upgradeState.Setup(cardEffectState.GetParamCardUpgradeData());

                // Tweak the CardUpgradeState's stats
                Traverse.Create(upgradeState).Field("attackDamage").SetValue(upgradeState.GetAttackDamage() * addEnergy);
                Traverse.Create(upgradeState).Field("additionalHP").SetValue(upgradeState.GetAdditionalHP() * addEnergy);

                if (cardEffectParams.playedCard != null)
                {
                    foreach (CardTraitState traitState in cardEffectParams.playedCard.GetTraitStates())
                    {
                        traitState.OnApplyingCardUpgradeToUnit(cardEffectParams.playedCard, target, upgradeState, cardEffectParams.cardManager);
                    }
                }
                int    attackDamage = upgradeState.GetAttackDamage();
                int    additionalHP = upgradeState.GetAdditionalHP();
                string text         = ((attackDamage != 0) ? GetAttackNotificationText(upgradeState) : null);
                string text2        = ((additionalHP != 0) ? GetHPNotificationText(upgradeState) : null);
                string text3        = string.Empty;
                if (text != null && text2 != null)
                {
                    text3 = string.Format("TextFormat_SpacedItems".Localize(), text, text2);
                }
                else if (text != null)
                {
                    text3 = text;
                }
                else if (text2 != null)
                {
                    text3 = text2;
                }
                if (text3 != null)
                {
                    NotifyHealthEffectTriggered(cardEffectParams.saveManager, cardEffectParams.popupNotificationManager, text3, target.GetCharacterUI());
                }
                yield return(target.ApplyCardUpgrade(upgradeState));

                CardState spawnerCard = target.GetSpawnerCard();
                bool      flag        = target.HasStatusEffect("cardless");
                if (spawnerCard != null && !cardEffectParams.saveManager.PreviewMode && !flag)
                {
                    CardAnimator.CardUpgradeAnimationInfo type = new CardAnimator.CardUpgradeAnimationInfo(spawnerCard, upgradeState);
                    CardAnimator.DoAddRecentCardUpgrade.Dispatch(type);
                    spawnerCard.GetTemporaryCardStateModifiers().AddUpgrade(upgradeState);
                    spawnerCard.UpdateCardBodyText();
                    cardEffectParams.cardManager?.RefreshCardInHand(spawnerCard);
                }
            }
        }
コード例 #5
0
        private string GetHPNotificationText(CardUpgradeState upgradeState)
        {
            int additionalHP = upgradeState.GetAdditionalHP();

            if (additionalHP >= 0)
            {
                return(CardEffectBuffMaxHealth.GetNotificationText(additionalHP));
            }
            return(CardEffectDebuffMaxHealth.GetNotificationText(Mathf.Abs(additionalHP)));
        }
コード例 #6
0
ファイル: StokerPlugin.cs プロジェクト: crazyjackel/Stoker
 public void AttemptToUpgradeCardState()
 {
     if (selectedCardState != null && selectedUpgradeData != null)
     {
         CardUpgradeState cardUpgradeState = Activator.CreateInstance <CardUpgradeState>();
         cardUpgradeState.Setup(selectedUpgradeData);
         selectedCardState.Upgrade(cardUpgradeState, currentSave);
         selectedCardState.UpdateCardBodyText(currentSave);
         UpdateUpgrades();
         RefreshSelectionCardStateSelectionButtons();
     }
 }
コード例 #7
0
        static IEnumerator Postfix(IEnumerator __result, CharacterState __instance, CardUpgradeState cardUpgradeState)
        {
            Traverse.Create(__instance).Property("PrimaryStateInformation").Property("Size").SetValue(__instance.GetSize() + cardUpgradeState.GetAdditionalSize());
            ProviderManager.TryGetProvider <RoomManager>(out RoomManager roomManager);

            if (ProviderManager.CombatManager.IsPlayerActionPhase())
            {
                var room = roomManager.GetRoom(__instance.GetCurrentRoomIndex());
                Traverse.Create(room).Field("roomUI").Field <RoomCapacityUI>("roomCapacityUI").Value.Show((room), false);
            }
            //yield return roomManager.GetRoom(__instance.GetCurrentRoomIndex()).AdjustCapacity(Team.Type.Monsters, 0, false);
            yield return(__result);
        }
コード例 #8
0
        public override IEnumerator ApplyEffect(
            CardEffectState cardEffectState,
            CardEffectParams cardEffectParams)
        {
            CardUpgradeState cardUpgradeState = new CardUpgradeState();

            cardUpgradeState.Setup(cardEffectState.GetParamCardUpgradeData());
            var card = cardEffectParams.playedCard;

            CardAnimator.CardUpgradeAnimationInfo type = new CardAnimator.CardUpgradeAnimationInfo(card, cardUpgradeState);
            CardAnimator.DoAddRecentCardUpgrade.Dispatch(type);
            card.GetTemporaryCardStateModifiers().AddUpgrade(cardUpgradeState);
            card.UpdateCardBodyText();
            cardEffectParams.cardManager.RefreshCardInHand(card);

            yield break;
        }
コード例 #9
0
        public WardStatePower()
        {
            ID = "Power";
            tooltipTitleKey = "PowerWardBeta_Name";
            tooltipBodyKey  = "PowerWardBeta_Desc";

            var localPath = Path.GetDirectoryName(new Uri(Assembly.GetCallingAssembly().CodeBase).LocalPath);

            wardIcon = CustomAssetManager.LoadSpriteFromPath(Path.Combine(localPath, "Unit Assets/PowerWard.png"));

            CardUpgradeData upgrade = new CardUpgradeDataBuilder
            {
                BonusDamage = power
            }.Build();

            upgradeState = new CardUpgradeState();
            upgradeState.Setup(upgrade);
        }
コード例 #10
0
        public override void OnCardDrawn(CardState thisCard, CardManager cardManager, PlayerManager playerManager, MonsterManager monsterManager)
        {
            if (upgrade == null)
            {
                var upgradeBuilder = new CardUpgradeDataBuilder
                {
                    HideUpgradeIconOnCard = true,
                };

                upgradeBuilder.StatusEffectUpgrades.AddRange(GetParamStatusEffects().ToList());

                upgrade = new CardUpgradeState();
                upgrade.Setup(upgradeBuilder.Build());
            }

            foreach (CardState item in cardManager.GetAllCards())
            {
                if (item.IsMonsterCard() && !item.GetTemporaryCardStateModifiers().HasUpgrade(upgrade))
                {
                    item.GetTemporaryCardStateModifiers().AddUpgrade(upgrade);
                }
            }
        }
コード例 #11
0
        public override void AddDelegate(CardEffectState cardEffectState,
                                         CardEffectParams cardEffectParams,
                                         DeckScreen deckScreen)
        {
            deckScreen.AddDeckScreenCardStateChosenDelegate((DeckScreen.CardStateChosenDelegate)(chosenCardState =>
            {
                CardUpgradeState cardUpgradeState = new CardUpgradeState();
                cardUpgradeState.Setup(cardEffectState.GetParamCardUpgradeData());

                foreach (CardUpgradeMaskData filter in cardUpgradeState.GetFilters())
                {
                    if (!filter.FilterCard(chosenCardState, cardEffectParams.relicManager))
                    {
                        // If any of the filters matches, it doesn't get upgraded
                        return;
                    }
                }
                chosenCardState.GetTemporaryCardStateModifiers().AddUpgrade(cardUpgradeState);
                chosenCardState.UpdateCardBodyText();

                cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, false, (ScreenManager.ScreenActiveCallback)null);
            }));
        }
コード例 #12
0
 private string GetAttackNotificationText(CardUpgradeState upgradeState)
 {
     return(CardEffectBuffDamage.GetNotificationText(upgradeState.GetAttackDamage()));
 }
コード例 #13
0
        public override void OnApplyingCardUpgradeToUnit(CardState thisCard, CharacterState targetUnit, CardUpgradeState upgradeState, CardManager cardManager)
        {
            int multiplier = GetMultiplier(cardManager.GetCardStatistics());

            upgradeState.SetAttackDamage(upgradeState.GetAttackDamage() * multiplier);
            upgradeState.SetAdditionalHP(upgradeState.GetAdditionalHP() * multiplier);
            upgradeState.SetAdditionalSize(upgradeState.GetAdditionalSize() * multiplier);
        }
コード例 #14
0
        public override bool OnCardBeingUpgraded(CardState cardState, CardState upgradingCardSource, CardManager cardManager, CardUpgradeState cardUpgradeState)
        {
            int scaleAmount = GetScaleAmount(upgradingCardSource, cardManager);

            cardUpgradeState.SetAttackDamage(cardUpgradeState.GetAttackDamage() * scaleAmount);
            cardUpgradeState.SetAdditionalHP(cardUpgradeState.GetAdditionalHP() * scaleAmount);
            cardUpgradeState.SetCostReduction(cardUpgradeState.GetCostReduction() * scaleAmount);
            cardUpgradeState.SetAdditionalHeal(cardUpgradeState.GetAdditionalHeal() * scaleAmount);
            cardUpgradeState.SetAdditionalSize(cardUpgradeState.GetAdditionalSize() * scaleAmount);
            foreach (StatusEffectStackData statusEffectStackData in cardUpgradeState.GetStatusEffectUpgrades())
            {
                cardUpgradeState.AddStatusEffectUpgradeStacks(statusEffectStackData.statusId, statusEffectStackData.count * (scaleAmount - statusEffectStackData.count));
            }

            return(true);
        }
コード例 #15
0
ファイル: StokerPlugin.cs プロジェクト: crazyjackel/Stoker
 public string GetUpgradeStateName(CardUpgradeState arg)
 {
     return(GetUpgradeText(data.FindCardUpgradeData(arg.GetCardUpgradeDataId())));
 }
コード例 #16
0
ファイル: StokerPlugin.cs プロジェクト: crazyjackel/Stoker
 public void OnClickUpgradeState(StokerPlugin plugin, SelectionButton <CardUpgradeState> obj, CardUpgradeState item)
 {
     plugin.selectedUpgradeState = item;
     if (plugin.selectedUpgradeStateGameobject != null)
     {
         plugin.selectedUpgradeStateGameobject.button.colors = getGreyColorBlock();
     }
     plugin.selectedUpgradeStateGameobject = obj;
     obj.button.colors = getRedColorBlock();
 }