public override float GetSnappedDistanceFromDistance(double referenceTime, float distance) { double actualDuration = referenceTime + DistanceToDuration(referenceTime, distance); double snappedEndTime = BeatSnapProvider.SnapTime(actualDuration, referenceTime); double beatLength = BeatSnapProvider.GetBeatLengthAtTime(referenceTime); // we don't want to exceed the actual duration and snap to a point in the future. // as we are snapping to beat length via SnapTime (which will round-to-nearest), check for snapping in the forward direction and reverse it. if (snappedEndTime > actualDuration + 1) { snappedEndTime -= beatLength; } return(DurationToDistance(referenceTime, snappedEndTime - referenceTime)); }
public override SnapResult SnapScreenSpacePositionToValidTime(Vector2 screenSpacePosition) { var playfield = PlayfieldAtScreenSpacePosition(screenSpacePosition); double?targetTime = null; if (playfield is ScrollingPlayfield scrollingPlayfield) { targetTime = scrollingPlayfield.TimeAtScreenSpacePosition(screenSpacePosition); // apply beat snapping targetTime = BeatSnapProvider.SnapTime(targetTime.Value); // convert back to screen space screenSpacePosition = scrollingPlayfield.ScreenSpacePositionAtTime(targetTime.Value); } return(new SnapResult(screenSpacePosition, targetTime, playfield)); }
public override SnapResult SnapScreenSpacePositionToValidTime(Vector2 screenSpacePosition) { var column = Playfield.GetColumnByPosition(screenSpacePosition); if (column == null) { return(new SnapResult(screenSpacePosition, null)); } double targetTime = column.TimeAtScreenSpacePosition(screenSpacePosition); // apply beat snapping targetTime = BeatSnapProvider.SnapTime(targetTime); // convert back to screen space screenSpacePosition = column.ScreenSpacePositionAtTime(targetTime); return(new ManiaSnapResult(screenSpacePosition, targetTime, column)); }
public virtual float FindSnappedDistance(HitObject referenceObject, float distance) { double startTime = referenceObject.StartTime; double actualDuration = startTime + DistanceToDuration(referenceObject, distance); double snappedEndTime = BeatSnapProvider.SnapTime(actualDuration, startTime); double beatLength = BeatSnapProvider.GetBeatLengthAtTime(startTime); // we don't want to exceed the actual duration and snap to a point in the future. // as we are snapping to beat length via SnapTime (which will round-to-nearest), check for snapping in the forward direction and reverse it. if (snappedEndTime > actualDuration + 1) { snappedEndTime -= beatLength; } return(DurationToDistance(referenceObject, snappedEndTime - startTime)); }
public override SnapResult FindSnappedPositionAndTime(Vector2 screenSpacePosition, SnapType snapType = SnapType.All) { var playfield = PlayfieldAtScreenSpacePosition(screenSpacePosition); double?targetTime = null; if (snapType.HasFlagFast(SnapType.Grids)) { if (playfield is ScrollingPlayfield scrollingPlayfield) { targetTime = scrollingPlayfield.TimeAtScreenSpacePosition(screenSpacePosition); // apply beat snapping targetTime = BeatSnapProvider.SnapTime(targetTime.Value); // convert back to screen space screenSpacePosition = scrollingPlayfield.ScreenSpacePositionAtTime(targetTime.Value); } } return(new SnapResult(screenSpacePosition, targetTime, playfield)); }
public override double GetSnappedDurationFromDistance(HitObject referenceObject, float distance) => BeatSnapProvider.SnapTime(referenceObject.StartTime + DistanceToDuration(referenceObject, distance), referenceObject.StartTime) - referenceObject.StartTime;
public override double DistanceToDuration(HitObject referenceObject, float distance) { double beatLength = BeatSnapProvider.GetBeatLengthAtTime(referenceObject.StartTime); return(distance / GetBeatSnapDistanceAt(referenceObject) * beatLength); }
public override float DurationToDistance(HitObject referenceObject, double duration) { double beatLength = BeatSnapProvider.GetBeatLengthAtTime(referenceObject.StartTime); return((float)(duration / beatLength * GetBeatSnapDistanceAt(referenceObject))); }
public override double GetSnappedDurationFromDistance(double referenceTime, float distance) => BeatSnapProvider.SnapTime(referenceTime + DistanceToDuration(referenceTime, distance), referenceTime) - referenceTime;
public override double DistanceToDuration(double referenceTime, float distance) { double beatLength = BeatSnapProvider.GetBeatLengthAtTime(referenceTime); return(distance / GetBeatSnapDistanceAt(referenceTime) * beatLength); }
public override float DurationToDistance(double referenceTime, double duration) { double beatLength = BeatSnapProvider.GetBeatLengthAtTime(referenceTime); return((float)(duration / beatLength * GetBeatSnapDistanceAt(referenceTime))); }
public override float GetSnappedDistanceFromDistance(double referenceTime, float distance) { var snappedEndTime = BeatSnapProvider.SnapTime(referenceTime + DistanceToDuration(referenceTime, distance), referenceTime); return(DurationToDistance(referenceTime, snappedEndTime - referenceTime)); }
public virtual double FindSnappedDuration(HitObject referenceObject, float distance) => BeatSnapProvider.SnapTime(referenceObject.StartTime + DistanceToDuration(referenceObject, distance), referenceObject.StartTime) - referenceObject.StartTime;