diff --git a/src/Stats.cs b/src/Stats.cs index ced6d5a..a58e126 100644 --- a/src/Stats.cs +++ b/src/Stats.cs @@ -44,24 +44,6 @@ public interface IStat /// T CurrentValue { get; } - public static bool operator >(IStat lhs, IStat rhs) => - lhs.CurrentValue > rhs.CurrentValue; - - public static bool operator <(IStat lhs, IStat rhs) => - lhs.CurrentValue < rhs.CurrentValue; - - public static bool operator >=(IStat lhs, IStat rhs) => - lhs.CurrentValue >= rhs.CurrentValue; - - public static bool operator <=(IStat lhs, IStat rhs) => - lhs.CurrentValue <= rhs.CurrentValue; - - public static T operator *(T lhs, IStat rhs) => - lhs * rhs.CurrentValue; - - public static T operator *(IStat lhs, T rhs) => - lhs.CurrentValue * lhs; - event StatValueChanged OnStatChanged; } @@ -236,6 +218,62 @@ public interface IStatModifier : IStatModifier public class ResourceStat : IResourceStat where T : INumber, IMinMaxValue { + public static bool operator >(ResourceStat lhs, T value) => + lhs.CurrentValue > value; + + public static bool operator <(ResourceStat lhs, T value) => + lhs.CurrentValue < value; + + public static bool operator >=(ResourceStat lhs, T value) => + lhs.CurrentValue >= value; + + public static bool operator <=(ResourceStat lhs, T value) => + lhs.CurrentValue <= value; + + public static bool operator ==(ResourceStat lhs, T value) => + lhs.CurrentValue == value; + + public static bool operator !=(ResourceStat lhs, T value) => + lhs.CurrentValue != value; + + public static T operator *(T lhs, ResourceStat rhs) => + lhs * rhs.CurrentValue; + + public static T operator *(ResourceStat lhs, T rhs) => + lhs.CurrentValue * rhs; + + public static bool operator >(ResourceStat lhs, ResourceStat rhs) => + lhs.CurrentValue > rhs.CurrentValue; + + public static bool operator <(ResourceStat lhs, ResourceStat rhs) => + lhs.CurrentValue < rhs.CurrentValue; + + public static bool operator >=(ResourceStat lhs, ResourceStat rhs) => + lhs.CurrentValue >= rhs.CurrentValue; + + public static bool operator <=(ResourceStat lhs, ResourceStat rhs) => + lhs.CurrentValue <= rhs.CurrentValue; + + public static bool operator ==(ResourceStat lhs, ResourceStat rhs) => + lhs.CurrentValue == rhs.CurrentValue; + + public static bool operator !=(ResourceStat lhs, ResourceStat rhs) => + lhs.CurrentValue != rhs.CurrentValue; + + public override bool Equals(object? obj) + { + if (obj is ResourceStat other) + { + return CurrentValue == other.CurrentValue; + } + return false; + } + + public override int GetHashCode() + { + return HashCode.Combine(CurrentValue, Min, Max); + } + public T Max { get; set; } = T.MaxValue; private T _currentValue; @@ -350,6 +388,7 @@ public ModifiableStat(T baseValue) /// The current value for the stat. public ModifiableStat(T baseValue, T currentValue) { + _currentValue = currentValue; BaseValue = baseValue; CurrentValue = currentValue; }