diff --git a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs
index 5b7d2d40d3..7809a0bf05 100644
--- a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs
+++ b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs
@@ -18,7 +18,6 @@ using osu.Framework.Graphics.Visualisation;
using osu.Framework.Input;
using osu.Framework.Input.Events;
using osu.Framework.Timing;
-using osu.Game.Rulesets.Osu.Skinning.Legacy;
using osuTK;
using osuTK.Graphics;
using osuTK.Graphics.ES30;
@@ -41,6 +40,7 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor
private double timeOffset;
private float time;
protected bool Spin { get; set; }
+ public float PartRotation { get; set; }
///
/// The scale used on creation of a new trail part.
@@ -80,12 +80,9 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor
shader = shaders.Load(@"CursorTrail", FragmentShaderDescriptor.TEXTURE);
}
- private double loadCompleteTime;
-
protected override void LoadComplete()
{
base.LoadComplete();
- loadCompleteTime = Parent!.Clock.CurrentTime; // using parent's clock since our is overridden
resetTime();
}
@@ -245,8 +242,7 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor
texture = Source.texture;
time = Source.time;
fadeExponent = Source.FadeExponent;
- // The goal is to sync trail rotation with the cursor. Cursor uses spin transform which starts rotation at LoadComplete time.
- angle = Source.Spin ? (float)((Source.Parent!.Clock.CurrentTime - Source.loadCompleteTime) * 2 * Math.PI / LegacyCursor.REVOLUTION_DURATION) : 0;
+ angle = Source.Spin ? float.DegreesToRadians(Source.PartRotation) : 0;
originPosition = Vector2.Zero;
diff --git a/osu.Game.Rulesets.Osu/UI/Cursor/OsuCursor.cs b/osu.Game.Rulesets.Osu/UI/Cursor/OsuCursor.cs
index c2f7d84f5e..e84fb9e2d6 100644
--- a/osu.Game.Rulesets.Osu/UI/Cursor/OsuCursor.cs
+++ b/osu.Game.Rulesets.Osu/UI/Cursor/OsuCursor.cs
@@ -36,6 +36,11 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor
///
public Vector2 CurrentExpandedScale => skinnableCursor.ExpandTarget?.Scale ?? Vector2.One;
+ ///
+ /// The current rotation of the cursor.
+ ///
+ public float CurrentRotation => skinnableCursor.ExpandTarget?.Rotation ?? 0;
+
public IBindable CursorScale => cursorScale;
///
diff --git a/osu.Game.Rulesets.Osu/UI/Cursor/OsuCursorContainer.cs b/osu.Game.Rulesets.Osu/UI/Cursor/OsuCursorContainer.cs
index 8c0871d54f..974d99d7c8 100644
--- a/osu.Game.Rulesets.Osu/UI/Cursor/OsuCursorContainer.cs
+++ b/osu.Game.Rulesets.Osu/UI/Cursor/OsuCursorContainer.cs
@@ -83,7 +83,10 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor
base.Update();
if (cursorTrail.Drawable is CursorTrail trail)
+ {
trail.NewPartScale = ActiveCursor.CurrentExpandedScale;
+ trail.PartRotation = ActiveCursor.CurrentRotation;
+ }
}
public bool OnPressed(KeyBindingPressEvent e)