Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
 public override double GetSnappedDurationFromDistance(HitObject referenceObject, float distance)
 => BeatSnapProvider.SnapTime(referenceObject.StartTime + DistanceToDuration(referenceObject, distance), referenceObject.StartTime) - referenceObject.StartTime;
Esempio n. 7
0
        public override double DistanceToDuration(HitObject referenceObject, float distance)
        {
            double beatLength = BeatSnapProvider.GetBeatLengthAtTime(referenceObject.StartTime);

            return(distance / GetBeatSnapDistanceAt(referenceObject) * beatLength);
        }
Esempio n. 8
0
        public override float DurationToDistance(HitObject referenceObject, double duration)
        {
            double beatLength = BeatSnapProvider.GetBeatLengthAtTime(referenceObject.StartTime);

            return((float)(duration / beatLength * GetBeatSnapDistanceAt(referenceObject)));
        }
Esempio n. 9
0
 public override double GetSnappedDurationFromDistance(double referenceTime, float distance)
 => BeatSnapProvider.SnapTime(referenceTime + DistanceToDuration(referenceTime, distance), referenceTime) - referenceTime;
Esempio n. 10
0
        public override double DistanceToDuration(double referenceTime, float distance)
        {
            double beatLength = BeatSnapProvider.GetBeatLengthAtTime(referenceTime);

            return(distance / GetBeatSnapDistanceAt(referenceTime) * beatLength);
        }
Esempio n. 11
0
        public override float DurationToDistance(double referenceTime, double duration)
        {
            double beatLength = BeatSnapProvider.GetBeatLengthAtTime(referenceTime);

            return((float)(duration / beatLength * GetBeatSnapDistanceAt(referenceTime)));
        }
Esempio n. 12
0
        public override float GetSnappedDistanceFromDistance(double referenceTime, float distance)
        {
            var snappedEndTime = BeatSnapProvider.SnapTime(referenceTime + DistanceToDuration(referenceTime, distance), referenceTime);

            return(DurationToDistance(referenceTime, snappedEndTime - referenceTime));
        }
Esempio n. 13
0
 public virtual double FindSnappedDuration(HitObject referenceObject, float distance)
 => BeatSnapProvider.SnapTime(referenceObject.StartTime + DistanceToDuration(referenceObject, distance), referenceObject.StartTime) - referenceObject.StartTime;