Skip to content

Commit 31cd7cd

Browse files
committed
Refactor IsHitObjectOnBeat to be understandable
1 parent a2f96ea commit 31cd7cd

File tree

1 file changed

+7
-9
lines changed

1 file changed

+7
-9
lines changed

osu.Game.Rulesets.Osu/Utils/OsuHitObjectGenerationUtils.cs

+7-9
Original file line numberDiff line numberDiff line change
@@ -195,19 +195,17 @@ private static Vector2 rotateVector(Vector2 vector, float rotation)
195195
/// <returns>true if hitObject is on a (down-)beat, false otherwise.</returns>
196196
public static bool IsHitObjectOnBeat(OsuBeatmap beatmap, OsuHitObject hitObject, bool downbeatsOnly = false)
197197
{
198-
var timingPoints = beatmap.ControlPointInfo.TimingPoints;
199-
var currentTimingPoint = timingPoints.LastOrDefault(p => p.Time <= hitObject.StartTime);
198+
var timingPoint = beatmap.ControlPointInfo.TimingPointAt(hitObject.StartTime);
200199

201-
if (currentTimingPoint == null)
202-
return false;
200+
double timeSinceTimingPoint = hitObject.StartTime - timingPoint.Time;
203201

204-
double timeSinceTimingPoint = hitObject.StartTime - currentTimingPoint.Time;
202+
double beatLength = timingPoint.BeatLength;
205203

206-
double length = downbeatsOnly
207-
? currentTimingPoint.BeatLength * currentTimingPoint.TimeSignature.Numerator
208-
: currentTimingPoint.BeatLength;
204+
if (downbeatsOnly)
205+
beatLength *= timingPoint.TimeSignature.Numerator;
209206

210-
return (timeSinceTimingPoint + 1) % length < 2;
207+
// Ensure within 1ms of expected location.
208+
return Math.Abs(timeSinceTimingPoint + 1) % beatLength < 2;
211209
}
212210

213211
/// <summary>

0 commit comments

Comments
 (0)