diff --git a/osu.Game.Rulesets.Taiko/Mods/TaikoModHidden.cs b/osu.Game.Rulesets.Taiko/Mods/TaikoModHidden.cs
index aeb71ccaf1..f787a75c51 100644
--- a/osu.Game.Rulesets.Taiko/Mods/TaikoModHidden.cs
+++ b/osu.Game.Rulesets.Taiko/Mods/TaikoModHidden.cs
@@ -37,9 +37,10 @@ namespace osu.Game.Rulesets.Taiko.Mods
protected double MultiplierAt(double position)
{
- var beatLength = controlPointInfo.TimingPointAt(position)?.BeatLength;
- var speedMultiplier = controlPointInfo.DifficultyPointAt(position)?.SpeedMultiplier;
- return originalSliderMultiplier * (speedMultiplier ?? 1.0) * TimingControlPoint.DEFAULT_BEAT_LENGTH / (beatLength ?? TimingControlPoint.DEFAULT_BEAT_LENGTH);
+ double beatLength = controlPointInfo.TimingPointAt(position).BeatLength;
+ double speedMultiplier = controlPointInfo.DifficultyPointAt(position).SpeedMultiplier;
+
+ return originalSliderMultiplier * speedMultiplier * TimingControlPoint.DEFAULT_BEAT_LENGTH / beatLength;
}
protected override void ApplyNormalVisibilityState(DrawableHitObject hitObject, ArmedState state)
@@ -56,9 +57,9 @@ namespace osu.Game.Rulesets.Taiko.Mods
return;
}
- var preempt = 10000 / MultiplierAt(hitObject.HitObject.StartTime);
- var start = hitObject.HitObject.StartTime - preempt * 0.6;
- var duration = preempt * 0.3;
+ double preempt = 10000 / MultiplierAt(hitObject.HitObject.StartTime);
+ double start = hitObject.HitObject.StartTime - preempt * 0.6;
+ double duration = preempt * 0.3;
using (hitObject.BeginAbsoluteSequence(start))
{
diff --git a/osu.Game/Beatmaps/ControlPoints/ControlPointInfo.cs b/osu.Game/Beatmaps/ControlPoints/ControlPointInfo.cs
index d3a4b635f5..25d0843a71 100644
--- a/osu.Game/Beatmaps/ControlPoints/ControlPointInfo.cs
+++ b/osu.Game/Beatmaps/ControlPoints/ControlPointInfo.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using JetBrains.Annotations;
using Newtonsoft.Json;
using osu.Framework.Bindables;
using osu.Framework.Lists;
@@ -66,6 +67,7 @@ namespace osu.Game.Beatmaps.ControlPoints
///
/// The time to find the difficulty control point at.
/// The difficulty control point.
+ [NotNull]
public DifficultyControlPoint DifficultyPointAt(double time) => binarySearchWithFallback(DifficultyPoints, time, DifficultyControlPoint.DEFAULT);
///
@@ -73,6 +75,7 @@ namespace osu.Game.Beatmaps.ControlPoints
///
/// The time to find the effect control point at.
/// The effect control point.
+ [NotNull]
public EffectControlPoint EffectPointAt(double time) => binarySearchWithFallback(EffectPoints, time, EffectControlPoint.DEFAULT);
///
@@ -80,6 +83,7 @@ namespace osu.Game.Beatmaps.ControlPoints
///
/// The time to find the sound control point at.
/// The sound control point.
+ [NotNull]
public SampleControlPoint SamplePointAt(double time) => binarySearchWithFallback(SamplePoints, time, SamplePoints.Count > 0 ? SamplePoints[0] : SampleControlPoint.DEFAULT);
///
@@ -87,6 +91,7 @@ namespace osu.Game.Beatmaps.ControlPoints
///
/// The time to find the timing control point at.
/// The timing control point.
+ [NotNull]
public TimingControlPoint TimingPointAt(double time) => binarySearchWithFallback(TimingPoints, time, TimingPoints.Count > 0 ? TimingPoints[0] : TimingControlPoint.DEFAULT);
///