Doodle Post
No Comments
class Stat {
public float BaseValue;
public string Name;
public bool Capped;
public float Cap;
public List<StatMod> StatMods { get; private set; }
bool needsUpdate = false;
float cachedValue;
public Stat(string name, float basevalue = 0) {
Name = name;
BaseValue = basevalue;
Cap = BaseValue * 2;
StatMods = new List<StatMod>();
cachedValue = basevalue;
}
public Stat(float basevalue) : this("", basevalue) { }
public StatMod AddMod(StatMod mod) {
StatMods.Add(mod);
needsUpdate = true;
return mod;
}
public StatMod RemoveMod(StatMod mod) {
StatMods.Remove(mod);
needsUpdate = true;
return mod;
}
public void ClearMods() {
StatMods.Clear();
cachedValue = BaseValue;
}
public float FinalValue {
get {
if (needsUpdate) {
float v = BaseValue;
var m = 1;
foreach (var s in StatMods) {
v += s.Add;
}
foreach (var s in StatMods) {
v += BaseValue * s.Multiply;
}
cachedValue = v;
needsUpdate = false;
}
if (Capped && cachedValue > Cap) return Cap;
return cachedValue;
}
}
public static implicit operator float(Stat stat) {
return stat.FinalValue;
}
}
class StatMod {
public float Multiply = 1;
public float Add;
public StatMod(float add = 0, float multiply = 0) {
Multiply = multiply;
Add = add;
}
}