Skip to content

Commit e2f17b2

Browse files
committed
Porting om2bms (halfway done)
1 parent 31e9c34 commit e2f17b2

File tree

2 files changed

+440
-22
lines changed

2 files changed

+440
-22
lines changed

Server/OsuManiaLoader/DataStructures.cs

Lines changed: 208 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public abstract class OsuObj
5555

5656
public class OsuTimingPoint : OsuObj
5757
{
58-
public float msPerBeat;
58+
public int msPerBeat;
5959
public int meter;
6060
public int sampleSet;
6161
public int sampleIndex;
@@ -165,6 +165,213 @@ public override int GetTypeValue()
165165
}
166166
}
167167

168+
public class Fraction
169+
{
170+
// https://gist.github.com/fidelsoto/b4c0f14b800c58e137ad5757f35cacd6
171+
public float numerator;
172+
public float denominator;
173+
174+
public Fraction(float numerator, float denominator)
175+
{
176+
this.numerator = numerator;
177+
this.denominator = denominator;
178+
}
179+
180+
public Fraction(Fraction fraction)
181+
{
182+
numerator = fraction.numerator;
183+
denominator = fraction.denominator;
184+
}
185+
186+
public override bool Equals(object obj)
187+
{
188+
if (obj == null) return false;
189+
190+
Fraction other = obj as Fraction;
191+
return (numerator == other.numerator && denominator == other.denominator);
192+
}
193+
194+
public static bool operator ==(Fraction f1, Fraction f2)
195+
{
196+
return f1.Equals(f2);
197+
}
198+
199+
public static bool operator ==(Fraction f1, int f2)
200+
{
201+
return f1.Equals(new Fraction(f2, 1));
202+
}
203+
204+
public static bool operator !=(Fraction f1, Fraction f2)
205+
{
206+
return !(f1 == f2);
207+
}
208+
209+
public static bool operator !=(Fraction f1, int f2)
210+
{
211+
return !(f1 == f2);
212+
}
213+
214+
public static Fraction operator *(Fraction f1, float f2)
215+
{
216+
var f3 = new Fraction(f1);
217+
f3.numerator *= f2;
218+
return f3;
219+
}
220+
221+
public static Fraction operator /(Fraction f1, float f2)
222+
{
223+
var f3 = new Fraction(f1);
224+
f3.numerator /= f2;
225+
f3.denominator /= f2;
226+
return f3;
227+
}
228+
229+
public static Fraction operator +(Fraction f1, float f2)
230+
{
231+
var f3 = new Fraction(f1.numerator, f1.denominator);
232+
f3.numerator += f2 * f3.denominator;
233+
return f3;
234+
}
235+
236+
public static Fraction operator -(Fraction f1, float f2)
237+
{
238+
var f3 = new Fraction(f1.numerator, f1.denominator);
239+
f3.numerator -= f2 * f3.denominator;
240+
return f3;
241+
}
242+
243+
public static float operator +(float f1, Fraction f2)
244+
{
245+
return f1 + f2.ToFloat();
246+
}
247+
248+
public static float operator -(float f1, Fraction f2)
249+
{
250+
return f1 - f2.ToFloat();
251+
}
252+
253+
public static float operator +(int f1, Fraction f2)
254+
{
255+
return f1 + f2.ToFloat();
256+
}
257+
258+
public static float operator -(int f1, Fraction f2)
259+
{
260+
return f1 - f2.ToFloat();
261+
}
262+
263+
public static Fraction operator +(Fraction f1, Fraction f2)
264+
{
265+
var a = f1.denominator > f2.denominator ? f1 : f2;
266+
var b = f1.denominator < f2.denominator ? f1 : f2;
267+
var difference = a.denominator / b.denominator;
268+
269+
return new Fraction(a.numerator + (b.numerator * difference), a.denominator);
270+
}
271+
272+
public static Fraction operator -(Fraction f1, Fraction f2)
273+
{
274+
var a = f1.denominator > f2.denominator ? f1 : f2;
275+
var b = f1.denominator < f2.denominator ? f1 : f2;
276+
var difference = a.denominator / b.denominator;
277+
278+
return new Fraction(a.numerator - (b.numerator * difference), a.denominator);
279+
}
280+
281+
public static bool operator >(Fraction f1, Fraction f2)
282+
{
283+
return (f1.numerator / f1.denominator) > (f2.numerator / f2.denominator);
284+
}
285+
286+
public static bool operator <(Fraction f1, Fraction f2)
287+
{
288+
return (f1.numerator / f1.denominator) < (f2.numerator / f2.denominator);
289+
}
290+
291+
public static bool operator <=(Fraction f1, Fraction f2)
292+
{
293+
return (f1.numerator / f1.denominator) <= (f2.numerator / f2.denominator);
294+
}
295+
296+
public static bool operator >=(Fraction f1, Fraction f2)
297+
{
298+
return (f1.numerator / f1.denominator) >= (f2.numerator / f2.denominator);
299+
}
300+
301+
public static bool operator >(Fraction f1, float f2)
302+
{
303+
return (f1.numerator / f1.denominator) > f2;
304+
}
305+
306+
public static bool operator <(Fraction f1, float f2)
307+
{
308+
return (f1.numerator / f1.denominator) < f2;
309+
}
310+
311+
public static bool operator <=(Fraction f1, float f2)
312+
{
313+
return (f1.numerator / f1.denominator) <= f2;
314+
}
315+
316+
public static bool operator >=(Fraction f1, float f2)
317+
{
318+
return (f1.numerator / f1.denominator) >= f2;
319+
}
320+
321+
public static bool operator >(Fraction f1, int f2)
322+
{
323+
return (f1.numerator / f1.denominator) > f2;
324+
}
325+
326+
public static bool operator <(Fraction f1, int f2)
327+
{
328+
return (f1.numerator / f1.denominator) < f2;
329+
}
330+
331+
public static bool operator <=(Fraction f1, int f2)
332+
{
333+
return (f1.numerator / f1.denominator) <= f2;
334+
}
335+
336+
public static bool operator >=(Fraction f1, int f2)
337+
{
338+
return (f1.numerator / f1.denominator) >= f2;
339+
}
340+
341+
public override int GetHashCode()
342+
{
343+
// i dunno, some weird stuff, its not like we care
344+
return (int)Math.Floor((numerator * denominator) + (numerator - denominator));
345+
}
346+
347+
public override string ToString()
348+
{
349+
return numerator + "/" + denominator;
350+
}
351+
352+
public float ToFloat()
353+
{
354+
return numerator / denominator;
355+
}
356+
357+
//Helper function, simplifies a fraction.
358+
public Fraction Simplify()
359+
{
360+
for (float divideBy = denominator; divideBy > 0; divideBy--)
361+
{
362+
bool divisible = ((int)(numerator / divideBy) * divideBy == numerator) &&
363+
((int)(denominator / divideBy) * divideBy == denominator);
364+
365+
if (divisible)
366+
{
367+
numerator /= divideBy;
368+
denominator /= divideBy;
369+
}
370+
}
371+
return this;
372+
}
373+
}
374+
168375
public class BMSMeasure
169376
{
170377
public string measureNumber;

0 commit comments

Comments
 (0)