public void ApplyArmorAttribute(Attribute attribute, EnhancementOperation priority, int value) { Assert.IsTrue(IsArmorAttribute(attribute)); if (attribute == Attribute.Armor) { armor.AddBoost(priority, value, StatBooster.Priority.First); } }
void AggregateEnhancements() { foreach (AttributeEnhancement enhancement in equipContext.Enhancements) { Attribute attribute = enhancement.Attribute; EnhancementOperation operation = enhancement.Operation; int value = enhancement.Magnitude; statBoosters[attribute].AddBoost(operation, value, StatBooster.Priority.First); } }
/// <summary> /// Add an enhancement to this statbooster. Priority must correspond to one of the valid stat boosts. /// </summary> public void AddBoost(EnhancementOperation operation, int magnitude, Priority priority) { bool first = priority == Priority.First; bool second = priority == Priority.Second; bool final = priority == Priority.Final; bool add = operation == EnhancementOperation.Additive; bool mult = operation == EnhancementOperation.Multiplicative; bool overridden = operation == EnhancementOperation.Override; Assert.IsTrue(first || second || final); Assert.IsTrue(add || mult || overridden); if (first && add) { firstAdditive += magnitude; } else if (first && mult) { firstMultiplicative += magnitude; } else if (second && add) { secondAdditive += magnitude; } else if (second && mult) { secondMultiplicative += magnitude; } else if (final && add) { finalAdditive += magnitude; } else if (final && mult) { finalMultiplicative += magnitude; } else if (overridden) { overrideValue = isOverrideSet ? Mathf.Min(overrideValue, magnitude) : magnitude; isOverrideSet = true; } else { // In the editor, the assertion above will fail. At run-time, the unidentified boost is skipped. } }
public void ApplyWeaponAttribute(Attribute attribute, EnhancementOperation operation, int value) { Assert.IsTrue(IsWeaponAttribute(attribute)); if (attribute == Attribute.MinDamage) { AddBoost(minBooster, operation, value); } else if (attribute == Attribute.MaxDamage) { AddBoost(maxBooster, operation, value); } else if (attribute == Attribute.WeaponDamage) { AddBoost(damageBooster, operation, value); } else if (attribute == Attribute.AttackSpeed) { AddBoost(speedBooster, operation, value); } else if (attribute == Attribute.CritMultiplier) { AddBoost(critBooster, operation, value); } }
void AddBoost(StatBooster booster, EnhancementOperation operation, int value) { // weapon enhancements are all first-priority booster.AddBoost(operation, value, StatBooster.Priority.First); }
public AttributeEnhancement(Attribute attribute, EnhancementOperation priority, int magnitude) { this.attribute = attribute; this.operation = priority; this.magnitude = magnitude; }