@@ -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