diff --git a/Directory.Build.props b/Directory.Build.props
index 2cd40c8675..2d3478f256 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -16,7 +16,7 @@
-
+
diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs
index d1a6463d72..a57bb466c7 100644
--- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs
+++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs
@@ -12,6 +12,7 @@ using osu.Game.Graphics;
using osu.Game.Rulesets.Objects;
using osu.Game.Rulesets.Objects.Drawables;
using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces;
+using osu.Game.Rulesets.Osu.Skinning;
using osu.Game.Rulesets.Scoring;
using osu.Game.Screens.Ranking;
using osu.Game.Skinning;
@@ -31,6 +32,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
private readonly IBindable positionBindable = new Bindable();
+ private bool spinnerFrequencyModulate;
+
public DrawableSpinner(Spinner s)
: base(s)
{
@@ -82,6 +85,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
}
private SkinnableSound spinningSample;
+ private const float spinning_sample_initial_frequency = 1.0f;
+ private const float spinning_sample_modulated_base_frequency = 0.5f;
protected override void LoadSamples()
{
@@ -101,6 +106,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
{
Volume = { Value = 0 },
Looping = true,
+ Frequency = { Value = spinning_sample_initial_frequency }
});
}
}
@@ -171,6 +177,12 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
positionBindable.BindTo(HitObject.PositionBindable);
}
+ protected override void ApplySkin(ISkinSource skin, bool allowFallback)
+ {
+ base.ApplySkin(skin, allowFallback);
+ spinnerFrequencyModulate = skin.GetConfig(OsuSkinConfiguration.SpinnerFrequencyModulate)?.Value ?? true;
+ }
+
///
/// The completion progress of this spinner from 0..1 (clamped).
///
@@ -220,9 +232,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
if (HandleUserInput)
RotationTracker.Tracking = !Result.HasResult && (OsuActionInputManager?.PressedActions.Any(x => x == OsuAction.LeftButton || x == OsuAction.RightButton) ?? false);
- if (spinningSample != null)
- // todo: implement SpinnerFrequencyModulate
- spinningSample.Frequency.Value = 0.5f + Progress;
+ if (spinningSample != null && spinnerFrequencyModulate)
+ spinningSample.Frequency.Value = spinning_sample_modulated_base_frequency + Progress;
}
protected override void UpdateAfterChildren()
diff --git a/osu.Game.Rulesets.Osu/Skinning/OsuSkinConfiguration.cs b/osu.Game.Rulesets.Osu/Skinning/OsuSkinConfiguration.cs
index 154160fdb5..e034e14eb0 100644
--- a/osu.Game.Rulesets.Osu/Skinning/OsuSkinConfiguration.cs
+++ b/osu.Game.Rulesets.Osu/Skinning/OsuSkinConfiguration.cs
@@ -13,6 +13,7 @@ namespace osu.Game.Rulesets.Osu.Skinning
CursorExpand,
CursorRotate,
HitCircleOverlayAboveNumber,
- HitCircleOverlayAboveNumer // Some old skins will have this typo
+ HitCircleOverlayAboveNumer, // Some old skins will have this typo
+ SpinnerFrequencyModulate
}
}
diff --git a/osu.Game/Overlays/Toolbar/Toolbar.cs b/osu.Game/Overlays/Toolbar/Toolbar.cs
index 5bdd86c671..beac6adc59 100644
--- a/osu.Game/Overlays/Toolbar/Toolbar.cs
+++ b/osu.Game/Overlays/Toolbar/Toolbar.cs
@@ -118,9 +118,9 @@ namespace osu.Game.Overlays.Toolbar
RelativeSizeAxes = Axes.X,
Anchor = Anchor.BottomLeft,
Alpha = 0,
- Height = 90,
+ Height = 100,
Colour = ColourInfo.GradientVertical(
- OsuColour.Gray(0.1f).Opacity(0.5f), OsuColour.Gray(0.1f).Opacity(0)),
+ OsuColour.Gray(0).Opacity(0.9f), OsuColour.Gray(0).Opacity(0)),
},
};
}
diff --git a/osu.Game/Screens/Edit/EditorScreenWithTimeline.cs b/osu.Game/Screens/Edit/EditorScreenWithTimeline.cs
index e9ff0b5598..67442aa55e 100644
--- a/osu.Game/Screens/Edit/EditorScreenWithTimeline.cs
+++ b/osu.Game/Screens/Edit/EditorScreenWithTimeline.cs
@@ -7,6 +7,7 @@ using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
+using osu.Game.Graphics.UserInterface;
using osu.Game.Screens.Edit.Compose.Components;
using osu.Game.Screens.Edit.Compose.Components.Timeline;
using osuTK.Graphics;
@@ -32,6 +33,8 @@ namespace osu.Game.Screens.Edit
Container mainContent;
+ LoadingSpinner spinner;
+
Children = new Drawable[]
{
mainContent = new Container
@@ -44,6 +47,10 @@ namespace osu.Game.Screens.Edit
Top = vertical_margins + timeline_height,
Bottom = vertical_margins
},
+ Child = spinner = new LoadingSpinner(true)
+ {
+ State = { Value = Visibility.Visible },
+ },
},
new Container
{
@@ -87,9 +94,10 @@ namespace osu.Game.Screens.Edit
}
},
};
-
LoadComponentAsync(CreateMainContent(), content =>
{
+ spinner.State.Value = Visibility.Hidden;
+
mainContent.Add(content);
content.FadeInFromZero(300, Easing.OutQuint);