private static double GetTransformedTime(RuntimeNote note, double now, NoteTimePoints timePoints, bool clampIncoming = true, bool clampPassed = true)
        {
            var timeRemaining = note.HitTime - now;

            double timeRemainingInWindow;

            if (clampIncoming && timeRemaining > timePoints.Duration)
            {
                timeRemainingInWindow = 1f;
            }
            else if (clampPassed && timeRemaining < 0f)
            {
                timeRemainingInWindow = 0f;
            }
            else
            {
                timeRemainingInWindow = timeRemaining / timePoints.Duration;
            }

            return(WtfTransform(timeRemainingInWindow));
        }
        private static float GetNoteOnStageY(RuntimeNote note, double now, NoteTimePoints timePoints, NoteAnimationMetrics animationMetrics)
        {
            var transformedTime = GetTransformedTime(note, now, timePoints);

            return(GetNoteOnStageY(transformedTime, animationMetrics));
        }