Skip to content

Commit 4992f6e

Browse files
committed
ValueRange and ValueRangeInt improvements/ clean up.
1 parent afe19da commit 4992f6e

File tree

2 files changed

+258
-4
lines changed

2 files changed

+258
-4
lines changed

ShapeEngine/Core/ValueRange.cs

Lines changed: 128 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ public readonly struct ValueRange
99
public readonly float Min;
1010
public readonly float Max;
1111

12-
public ValueRange() { Min = 0.0f; Max = 1.0f; }
12+
#region Constructors
1313

14+
public ValueRange() { Min = 0.0f; Max = 1.0f; }
1415
public ValueRange(Vector2 range)
1516
{
1617
float min = range.X;
@@ -39,6 +40,19 @@ public ValueRange(float min, float max)
3940
this.Max = max;
4041
}
4142
}
43+
public ValueRange(int min, int max)
44+
{
45+
if (min > max)
46+
{
47+
this.Max = min;
48+
this.Min = max;
49+
}
50+
else
51+
{
52+
this.Min = min;
53+
this.Max = max;
54+
}
55+
}
4256
public ValueRange(float max)
4357
{
4458
if (max < 0.0f)
@@ -52,8 +66,10 @@ public ValueRange(float max)
5266
this.Max = max;
5367
}
5468
}
55-
69+
#endregion
5670

71+
#region Public Functions
72+
public ValueRangeInt ToValueRangeInt() => new ValueRangeInt(Min, Max);
5773
public Vector2 ToVector2() => new(Min, Max);
5874
public float Rand() { return Rng.Instance.RandF(Min, Max); }
5975
public float Lerp(float f) { return ShapeMath.LerpFloat(Min, Max, f); }
@@ -71,4 +87,114 @@ public static bool OverlapValueRange(float aMin, float aMax, float bMin, float b
7187
var bRange = new ValueRange(bMin, bMax);
7288
return aRange.OverlapValueRange(bRange);
7389
}
90+
91+
public ValueRange SetMin(float min) => new(min, Max);
92+
public ValueRange SetMax(float max) => new(Min, max);
93+
public ValueRange Set(float min, float max) => new(min, max);
94+
95+
#endregion
96+
97+
#region Operators
98+
public static ValueRange operator +(ValueRange left, ValueRange right)
99+
{
100+
return new(
101+
left.Min + right.Min,
102+
left.Max + right.Max);
103+
}
104+
public static ValueRange operator -(ValueRange left, ValueRange right)
105+
{
106+
return new(
107+
left.Min - right.Min,
108+
left.Max - right.Max);
109+
}
110+
public static ValueRange operator *(ValueRange left, ValueRange right)
111+
{
112+
return new(
113+
left.Min * right.Min,
114+
left.Max * right.Max);
115+
}
116+
public static ValueRange operator /(ValueRange left, ValueRange right)
117+
{
118+
return new(
119+
right.Min == 0 ? 0 : left.Min / right.Min,
120+
right.Max == 0 ? 0 :left.Max / right.Max);
121+
}
122+
123+
public static ValueRange operator +(ValueRange left, ValueRangeInt right)
124+
{
125+
return new(
126+
left.Min + right.Min,
127+
left.Max + right.Max);
128+
}
129+
public static ValueRange operator -(ValueRange left, ValueRangeInt right)
130+
{
131+
return new(
132+
left.Min - right.Min,
133+
left.Max - right.Max);
134+
}
135+
public static ValueRange operator *(ValueRange left, ValueRangeInt right)
136+
{
137+
return new(
138+
left.Min * right.Min,
139+
left.Max * right.Max);
140+
}
141+
public static ValueRange operator /(ValueRange left, ValueRangeInt right)
142+
{
143+
return new(
144+
right.Min == 0 ? 0 : left.Min / right.Min,
145+
right.Max == 0 ? 0 :left.Max / right.Max);
146+
}
147+
148+
public static ValueRange operator +(ValueRange left, float right)
149+
{
150+
return new(
151+
left.Min + right,
152+
left.Max + right);
153+
}
154+
public static ValueRange operator -(ValueRange left, float right)
155+
{
156+
return new(
157+
left.Min - right,
158+
left.Max - right);
159+
}
160+
public static ValueRange operator *(ValueRange left, float right)
161+
{
162+
return new(
163+
left.Min * right,
164+
left.Max * right);
165+
}
166+
public static ValueRange operator /(ValueRange left, float right)
167+
{
168+
if (right == 0) return new(0, 0);
169+
return new(
170+
left.Min / right,
171+
left.Max / right);
172+
}
173+
174+
public static ValueRange operator +(ValueRange left, int right)
175+
{
176+
return new(
177+
left.Min + right,
178+
left.Max + right);
179+
}
180+
public static ValueRange operator -(ValueRange left, int right)
181+
{
182+
return new(
183+
left.Min - right,
184+
left.Max - right);
185+
}
186+
public static ValueRange operator *(ValueRange left, int right)
187+
{
188+
return new(
189+
left.Min * right,
190+
left.Max * right);
191+
}
192+
public static ValueRange operator /(ValueRange left, int right)
193+
{
194+
if (right == 0) return new(0, 0);
195+
return new(
196+
left.Min / right,
197+
left.Max / right);
198+
}
199+
#endregion
74200
}

ShapeEngine/Core/ValueRangeInt.cs

