From 5840a30eb7fcf7da02bb8b3a0b29d82110f8c857 Mon Sep 17 00:00:00 2001 From: tcr235 Date: Wed, 9 Apr 2025 00:47:59 -0300 Subject: [PATCH 1/2] refactor: comparison operators for IStat interface --- src/Stats.cs | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/Stats.cs b/src/Stats.cs index ced6d5a..7fa62a1 100644 --- a/src/Stats.cs +++ b/src/Stats.cs @@ -44,17 +44,23 @@ public interface IStat /// T CurrentValue { get; } - public static bool operator >(IStat lhs, IStat rhs) => - lhs.CurrentValue > rhs.CurrentValue; + public static bool operator >(IStat lhs, T value) => + lhs.CurrentValue > value; - public static bool operator <(IStat lhs, IStat rhs) => - lhs.CurrentValue < rhs.CurrentValue; + public static bool operator <(IStat lhs, T value) => + lhs.CurrentValue < value; - public static bool operator >=(IStat lhs, IStat rhs) => - lhs.CurrentValue >= rhs.CurrentValue; + public static bool operator >=(IStat lhs, T value) => + lhs.CurrentValue >= value; - public static bool operator <=(IStat lhs, IStat rhs) => - lhs.CurrentValue <= rhs.CurrentValue; + public static bool operator <=(IStat lhs, T value) => + lhs.CurrentValue <= value; + + public static bool operator ==(IStat lhs, T value) => + lhs.CurrentValue == value; + + public static bool operator !=(IStat lhs, T value) => + lhs.CurrentValue != value; public static T operator *(T lhs, IStat rhs) => lhs * rhs.CurrentValue; From 53fe07d77ed35131b31abc5d5528e8aeeb0a7589 Mon Sep 17 00:00:00 2001 From: tcr235 Date: Tue, 19 Aug 2025 01:41:09 -0300 Subject: [PATCH 2/2] feat: add comparison operators and equality methods to ResourceStat class --- src/Stats.cs | 81 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 24 deletions(-) diff --git a/src/Stats.cs b/src/Stats.cs index 7fa62a1..a58e126 100644 --- a/src/Stats.cs +++ b/src/Stats.cs @@ -44,30 +44,6 @@ public interface IStat /// T CurrentValue { get; } - public static bool operator >(IStat lhs, T value) => - lhs.CurrentValue > value; - - public static bool operator <(IStat lhs, T value) => - lhs.CurrentValue < value; - - public static bool operator >=(IStat lhs, T value) => - lhs.CurrentValue >= value; - - public static bool operator <=(IStat lhs, T value) => - lhs.CurrentValue <= value; - - public static bool operator ==(IStat lhs, T value) => - lhs.CurrentValue == value; - - public static bool operator !=(IStat lhs, T value) => - lhs.CurrentValue != value; - - 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; } @@ -242,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; @@ -356,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; }