diff --git a/osu.Game/Beatmaps/IBeatSyncProvider.cs b/osu.Game/Beatmaps/IBeatSyncProvider.cs
index b0b265c228..485497a8f0 100644
--- a/osu.Game/Beatmaps/IBeatSyncProvider.cs
+++ b/osu.Game/Beatmaps/IBeatSyncProvider.cs
@@ -21,6 +21,11 @@ namespace osu.Game.Beatmaps
///
public bool BeatSyncAvailable => Clock != null;
+ ///
+ /// Whether the beat sync provider is currently in a kiai section. Should make everything more epic.
+ ///
+ public bool IsKiaiTime => Clock != null && (ControlPoints?.EffectPointAt(Clock.CurrentTime).KiaiMode ?? false);
+
///
/// Access any available control points from a beatmap providing beat sync. If null, no current provider is available.
///
diff --git a/osu.Game/Graphics/Containers/BeatSyncedContainer.cs b/osu.Game/Graphics/Containers/BeatSyncedContainer.cs
index 774468c344..c8ea21e139 100644
--- a/osu.Game/Graphics/Containers/BeatSyncedContainer.cs
+++ b/osu.Game/Graphics/Containers/BeatSyncedContainer.cs
@@ -26,8 +26,10 @@ namespace osu.Game.Graphics.Containers
{
private int lastBeat;
- protected TimingControlPoint? LastTimingPoint { get; private set; }
- protected EffectControlPoint? LastEffectPoint { get; private set; }
+ private TimingControlPoint? lastTimingPoint { get; set; }
+ private EffectControlPoint? lastEffectPoint { get; set; }
+
+ public bool IsKiaiTime { get; private set; }
///
/// The amount of time before a beat we should fire .
@@ -125,7 +127,7 @@ namespace osu.Game.Graphics.Containers
TimeSinceLastBeat = beatLength - TimeUntilNextBeat;
- if (ReferenceEquals(timingPoint, LastTimingPoint) && beatIndex == lastBeat)
+ if (ReferenceEquals(timingPoint, lastTimingPoint) && beatIndex == lastBeat)
return;
// as this event is sometimes used for sound triggers where `BeginDelayedSequence` has no effect, avoid firing it if too far away from the beat.
@@ -137,8 +139,10 @@ namespace osu.Game.Graphics.Containers
}
lastBeat = beatIndex;
- LastTimingPoint = timingPoint;
- LastEffectPoint = effectPoint;
+ lastTimingPoint = timingPoint;
+ lastEffectPoint = effectPoint;
+
+ IsKiaiTime = lastEffectPoint?.KiaiMode ?? false;
}
}
}
diff --git a/osu.Game/Screens/Menu/LogoVisualisation.cs b/osu.Game/Screens/Menu/LogoVisualisation.cs
index c238bf8a21..e9f52e0b9f 100644
--- a/osu.Game/Screens/Menu/LogoVisualisation.cs
+++ b/osu.Game/Screens/Menu/LogoVisualisation.cs
@@ -100,23 +100,18 @@ namespace osu.Game.Screens.Menu
private void updateAmplitudes()
{
- bool isKiaiTime = false;
-
for (int i = 0; i < temporalAmplitudes.Length; i++)
temporalAmplitudes[i] = 0;
if (beatSyncProvider.Clock != null)
- {
- isKiaiTime = beatSyncProvider.ControlPoints?.EffectPointAt(beatSyncProvider.Clock.CurrentTime).KiaiMode ?? false;
addAmplitudesFromSource(beatSyncProvider);
- }
foreach (var source in amplitudeSources)
addAmplitudesFromSource(source);
for (int i = 0; i < bars_per_visualiser; i++)
{
- float targetAmplitude = (temporalAmplitudes[(i + indexOffset) % bars_per_visualiser]) * (isKiaiTime ? 1 : 0.5f);
+ float targetAmplitude = (temporalAmplitudes[(i + indexOffset) % bars_per_visualiser]) * (beatSyncProvider.IsKiaiTime ? 1 : 0.5f);
if (targetAmplitude > frequencyAmplitudes[i])
frequencyAmplitudes[i] = targetAmplitude;
}
diff --git a/osu.Game/Screens/Menu/OsuLogo.cs b/osu.Game/Screens/Menu/OsuLogo.cs
index 0909f615f2..e9b50f94f7 100644
--- a/osu.Game/Screens/Menu/OsuLogo.cs
+++ b/osu.Game/Screens/Menu/OsuLogo.cs
@@ -353,7 +353,7 @@ namespace osu.Game.Screens.Menu
float maxAmplitude = lastBeatIndex >= 0 ? musicController.CurrentTrack.CurrentAmplitudes.Maximum : 0;
logoAmplitudeContainer.Scale = new Vector2((float)Interpolation.Damp(logoAmplitudeContainer.Scale.X, 1 - Math.Max(0, maxAmplitude - scale_adjust_cutoff) * 0.04f, 0.9f, Time.Elapsed));
- triangles.Velocity = (float)Interpolation.Damp(triangles.Velocity, triangles_paused_velocity * (LastEffectPoint.KiaiMode ? 4 : 2), 0.995f, Time.Elapsed);
+ triangles.Velocity = (float)Interpolation.Damp(triangles.Velocity, triangles_paused_velocity * (IsKiaiTime ? 4 : 2), 0.995f, Time.Elapsed);
}
else
{