diff --git a/osu.Game/Graphics/Cursor/CursorTrail.cs b/osu.Game/Graphics/Cursor/CursorTrail.cs index 09d1b99d13..1bc1dea04f 100644 --- a/osu.Game/Graphics/Cursor/CursorTrail.cs +++ b/osu.Game/Graphics/Cursor/CursorTrail.cs @@ -14,6 +14,7 @@ using OpenTK.Graphics.ES30; using osu.Framework.Graphics.Primitives; using osu.Framework.Graphics.Colour; using osu.Framework.Timing; +using System.Diagnostics; namespace osu.Game.Graphics.Cursor { @@ -39,6 +40,8 @@ namespace osu.Game.Graphics.Cursor private Vector2? lastPosition; + private readonly InputResampler resampler = new InputResampler(); + protected override DrawNode CreateDrawNode() => new TrailDrawNode(); protected override void ApplyDrawNode(DrawNode node) @@ -116,22 +119,26 @@ namespace osu.Game.Graphics.Cursor if (lastPosition == null) { lastPosition = state.Mouse.NativeState.Position; + resampler.AddPosition(lastPosition.Value); return base.OnMouseMove(state); } - Vector2 pos1 = lastPosition.Value; - Vector2 pos2 = state.Mouse.NativeState.Position; - - Vector2 diff = pos2 - pos1; - float distance = diff.Length; - Vector2 direction = diff / distance; - - float interval = size.X / 2 * 0.9f; - - for (float d = interval; d < distance; d += interval) + foreach (Vector2 pos2 in resampler.AddPosition(state.Mouse.NativeState.Position)) { - lastPosition = pos1 + direction * d; - addPosition(lastPosition.Value); + Trace.Assert(lastPosition.HasValue); + + Vector2 pos1 = lastPosition.Value; + Vector2 diff = pos2 - pos1; + float distance = diff.Length; + Vector2 direction = diff / distance; + + float interval = size.X / 2 * 0.9f; + + for (float d = interval; d < distance; d += interval) + { + lastPosition = pos1 + direction * d; + addPosition(lastPosition.Value); + } } return base.OnMouseMove(state);