Lines changed: 130 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ public readonly struct ValueRangeInt
99
public readonly int Min;
1010
public readonly int Max;
1111

12+
#region Constructors
13+
1214
public ValueRangeInt() { Min = 0; Max = 1; }
13-
1415
public ValueRangeInt(Vector2 range)
1516
{
1617
var min = (int)range.X;
@@ -39,6 +40,19 @@ public ValueRangeInt(int min, int max)
3940
Max = max;
4041
}
4142
}
43+
public ValueRangeInt(float min, float max)
44+
{
45+
if (min > max)
46+
{
47+
Max = (int)min;
48+
Min = (int)max;
49+
}
50+
else
51+
{
52+
Min = (int)min;
53+
Max = (int)max;
54+
}
55+
}
4256
public ValueRangeInt(int max)
4357
{
4458
if (max < 0.0f)
@@ -53,7 +67,11 @@ public ValueRangeInt(int max)
5367
}
5468
}
5569

56-
70+
#endregion
71+
72+
#region Public Functions
73+
74+
public ValueRange ToValueRange() => new ValueRange(Min, Max);
5775
public Vector2 ToVector2() => new(Min, Max);
5876
public int Rand() { return Rng.Instance.RandI(Min, Max); }
5977
public int Lerp(float f) { return ShapeMath.LerpInt(Min, Max, f); }
@@ -65,4 +83,114 @@ public ValueRangeInt(int max)
6583
public int Clamp(int value) => ShapeMath.Clamp(value, Min, Max);
6684

6785
public bool OverlapValueRange(ValueRangeInt other) => other.Min <= Max && Min <= other.Max;
86+
87+
public ValueRangeInt SetMin(int min) => new(min, Max);
88+
public ValueRangeInt SetMax(int max) => new(Min, max);
89+
public ValueRangeInt Set(int min, int max) => new(min, max);
90+
#endregion
91+
92+
#region Operators
93+
94+
public static ValueRangeInt operator +(ValueRangeInt left, ValueRangeInt right)
95+
{
96+
return new(
97+
left.Min + right.Min,
98+
left.Max + right.Max);
99+
}
100+
public static ValueRangeInt operator -(ValueRangeInt left, ValueRangeInt right)
101+
{
102+
return new(
103+
left.Min - right.Min,
104+
left.Max - right.Max);
105+
}
106+
public static ValueRangeInt operator *(ValueRangeInt left, ValueRangeInt right)
107+
{
108+
return new(
109+
left.Min * right.Min,
110+
left.Max * right.Max);
111+
}
112+
public static ValueRangeInt operator /(ValueRangeInt left, ValueRangeInt right)
113+
{
114+
return new(
115+
right.Min == 0 ? 0 : left.Min / right.Min,
116+
right.Max == 0 ? 0 :left.Max / right.Max);
117+
}
118+
119+
public static ValueRangeInt operator +(ValueRangeInt left, ValueRange right)
120+
{
121+
return new(
122+
left.Min + right.Min,
123+
left.Max + right.Max);
124+
}
125+
public static ValueRangeInt operator -(ValueRangeInt left, ValueRange right)
126+
{
127+
return new(
128+
left.Min - right.Min,
129+
left.Max - right.Max);
130+
}
131+
public static ValueRangeInt operator *(ValueRangeInt left, ValueRange right)
132+
{
133+
return new(
134+
left.Min * right.Min,
135+
left.Max * right.Max);
136+
}
137+
public static ValueRangeInt operator /(ValueRangeInt left, ValueRange right)
138+
{
139+
return new(
140+
right.Min == 0 ? 0 : left.Min / right.Min,
141+
right.Max == 0 ? 0 :left.Max / right.Max);
142+
}
143+
144+
public static ValueRangeInt operator +(ValueRangeInt left, float right)
145+
{
146+
return new(
147+
left.Min + (int)right,
148+
left.Max + (int)right);
149+
}
150+
public static ValueRangeInt operator -(ValueRangeInt left, float right)
151+
{
152+
return new(
153+
left.Min - (int)right,
154+
left.Max - (int)right);
155+
}
156+
public static ValueRangeInt operator *(ValueRangeInt left, float right)
157+
{
158+
return new(
159+
(int)(left.Min * right),
160+
(int)(left.Max * right));
161+
}
162+
public static ValueRangeInt operator /(ValueRangeInt left, float right)
163+
{
164+
if (right == 0) return new(0, 0);
165+
return new(
166+
(int)(left.Min / right),
167+
(int)(left.Max / right));
168+
}
169+
170+
public static ValueRangeInt operator +(ValueRangeInt left, int right)
171+
{
172+
return new(
173+
left.Min + right,
174+
left.Max + right);
175+
}
176+
public static ValueRangeInt operator -(ValueRangeInt left, int right)
177+
{
178+
return new(
179+
left.Min - right,
180+
left.Max - right);
181+
}
182+
public static ValueRangeInt operator *(ValueRangeInt left, int right)
183+
{
184+
return new(
185+
left.Min * right,
186+
left.Max * right);
187+
}
188+
public static ValueRangeInt operator /(ValueRangeInt left, int right)
189+
{
190+
if (right == 0) return new(0, 0);
191+
return new(
192+
left.Min / right,
193+
left.Max / right);
194+
}
195+
#endregion
68196
}

0 commit comments

Comments
 (0)