예제 #1
0
    public SpecialAbility GetAdjustmentSource(StatAdjustment adj)
    {
        for (int i = 0; i < adjustments.Count; i++)
        {
            if (adjustments[i].uniqueID == adj.uniqueID)
            {
                return(parentAbility);
            }
        }

        return(null);
    }
예제 #2
0
    private void SwapStats(CardVisual target)
    {
        int stat1 = target.GetStatValue(sourceStat, true);
        int stat2 = target.GetStatValue(destinationStat, true);

        StatAdjustment first  = new StatAdjustment(sourceStat, stat2, false, true, source);
        StatAdjustment second = new StatAdjustment(destinationStat, stat1, false, true, source);

        //adjustments.Add(first);
        //adjustments.Add(second);
        source.RPCCreateStatAdjustment(PhotonTargets.All, first, parentAbility.abilityName);
        source.RPCCreateStatAdjustment(PhotonTargets.All, second, parentAbility.abilityName);

        ApplyStatAdjustment(target);
    }
예제 #3
0
    private void CombatHelper(CreatureCardVisual damageDealer, CreatureCardVisual damageTaker)
    {
        int tempAttackvalue = 0;

        if (damageDealer.attack < 0)
        {
            tempAttackvalue = 0;
        }
        else
        {
            tempAttackvalue = -damageDealer.attack;
        }

        //Debug.Log("the attacker's attack value at the time of damage dealt is: " + damageDealer.attack.ToString());

        SpecialAbility.StatAdjustment adj = new SpecialAbility.StatAdjustment(Constants.CardStats.Health, tempAttackvalue, false, false, damageDealer);

        bool hasVFX = String.IsNullOrEmpty(damageDealer.attackEffect);

        if (damageDealer == attacker)
        {
            if (damageDealer.keywords.Contains(Keywords.Cleave))
            {
                CardVisual rightOfTarget = damageTaker.owner.battleFieldManager.GetCardToTheRight(damageTaker);
                CardVisual leftOfTarget  = damageTaker.owner.battleFieldManager.GetCardToTheLeft(damageTaker);

                if (rightOfTarget != null)
                {
                    rightOfTarget.RPCApplyUntrackedStatAdjustment(PhotonTargets.All, adj, damageDealer, false);
                }

                if (leftOfTarget != null)
                {
                    leftOfTarget.RPCApplyUntrackedStatAdjustment(PhotonTargets.All, adj, damageDealer, false);
                }
            }
        }


        damageTaker.RPCApplyUntrackedStatAdjustment(PhotonTargets.All, adj, damageDealer, !hasVFX);

        if (!hasVFX)
        {
            LaunchVFX(damageDealer, damageTaker);
        }
    }
예제 #4
0
    public void UpkeepKeywordTriggerHandler()
    {
        //Torture
        List <CardVisual> torturedSouls = Finder.FindAllCardsInZone(Constants.DeckType.Battlefield, Constants.Keywords.Tortured, Constants.OwnerConstraints.Mine, Constants.CardType.Soul);

        for (int i = 0; i < torturedSouls.Count; i++)
        {
            SpecialAbility.StatAdjustment torture = new SpecialAbility.StatAdjustment(Constants.CardStats.Health, -1, false, false, torturedSouls[i]);

            torturedSouls[i].RPCApplyUntrackedStatAdjustment(PhotonTargets.All, torture, torturedSouls[i], false);
        }


        //Rush
        List <CardVisual> rushSouls = Finder.FindAllCardsInZone(Constants.DeckType.Battlefield, Constants.Keywords.Rush, Constants.OwnerConstraints.Mine, Constants.CardType.Soul);

        for (int i = 0; i < rushSouls.Count; i++)
        {
            rushSouls[i].RPCAddKeyword(PhotonTargets.All, Constants.Keywords.Rush, false);
        }

        //Regenerators
        List <CardVisual> regeneratorSouls = Finder.FindAllCardsOfType(Constants.CardType.Soul, Constants.DeckType.Battlefield, Constants.OwnerConstraints.Mine);

        for (int i = 0; i < regeneratorSouls.Count; i++)
        {
            for (int j = 0; j < regeneratorSouls[i].specialAttributes.Count; j++)
            {
                if (regeneratorSouls[i].specialAttributes[j].attributeType == SpecialAttribute.AttributeType.Regeneration)
                {
                    SpecialAbility.StatAdjustment regen = new SpecialAbility.StatAdjustment(Constants.CardStats.Health, regeneratorSouls[i].specialAttributes[j].attributeValue, false, false, regeneratorSouls[i]);
                    regeneratorSouls[i].RPCApplyUntrackedStatAdjustment(PhotonTargets.All, regen, regeneratorSouls[i], false);
                }
            }
        }
    }
