diff --git a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs index 05eb0ffdbf..a50c3a2fea 100644 --- a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs +++ b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs @@ -22,28 +22,14 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor { internal class CursorTrail : Drawable, IRequireHighFrequencyMousePosition { - private int currentIndex; - - private IShader shader; - private Texture texture; - - private Vector2 size => texture.Size * Scale; - - private double timeOffset; - - private float time; - - public override bool IsPresent => true; - private const int max_sprites = 2048; private readonly TrailPart[] parts = new TrailPart[max_sprites]; - - private Vector2? lastPosition; - - private readonly InputResampler resampler = new InputResampler(); - - protected override DrawNode CreateDrawNode() => new TrailDrawNode(this); + private int currentIndex; + private IShader shader; + private Texture texture; + private double timeOffset; + private float time; public CursorTrail() { @@ -60,8 +46,6 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor } } - public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => true; - [BackgroundDependencyLoader] private void load(ShaderManager shaders, TextureStore textures) { @@ -76,6 +60,8 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor resetTime(); } + public override bool IsPresent => true; + protected override void Update() { base.Update(); @@ -101,6 +87,13 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor timeOffset = Time.Current; } + private Vector2 size => texture.Size * Scale; + + private Vector2? lastPosition; + private readonly InputResampler resampler = new InputResampler(); + + public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => true; + protected override bool OnMouseMove(MouseMoveEvent e) { Vector2 pos = e.ScreenSpaceMousePosition; @@ -127,21 +120,19 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor for (float d = interval; d < distance; d += interval) { lastPosition = pos1 + direction * d; - addPosition(lastPosition.Value); + + parts[currentIndex].Position = lastPosition.Value; + parts[currentIndex].Time = time; + ++parts[currentIndex].InvalidationID; + + currentIndex = (currentIndex + 1) % max_sprites; } } return base.OnMouseMove(e); } - private void addPosition(Vector2 pos) - { - parts[currentIndex].Position = pos; - parts[currentIndex].Time = time; - ++parts[currentIndex].InvalidationID; - - currentIndex = (currentIndex + 1) % max_sprites; - } + protected override DrawNode CreateDrawNode() => new TrailDrawNode(this); private struct TrailPart {