From 0c335592b3ed4eebd8428fa91dd4c90abb98010c Mon Sep 17 00:00:00 2001
From: Dean Herbert <pe@ppy.sh>
Date: Thu, 12 May 2022 19:42:35 +0900
Subject: [PATCH] Tidy up interpolation and move `const` to new home

---
 .../Components/HitCircleOverlapMarker.cs      | 23 +++++++++++++------
 .../Edit/Blueprints/OsuSelectionBlueprint.cs  |  3 ++-
 .../Edit/DrawableOsuEditorRuleset.cs          |  6 -----
 3 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/osu.Game.Rulesets.Osu/Edit/Blueprints/HitCircles/Components/HitCircleOverlapMarker.cs b/osu.Game.Rulesets.Osu/Edit/Blueprints/HitCircles/Components/HitCircleOverlapMarker.cs
index 34e5e120f1..579c9ef356 100644
--- a/osu.Game.Rulesets.Osu/Edit/Blueprints/HitCircles/Components/HitCircleOverlapMarker.cs
+++ b/osu.Game.Rulesets.Osu/Edit/Blueprints/HitCircles/Components/HitCircleOverlapMarker.cs
@@ -18,6 +18,12 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.HitCircles.Components
 {
     public class HitCircleOverlapMarker : BlueprintPiece<HitCircle>
     {
+        /// <summary>
+        /// Hit objects are intentionally made to fade out at a constant slower rate than in gameplay.
+        /// This allows a mapper to gain better historical context and use recent hitobjects as reference / snap points.
+        /// </summary>
+        public const double FADE_OUT_EXTENSION = 700;
+
         private readonly Circle circle;
         private readonly RingPiece ring;
 
@@ -64,16 +70,19 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.HitCircles.Components
             if ((hitObject is IHasComboInformation combo))
                 ring.BorderColour = combo.GetComboColour(skin);
 
-            bool hasReachedObject = editorClock.CurrentTime >= hitObject.StartTime;
-            float interpolation = Interpolation.ValueAt(editorClock.CurrentTime, 0, 1f, hitObject.StartTime, hitObject.StartTime + DrawableOsuEditorRuleset.EDITOR_HIT_OBJECT_FADE_OUT_EXTENSION, Easing.In);
-            float interpolation2 = MathHelper.Clamp(Interpolation.ValueAt(editorClock.CurrentTime, 0, 1f, hitObject.StartTime, hitObject.StartTime + DrawableOsuEditorRuleset.EDITOR_HIT_OBJECT_FADE_OUT_EXTENSION / 2, Easing.OutQuint), 0, 1);
-            float interpolation3 = Interpolation.ValueAt(editorClock.CurrentTime, 0, 1f, hitObject.StartTime, hitObject.StartTime + DrawableOsuEditorRuleset.EDITOR_HIT_OBJECT_FADE_OUT_EXTENSION);
+            double editorTime = editorClock.CurrentTime;
+            double hitObjectTime = hitObject.StartTime;
+            bool hasReachedObject = editorTime >= hitObjectTime;
 
             if (hasReachedObject)
             {
-                circle.Scale = new Vector2(1 - 0.05f * interpolation3);
-                ring.Scale = new Vector2(1 + 0.1f * interpolation2);
-                Alpha = 0.9f * (1 - (interpolation));
+                float alpha = Interpolation.ValueAt(editorTime, 0, 1f, hitObjectTime, hitObjectTime + FADE_OUT_EXTENSION, Easing.In);
+                float circleScale = Interpolation.ValueAt(editorTime, 0, 1f, hitObjectTime, hitObjectTime + FADE_OUT_EXTENSION);
+                float ringScale = MathHelper.Clamp(Interpolation.ValueAt(editorTime, 0, 1f, hitObjectTime, hitObjectTime + FADE_OUT_EXTENSION / 2, Easing.OutQuint), 0, 1);
+
+                circle.Scale = new Vector2(1 - 0.05f * circleScale);
+                ring.Scale = new Vector2(1 + 0.1f * ringScale);
+                Alpha = 0.9f * (1 - alpha);
             }
             else
                 Alpha = 0;
diff --git a/osu.Game.Rulesets.Osu/Edit/Blueprints/OsuSelectionBlueprint.cs b/osu.Game.Rulesets.Osu/Edit/Blueprints/OsuSelectionBlueprint.cs
index dbf53ac9a6..1d32e922ac 100644
--- a/osu.Game.Rulesets.Osu/Edit/Blueprints/OsuSelectionBlueprint.cs
+++ b/osu.Game.Rulesets.Osu/Edit/Blueprints/OsuSelectionBlueprint.cs
@@ -4,6 +4,7 @@
 using osu.Framework.Allocation;
 using osu.Game.Rulesets.Edit;
 using osu.Game.Rulesets.Objects;
+using osu.Game.Rulesets.Osu.Edit.Blueprints.HitCircles.Components;
 using osu.Game.Rulesets.Osu.Objects;
 using osu.Game.Rulesets.Osu.Objects.Drawables;
 using osu.Game.Screens.Edit;
@@ -20,7 +21,7 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints
 
         protected override bool AlwaysShowWhenSelected => true;
 
-        protected override bool ShouldBeAlive => base.ShouldBeAlive || editorClock.CurrentTime - Item.GetEndTime() < DrawableOsuEditorRuleset.EDITOR_HIT_OBJECT_FADE_OUT_EXTENSION;
+        protected override bool ShouldBeAlive => base.ShouldBeAlive || editorClock.CurrentTime - Item.GetEndTime() < HitCircleOverlapMarker.FADE_OUT_EXTENSION;
 
         protected OsuSelectionBlueprint(T hitObject)
             : base(hitObject)
diff --git a/osu.Game.Rulesets.Osu/Edit/DrawableOsuEditorRuleset.cs b/osu.Game.Rulesets.Osu/Edit/DrawableOsuEditorRuleset.cs
index f542c88d89..516b34d807 100644
--- a/osu.Game.Rulesets.Osu/Edit/DrawableOsuEditorRuleset.cs
+++ b/osu.Game.Rulesets.Osu/Edit/DrawableOsuEditorRuleset.cs
@@ -12,12 +12,6 @@ namespace osu.Game.Rulesets.Osu.Edit
 {
     public class DrawableOsuEditorRuleset : DrawableOsuRuleset
     {
-        /// <summary>
-        /// Hit objects are intentionally made to fade out at a constant slower rate than in gameplay.
-        /// This allows a mapper to gain better historical context and use recent hitobjects as reference / snap points.
-        /// </summary>
-        public const double EDITOR_HIT_OBJECT_FADE_OUT_EXTENSION = 700;
-
         public DrawableOsuEditorRuleset(Ruleset ruleset, IBeatmap beatmap, IReadOnlyList<Mod> mods)
             : base(ruleset, beatmap, mods)
         {