예제 #5
0
    public override void AlterCardStats(Constants.CardStats stat, int value, CardVisual source, bool waitForVFX = true, bool sendEvent = true, bool setStats = false)
    {
        //base.AlterCardStats(stat, value, source, waitForVFX, sendEvent, setStats);

        //Debug.Log("creature card alter stat");
        switch (stat)
        {
        case Constants.CardStats.Attack:

            if (setStats)
            {
                attack = value;
            }
            else
            {
                attack += value;
            }


            if (!waitForVFX)
            {
                if (attack < 0)
                {
                    cardAttackText.text = 0.ToString();
                }
                else
                {
                    cardAttackText.text = attack.ToString();
                }

                battleToken.UpdateBattleTokenTokenText(stat, attack);
                TextTools.AlterTextColor(attack, _creatureData.attack, cardAttackText);
            }

            break;

        case Constants.CardStats.Size:

            if (setStats)
            {
                size = value;
            }
            else
            {
                size += value;
            }

            if (size <= 0)
            {
                size = 0;
            }

            if (!waitForVFX)
            {
                cardSizeText.text = size.ToString();
                battleToken.UpdateBattleTokenTokenText(stat, size);
                TextTools.AlterTextColor(size, _creatureData.size, cardSizeText);
            }

            break;

        case Constants.CardStats.Health:
            value = CalcProtection(value);

            if (value < 0 && keywords.Contains(Constants.Keywords.ImmuneToGenerals) && source.primaryCardType == Constants.CardType.Player)
            {
                value = 0;
            }

            if (setStats)
            {
                health = value;
            }
            else
            {
                health += value;
            }

            if (value > 0 && health > maxHealth)
            {
                health = maxHealth;
            }

            if (value < 1)
            {
                Debug.Log(gameObject.name + " :: " + cardData.cardName + " has taken " + Mathf.Abs(value) + " point(s) of damage");
            }

            if (value < 0)
            {
                CheckDeath(source.photonView.viewID, false, waitForVFX);

                if (source.keywords.Contains(Keywords.Deathtouch) && health > 0)
                {
                    health = 0;
                    CheckDeath(source.photonView.viewID, true, waitForVFX);
                }
            }

            if (!waitForVFX)
            {
                cardHealthText.text = health.ToString();
                battleToken.UpdateBattleTokenTokenText(stat, health);
                TextTools.AlterTextColor(health, _creatureData.health, cardHealthText);
                ShowDamage(value);
            }

            break;

        case Constants.CardStats.MaxHealth:

            if (setStats)
            {
                maxHealth = value;
                health    = value;
            }
            else
            {
                maxHealth += value;
                health    += value;
            }

            if (value < 0)
            {
                CheckDeath(source.photonView.viewID, false, waitForVFX);
            }

            if (!waitForVFX)
            {
                cardHealthText.text = health.ToString();
                battleToken.UpdateBattleTokenTokenText(stat, health);
                TextTools.AlterTextColor(health, _creatureData.health, cardHealthText);
            }

            break;
        }


        base.AlterCardStats(stat, value, source, waitForVFX, sendEvent, setStats);

        if (waitForVFX)
        {
            SpecialAbility.StatAdjustment latest = new SpecialAbility.StatAdjustment(stat, value, false, false, null);
            lastStatAdjustment = latest;

            Grid.EventManager.RegisterListener(Constants.GameEvent.VFXLanded, OnVFXLanded);
        }
    }
예제 #6
0
    public override void AlterCardStats(Constants.CardStats stat, int value, CardVisual source, bool waitForVFX = true, bool sendEvent = true, bool setStats = false)
    {
        base.AlterCardStats(stat, value, source, waitForVFX, sendEvent, setStats);


        switch (stat)
        {
        case Constants.CardStats.SupportValue:

            if (setStats)
            {
                supportValue = value;
            }
            else
            {
                supportValue += value;
            }

            if (supportValue > _supportData.supportValue)
            {
                supportValue = _supportData.supportValue;
            }

            if (value < 0)
            {
                CheckDeath(source.photonView.viewID, false, waitForVFX);
            }

            if (!waitForVFX)
            {
                cardSupportValueText.text = supportValue.ToString();
                supportToken.UpdateSupportText(stat, supportValue);
                TextTools.AlterTextColor(supportValue, _supportData.supportValue, cardSupportValueText);
            }

            break;

        case Constants.CardStats.MaxSupport:

            supportValue += value;

            if (value < 0)
            {
                CheckDeath(source.photonView.viewID, false, waitForVFX);
            }

            if (!waitForVFX)
            {
                cardSupportValueText.text = supportValue.ToString();
                supportToken.UpdateSupportText(stat, supportValue);
                TextTools.AlterTextColor(supportValue, _supportData.supportValue, cardSupportValueText);
            }

            break;
        }

        if (waitForVFX)
        {
            SpecialAbility.StatAdjustment latest = new SpecialAbility.StatAdjustment(stat, value, false, false, null);
            lastStatAdjustment = latest;

            Grid.EventManager.RegisterListener(Constants.GameEvent.VFXLanded, OnVFXLanded);
        }
    }