From f7806bc20538111cf2fc858d979dcc808a655e3e Mon Sep 17 00:00:00 2001 From: HoLLy Date: Mon, 13 May 2019 01:31:47 +0200 Subject: [PATCH 1/3] Add smoothing to flashlight movement --- osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs b/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs index c0332fbf60..c3c1e86c18 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs @@ -7,6 +7,7 @@ using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Input; using osu.Framework.Input.Events; +using osu.Framework.MathUtils; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects; @@ -35,6 +36,9 @@ namespace osu.Game.Rulesets.Osu.Mods private class OsuFlashlight : Flashlight, IRequireHighFrequencyMousePosition { + private const double follow_delay = 120; + private double lastPositionUpdate; + public OsuFlashlight() { FlashlightSize = new Vector2(0, getSizeFor(0)); @@ -48,7 +52,16 @@ namespace osu.Game.Rulesets.Osu.Mods protected override bool OnMouseMove(MouseMoveEvent e) { - FlashlightPosition = e.MousePosition; + var position = FlashlightPosition; + var destination = e.MousePosition; + + double frameTime = Clock.CurrentTime - lastPositionUpdate; + double interp = Interpolation.ApplyEasing(Easing.Out, MathHelper.Clamp(frameTime / follow_delay, 0, 1)); + FlashlightPosition = new Vector2( + (float)Interpolation.Lerp(position.X, destination.X, interp), + (float)Interpolation.Lerp(position.Y, destination.Y, interp) + ); + lastPositionUpdate = Clock.CurrentTime; return base.OnMouseMove(e); } From 1809c996bbede491ce99aea838122e589f770c3e Mon Sep 17 00:00:00 2001 From: HoLLy Date: Mon, 13 May 2019 12:09:19 +0200 Subject: [PATCH 2/3] Use Interpolation.ValueAt instead of manually interpolating FL position. --- osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs b/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs index c3c1e86c18..084959f775 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs @@ -37,7 +37,6 @@ namespace osu.Game.Rulesets.Osu.Mods private class OsuFlashlight : Flashlight, IRequireHighFrequencyMousePosition { private const double follow_delay = 120; - private double lastPositionUpdate; public OsuFlashlight() { @@ -55,13 +54,8 @@ namespace osu.Game.Rulesets.Osu.Mods var position = FlashlightPosition; var destination = e.MousePosition; - double frameTime = Clock.CurrentTime - lastPositionUpdate; - double interp = Interpolation.ApplyEasing(Easing.Out, MathHelper.Clamp(frameTime / follow_delay, 0, 1)); - FlashlightPosition = new Vector2( - (float)Interpolation.Lerp(position.X, destination.X, interp), - (float)Interpolation.Lerp(position.Y, destination.Y, interp) - ); - lastPositionUpdate = Clock.CurrentTime; + FlashlightPosition = Interpolation.ValueAt(MathHelper.Clamp(Clock.ElapsedFrameTime, 0, follow_delay), position, destination, 0, follow_delay, Easing.Out); + return base.OnMouseMove(e); } From be6da833f822ab60ecbdd9c8f8acb7b54812aa6c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 14 May 2019 11:11:57 +0900 Subject: [PATCH 3/3] Move constant local (and break line) --- osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs b/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs index 084959f775..7fa3dbe07e 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModFlashlight.cs @@ -36,8 +36,6 @@ namespace osu.Game.Rulesets.Osu.Mods private class OsuFlashlight : Flashlight, IRequireHighFrequencyMousePosition { - private const double follow_delay = 120; - public OsuFlashlight() { FlashlightSize = new Vector2(0, getSizeFor(0)); @@ -51,10 +49,13 @@ namespace osu.Game.Rulesets.Osu.Mods protected override bool OnMouseMove(MouseMoveEvent e) { + const double follow_delay = 120; + var position = FlashlightPosition; var destination = e.MousePosition; - FlashlightPosition = Interpolation.ValueAt(MathHelper.Clamp(Clock.ElapsedFrameTime, 0, follow_delay), position, destination, 0, follow_delay, Easing.Out); + FlashlightPosition = Interpolation.ValueAt( + MathHelper.Clamp(Clock.ElapsedFrameTime, 0, follow_delay), position, destination, 0, follow_delay, Easing.Out); return base.OnMouseMove(e); }