public void update(Table table, THHPlayer self, THHPlayer player, TouhouCardEngine.Card card, CardSkinData skin)
        {
            this.card = card;

            Image.sprite  = skin.image;
            CostText.text = card.getCost().ToString();
            if (card.isUsed())
            {
                IsUsedController = IsUsed.True;
            }
            else
            {
                IsUsedController = IsUsed.False;
            }
            if (player == self &&
                card.isUsable(table.game, player, out _) &&//技能是可用的
                table.selectableTargets == null   //没有在选择目标
                )
            {
                IsUsableController    = IsUsable.True;
                asButton.interactable = true;
            }
            else
            {
                IsUsableController    = IsUsable.False;
                asButton.interactable = false;
            }
        }
Exemplo n.º 2
0
        float calcActionValue(Response response, THHGame game, THHPlayer player, THHPlayer opponent)
        {
            float value = 0;

            if (response is UseResponse use)
            {
                Card card   = game.getCard(use.cardId);
                Card target = use.targetsId.Length > 0 ? game.getCard(use.targetsId[0]) : null;
                value = card.getCost(game);
                if (card.define is LuckyCoin)
                {
                    value = 1;
                }
                else if (card.define is SummerFire)
                {
                    value = calcDamageValue(game, player, opponent, target, 1);
                }
                else if (card.define is AutumnEdge)
                {
                    value = calcRandomDamageValue(game, player, opponent, opponent.field, 2);
                }
                else if (card.define is SpringWind)
                {
                    value = calcBuffValue(game, player, opponent, target, 0, 2);
                }
                else if (card.define is WinterElement)
                {
                    value = calcFreezeValue(game, player, opponent, target);
                }
                else if (card.define is SummerFire)
                {
                    value = calcBuffValue(game, player, opponent, target, 2, 0);
                }
                else if (card.define is DoyouSpear)
                {
                    value = calcServantValue(game, player, opponent, 1, 1);
                }
                else if (card.define is MultiCast)
                {
                    value = player.hand.Where(c => c.isSpell() && c.getCost(game) > 1).Count() > 0 ? 2 : 0;
                }
                else if (card.define is TheGreatLibrary)
                {
                    value = 1;
                }
                else if (card.define is BestMagic)
                {
                    value = 5;
                }
                else if (card.define is ArcaneKnowledge)
                {
                    value = 4;
                }
                else if (card.define is PhilosopherStone)
                {
                    value = 2;
                }
                else if (card.define is MetalFatigue)
                {
                    value = calcAOEDamageValue(game, player, opponent, opponent.field, 3);
                }
                else if (card.define is SylphyHorn)
                {
                    value = calcBuffValue(game, player, opponent, target, 3, 6);
                }
                else if (card.define is PrincessUndine)
                {
                    value = calcAOEDamageValue(game, player, opponent, player.field, 3);
                }
                else if (card.define is AgniShine)
                {
                    value = calcDamageValue(game, player, opponent, target, 7);
                }
                else if (card.define is TrilithonShake)
                {
                    value = calcServantValue(game, player, opponent, 3, 9);
                }
                else if (card.define is RoyalFlare)
                {
                    value = calcDamageValue(game, player, opponent, opponent.master, 15);
                }
                else if (card.define is SilentSelene)
                {
                    value = calcServantsValue(game, player, opponent, opponent.field);
                }
                else if (card.define is ElementalHarvester)
                {
                    value = calcAOEDamageValue(game, player, opponent, opponent.field, 2);
                }
                else if (card.define is BurgeoningRise)
                {
                    value = calcBuffValue(game, player, opponent, target, 3, 3) + (target.getOwner() == player ? calcServantValue(game, player, opponent, target) - 1 : 0);
                }
                else if (card.define is PhlogisticRain)
                {
                    value = calcRandomDamageValue(game, player, opponent, opponent.field.Append(opponent.master), 1) * 6;
                }
                else if (card.define is StElmoPillar)
                {
                    value = calcDamageValue(game, player, opponent, target, 6);
                }
                else if (card.define is NoachianDeluge)
                {
                    value = calcServantValue(game, player, opponent, 2, 2) + 1;
                }
                else if (card.define is MercuryPoison)
                {
                    value = calcAOEDamageValue(game, player, opponent, opponent.field, 3);
                }
                else if (card.define is ForestBlaze)
                {
                    value = calcBuffAllValue(game, player, opponent, player.field, 2, 2) + calcRandomDamageValue(game, player, opponent, opponent.field, 1) * player.field.count;
                }
                else if (card.define is WaterElf)
                {
                    value = calcBuffValue(game, player, opponent, target, 3, 6 + target.getLife(game) - target.getCurrentLife(game)) + 1;
                }
                else if (card.define is LavaCromlech)
                {
                    value = (calcServantValue(game, player, opponent, 2, 2) + calcRandomDamageValue(game, player, opponent, opponent.field, 2)) * 3;
                }
                else if (card.define is GingerGust)
                {
                    value = (calcServantValue(game, player, opponent, 3, 1) + 1) * opponent.field.count;
                }
            }
            return(value);
        }