public SpecialAbility GetAdjustmentSource(StatAdjustment adj) { for (int i = 0; i < adjustments.Count; i++) { if (adjustments[i].uniqueID == adj.uniqueID) { return(parentAbility); } } return(null); }
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); }
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); } }
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); } } } }
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); } }
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); } }