public static bool SnapInheritedPointsOnClosestTimingPoints(Form form, Beatmap beatmap, double firstOffset, double lastOffset) { SearchUtils.GetObjectsInBetween(beatmap, firstOffset, lastOffset, out IList <TimingPoint> points); Dictionary <TimingPoint, double> newOffsets = new Dictionary <TimingPoint, double>(); bool isHighRangeDetectedAndVerified = false; foreach (TimingPoint point in points) { if (point.IsInherited) { TimingPoint closestPreviousPoint = SearchUtils.GetClosestTimingPoint(beatmap.TimingPoints, point.Offset); TimingPoint closestNextPoint = SearchUtils.GetClosestNextTimingPoint(beatmap.TimingPoints, point); double closestPreviousPointOffset = closestPreviousPoint != null ? closestPreviousPoint.Offset : 0; double closestNextPointOffset = closestNextPoint != null ? closestNextPoint.Offset : 0; double firstDifference = point.Offset - closestPreviousPointOffset; double secondDifference = closestNextPointOffset - point.Offset; if (!isHighRangeDetectedAndVerified && !VerifyUtils.verifyRangeAny(-400, 400, firstDifference, secondDifference)) { if (MessageBoxUtils.showQuestionYesNo("Inherited points with more than 400 milliseconds gap between closest timing points detected. This might result in inherited points getting completely losing their purpose.".AddLines(2) + "Are you sure you want to continue?") == DialogResult.Yes) { isHighRangeDetectedAndVerified = true; } else { return(false); } } double targetOffset; if (point.Offset - closestPreviousPointOffset < closestNextPointOffset - point.Offset) { targetOffset = closestPreviousPointOffset; } else { targetOffset = closestNextPointOffset; } newOffsets.Add(point, targetOffset); } } newOffsets.ForEach((key, value) => { key.Offset = value; }); newOffsets.Clear(); return(true); }
public static HitObject GetExactHitObject(IList <HitObject> hitObjects, double offset) { return(VerifyUtils.safeGetItemFromList(hitObjects, GetExactNoteIndex(hitObjects, offset))); }
public static TimingPoint GetExactInheritedPoint(IList <TimingPoint> points, double offset) { return(VerifyUtils.safeGetItemFromList(points, GetExactPointIndex(points, offset, true))); }