public bool RemoveBuff(ActionUnit unit) { if (Buff.ActualStat == null) { return(false); } Debug.Log("Remove Buff " + unit.Group + "/" + Buff.Effect + "/" + Buff.ActualStat + "/" + Buff.Percent); float amount = 0; ActionUnitData baseStat = (ActionUnitData)unit.tileUnitData; switch (Buff.ActualStat) { case StatAffect.Health: amount = (Buff.Effect == EffectType.Increase ? 1 : -1) * baseStat.baseHealth * Buff.Percent / 100; unit.OriginStatus.baseHealth -= amount; if (Buff.Effect == EffectType.Increase) { if (unit.CurrentStatus.baseHealth > 0) { unit.CurrentStatus.baseHealth = ((unit.CurrentStatus.baseHealth - amount) <= 0) ? 1 : (unit.CurrentStatus.baseHealth - amount); } } else { if (unit.CurrentStatus.baseHealth < unit.OriginStatus.baseHealth) { unit.CurrentStatus.baseHealth = ((unit.CurrentStatus.baseHealth - amount) > unit.OriginStatus.baseHealth) ? unit.OriginStatus.baseHealth : (unit.CurrentStatus.baseHealth - amount); } } break; case StatAffect.Damage: amount = (Buff.Effect == EffectType.Increase ? 1 : -1) * baseStat.baseAttack * Buff.Percent / 100; unit.OriginStatus.baseAttack -= amount; unit.CurrentStatus.baseAttack -= amount; break; case StatAffect.AtkRate: amount = (Buff.Effect == EffectType.Increase ? -1 : 1) * baseStat.baseAttackRate * Buff.Percent / 100; unit.OriginStatus.baseAttackRate -= amount; unit.CurrentStatus.baseAttackRate -= amount; break; default: break; } AffectUnit.Remove(unit); return(true); }
public bool ApplyBuff(ActionUnit unit) { //this method usually cann by Action Unit to self buff // if (AffectUnit.Count > 0) return false; Buff.ActualStat = Buff.Stat; if (Buff.Stat == StatAffect.Random) { Buff.ActualStat = RandomStatAffect(); } // if (Buff.Target != TargetType.Custom) // { // if (Game.Instance.RoundManager.Round.RoundNumber < 5) // { // Buff.Percent = 20 - 2 * Game.Instance.RoundManager.Round.RoundNumber; // } // else // { // Buff.Percent = 2 * (Game.Instance.RoundManager.Round.RoundNumber - 5); // } // } Debug.Log("Apply Buff " + unit.Group + "/" + Buff.Effect + "/" + Buff.ActualStat + "/" + Buff.Percent); float amount = 0; ActionUnitData baseStat = (ActionUnitData)unit.tileUnitData; switch (Buff.ActualStat) { case StatAffect.Health: amount = (Buff.Effect == EffectType.Increase ? 1 : -1) * baseStat.baseHealth * Buff.Percent / 100; unit.OriginStatus.baseHealth += amount; if (Buff.Effect == EffectType.Increase) { if (unit.CurrentStatus.baseHealth < unit.OriginStatus.baseHealth) { unit.CurrentStatus.baseHealth = ((unit.CurrentStatus.baseHealth + amount) > unit.OriginStatus.baseHealth) ? unit.OriginStatus.baseHealth : (unit.CurrentStatus.baseHealth + amount); } } else { if (unit.CurrentStatus.baseHealth > 0) { unit.CurrentStatus.baseHealth = ((unit.CurrentStatus.baseHealth + amount) <= 0) ? 1 : (unit.CurrentStatus.baseHealth + amount); } } break; case StatAffect.Damage: amount = (Buff.Effect == EffectType.Increase ? 1 : -1) * baseStat.baseAttack * Buff.Percent / 100; unit.OriginStatus.baseAttack += amount; unit.CurrentStatus.baseAttack += amount; break; case StatAffect.AtkRate: amount = (Buff.Effect == EffectType.Increase ? -1 : 1) * baseStat.baseAttackRate * Buff.Percent / 100; unit.OriginStatus.baseAttackRate += amount; unit.CurrentStatus.baseAttackRate += amount; break; default: break; } AffectUnit.Add(unit); return(true); }