From 6b9e8dbd2e4ab90c57c1bb16bd20d22d6c56e81a Mon Sep 17 00:00:00 2001 From: Roxie Wattz Date: Sun, 24 Oct 2021 21:34:40 -0700 Subject: [PATCH 01/10] Added the ouendan 2 style hidden Added as an option for nostalgia nerds like me --- osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs | 24 ++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs index 9c7784a00a..59d6769e2c 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs @@ -5,6 +5,8 @@ using System; using System.Diagnostics; using System.Linq; using osu.Framework.Graphics; +using osu.Framework.Bindables; +using osu.Game.Configuration; using osu.Game.Beatmaps; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects; @@ -13,10 +15,14 @@ using osu.Game.Rulesets.Osu.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Skinning; + namespace osu.Game.Rulesets.Osu.Mods { public class OsuModHidden : ModHidden, IHidesApproachCircles { + [SettingSource("Don't fade out hit circles", "This makes the hidden mod only remove approach circles.")] + public Bindable NoHitCircles { get; } = new BindableBool(false); + public override string Description => @"Play with no approach circles and fading circles/sliders."; public override double ScoreMultiplier => 1.06; @@ -65,14 +71,16 @@ namespace osu.Game.Rulesets.Osu.Mods { case DrawableSliderTail _: using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) - drawableObject.FadeOut(fadeDuration); + if (!NoHitCircles.Value) + drawableObject.FadeOut(fadeDuration); break; case DrawableSliderRepeat sliderRepeat: using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) // only apply to circle piece – reverse arrow is not affected by hidden. - sliderRepeat.CirclePiece.FadeOut(fadeDuration); + if (!NoHitCircles.Value) + sliderRepeat.CirclePiece.FadeOut(fadeDuration); break; @@ -82,7 +90,8 @@ namespace osu.Game.Rulesets.Osu.Mods if (increaseVisibility) { // only fade the circle piece (not the approach circle) for the increased visibility object. - fadeTarget = circle.CirclePiece; + if (!NoHitCircles.Value) + fadeTarget = circle.CirclePiece; } else { @@ -92,18 +101,21 @@ namespace osu.Game.Rulesets.Osu.Mods } using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) - fadeTarget.FadeOut(fadeDuration); + if (!NoHitCircles.Value) + fadeTarget.FadeOut(fadeDuration); break; case DrawableSlider slider: using (slider.BeginAbsoluteSequence(fadeStartTime)) - slider.Body.FadeOut(fadeDuration, Easing.Out); + if (!NoHitCircles.Value) + slider.Body.FadeOut(fadeDuration, Easing.Out); break; case DrawableSliderTick sliderTick: using (sliderTick.BeginAbsoluteSequence(fadeStartTime)) - sliderTick.FadeOut(fadeDuration); + if (!NoHitCircles.Value) + sliderTick.FadeOut(fadeDuration); break; From d1b720af167141c44566ceb1ce24b5eed04677fb Mon Sep 17 00:00:00 2001 From: Roxie Wattz Date: Sun, 24 Oct 2021 21:51:12 -0700 Subject: [PATCH 02/10] Add Ouendan 2 reference --- osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs index 59d6769e2c..a57b22451d 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs @@ -20,7 +20,7 @@ namespace osu.Game.Rulesets.Osu.Mods { public class OsuModHidden : ModHidden, IHidesApproachCircles { - [SettingSource("Don't fade out hit circles", "This makes the hidden mod only remove approach circles.")] + [SettingSource("Don't fade out hit circles", "This makes the hidden mod only remove approach circles, similar to Ouendan 2's Easy difficulties.")] public Bindable NoHitCircles { get; } = new BindableBool(false); public override string Description => @"Play with no approach circles and fading circles/sliders."; From 03896fd2ebf219489deb289942c6f0c99e568304 Mon Sep 17 00:00:00 2001 From: Roxie Wattz Date: Sun, 24 Oct 2021 22:17:55 -0700 Subject: [PATCH 03/10] Added test for Ouendan 2 style Hidden mod --- .../Mods/TestSceneOsuModHidden.cs | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModHidden.cs b/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModHidden.cs index ed9da36b05..f25df90737 100644 --- a/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModHidden.cs +++ b/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModHidden.cs @@ -117,6 +117,42 @@ namespace osu.Game.Rulesets.Osu.Tests.Mods PassCondition = checkSomeHit }); + [Test] + public void OuendanTwoHidden() => CreateModTest(new ModTestData + { + Mod = new OsuModHidden { NoHitCircles = { Value = true } }, + Autoplay = true, + Beatmap = new Beatmap + { + HitObjects = new List + { + new HitCircle + { + StartTime = 1000, + Position = new Vector2(206,142) + }, + new HitCircle + { + StartTime = 2000, + Position = new Vector2(306,142) + }, + new Slider + { + StartTime = 3000, + Position = new Vector2(156,242), + Path = new SliderPath(PathType.Linear, new[] { Vector2.Zero, new Vector2(200,0), }) + }, + new Spinner + { + Position = new Vector2(256,192), + StartTime = 7000, + EndTime = 9000 + } + } + }, + PassCondition = checkSomeHit + }); + private bool checkSomeHit() => Player.ScoreProcessor.JudgedHits >= 4; private bool objectWithIncreasedVisibilityHasIndex(int index) From cb36a23cdc639f57568cc2fca8dcaad47efa8b20 Mon Sep 17 00:00:00 2001 From: Roxie Wattz Date: Sun, 24 Oct 2021 22:52:10 -0700 Subject: [PATCH 04/10] Update osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs Suggested by peppy. Changes name and description of setting Co-authored-by: Dean Herbert --- osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs index a57b22451d..59ac6746a0 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs @@ -20,7 +20,7 @@ namespace osu.Game.Rulesets.Osu.Mods { public class OsuModHidden : ModHidden, IHidesApproachCircles { - [SettingSource("Don't fade out hit circles", "This makes the hidden mod only remove approach circles, similar to Ouendan 2's Easy difficulties.")] + [SettingSource("Only fade approach circles", "The main object body will not fade when enabled.")] public Bindable NoHitCircles { get; } = new BindableBool(false); public override string Description => @"Play with no approach circles and fading circles/sliders."; From 7a92c7ab7e0c2c888845f0a16dbf8189ecc50ea2 Mon Sep 17 00:00:00 2001 From: Roxie Wattz Date: Mon, 25 Oct 2021 00:25:32 -0700 Subject: [PATCH 05/10] Move condition to separate switch statement No clue if this is how peppy wanted me to do it but it still works --- .../Mods/TestSceneOsuModHidden.cs | 2 +- osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs | 107 +++++++++++------- 2 files changed, 65 insertions(+), 44 deletions(-) diff --git a/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModHidden.cs b/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModHidden.cs index f25df90737..1fd601cec5 100644 --- a/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModHidden.cs +++ b/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModHidden.cs @@ -120,7 +120,7 @@ namespace osu.Game.Rulesets.Osu.Tests.Mods [Test] public void OuendanTwoHidden() => CreateModTest(new ModTestData { - Mod = new OsuModHidden { NoHitCircles = { Value = true } }, + Mod = new OsuModHidden { OnlyFadeApproachCircles = { Value = true } }, Autoplay = true, Beatmap = new Beatmap { diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs index 59ac6746a0..12e2035e80 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs @@ -21,7 +21,7 @@ namespace osu.Game.Rulesets.Osu.Mods public class OsuModHidden : ModHidden, IHidesApproachCircles { [SettingSource("Only fade approach circles", "The main object body will not fade when enabled.")] - public Bindable NoHitCircles { get; } = new BindableBool(false); + public Bindable OnlyFadeApproachCircles { get; } = new BindableBool(false); public override string Description => @"Play with no approach circles and fading circles/sliders."; public override double ScoreMultiplier => 1.06; @@ -67,69 +67,90 @@ namespace osu.Game.Rulesets.Osu.Mods (double fadeStartTime, double fadeDuration) = getFadeOutParameters(drawableOsuObject); - switch (drawableObject) + if (!OnlyFadeApproachCircles.Value) { - case DrawableSliderTail _: - using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) - if (!NoHitCircles.Value) + switch (drawableObject) + { + case DrawableSliderTail _: + using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) drawableObject.FadeOut(fadeDuration); - break; + break; - case DrawableSliderRepeat sliderRepeat: - using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) - // only apply to circle piece – reverse arrow is not affected by hidden. - if (!NoHitCircles.Value) + case DrawableSliderRepeat sliderRepeat: + using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) + // only apply to circle piece – reverse arrow is not affected by hidden. sliderRepeat.CirclePiece.FadeOut(fadeDuration); - break; + break; - case DrawableHitCircle circle: - Drawable fadeTarget = circle; + case DrawableHitCircle circle: + Drawable fadeTarget = circle; - if (increaseVisibility) - { - // only fade the circle piece (not the approach circle) for the increased visibility object. - if (!NoHitCircles.Value) + if (increaseVisibility) + { + // only fade the circle piece (not the approach circle) for the increased visibility object. fadeTarget = circle.CirclePiece; - } - else - { - // we don't want to see the approach circle - using (circle.BeginAbsoluteSequence(hitObject.StartTime - hitObject.TimePreempt)) - circle.ApproachCircle.Hide(); - } + } + else + { + // we don't want to see the approach circle + using (circle.BeginAbsoluteSequence(hitObject.StartTime - hitObject.TimePreempt)) + circle.ApproachCircle.Hide(); + } - using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) - if (!NoHitCircles.Value) + using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) fadeTarget.FadeOut(fadeDuration); - break; + break; - case DrawableSlider slider: - using (slider.BeginAbsoluteSequence(fadeStartTime)) - if (!NoHitCircles.Value) + case DrawableSlider slider: + using (slider.BeginAbsoluteSequence(fadeStartTime)) slider.Body.FadeOut(fadeDuration, Easing.Out); - break; + break; - case DrawableSliderTick sliderTick: - using (sliderTick.BeginAbsoluteSequence(fadeStartTime)) - if (!NoHitCircles.Value) + case DrawableSliderTick sliderTick: + using (sliderTick.BeginAbsoluteSequence(fadeStartTime)) sliderTick.FadeOut(fadeDuration); - break; + break; - case DrawableSpinner spinner: - // hide elements we don't care about. - // todo: hide background + case DrawableSpinner spinner: + // hide elements we don't care about. + // todo: hide background - spinner.Body.OnSkinChanged += () => hideSpinnerApproachCircle(spinner); - hideSpinnerApproachCircle(spinner); + spinner.Body.OnSkinChanged += () => hideSpinnerApproachCircle(spinner); + hideSpinnerApproachCircle(spinner); - using (spinner.BeginAbsoluteSequence(fadeStartTime)) - spinner.FadeOut(fadeDuration); + using (spinner.BeginAbsoluteSequence(fadeStartTime)) + spinner.FadeOut(fadeDuration); - break; + break; + } + } else + { + switch(drawableObject) + { + case DrawableHitCircle circle: + if (!increaseVisibility) + { + // we don't want to see the approach circle + using (circle.BeginAbsoluteSequence(hitObject.StartTime - hitObject.TimePreempt)) + circle.ApproachCircle.Hide(); + } + break; + + case DrawableSpinner spinner: + // hide elements we don't care about. + // todo: hide background + + spinner.Body.OnSkinChanged += () => hideSpinnerApproachCircle(spinner); + hideSpinnerApproachCircle(spinner); + break; + + default: + break; + } } } From c9a2c6c031e4be032e9b9ecfdf0f9e5faf3be63b Mon Sep 17 00:00:00 2001 From: Roxie Wattz Date: Mon, 25 Oct 2021 14:09:22 -0700 Subject: [PATCH 06/10] Reworking the Ouendan 2 Hidden code AGAIN Not finished. Will be finished in a later commit. --- osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs | 117 ++++++++------------- 1 file changed, 45 insertions(+), 72 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs index 12e2035e80..e93120b321 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs @@ -50,15 +50,15 @@ namespace osu.Game.Rulesets.Osu.Mods protected override void ApplyIncreasedVisibilityState(DrawableHitObject hitObject, ArmedState state) { - applyState(hitObject, true); + applyHiddenState(hitObject, true, OnlyFadeApproachCircles.Value); } protected override void ApplyNormalVisibilityState(DrawableHitObject hitObject, ArmedState state) { - applyState(hitObject, false); + applyHiddenState(hitObject, false, OnlyFadeApproachCircles.Value); } - private void applyState(DrawableHitObject drawableObject, bool increaseVisibility) + private void applyHiddenState(DrawableHitObject drawableObject, bool hideApproachCircle, bool hideCirclePiece) { if (!(drawableObject is DrawableOsuHitObject drawableOsuObject)) return; @@ -67,90 +67,63 @@ namespace osu.Game.Rulesets.Osu.Mods (double fadeStartTime, double fadeDuration) = getFadeOutParameters(drawableOsuObject); - if (!OnlyFadeApproachCircles.Value) + switch (drawableObject) { - switch (drawableObject) - { - case DrawableSliderTail _: - using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) - drawableObject.FadeOut(fadeDuration); + case DrawableSliderTail _: + using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) + drawableObject.FadeOut(fadeDuration); - break; + break; - case DrawableSliderRepeat sliderRepeat: - using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) - // only apply to circle piece – reverse arrow is not affected by hidden. - sliderRepeat.CirclePiece.FadeOut(fadeDuration); + case DrawableSliderRepeat sliderRepeat: + using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) + // only apply to circle piece – reverse arrow is not affected by hidden. + sliderRepeat.CirclePiece.FadeOut(fadeDuration); - break; + break; - case DrawableHitCircle circle: - Drawable fadeTarget = circle; + case DrawableHitCircle circle: + Drawable fadeTarget = circle; - if (increaseVisibility) - { - // only fade the circle piece (not the approach circle) for the increased visibility object. - fadeTarget = circle.CirclePiece; - } - else - { - // we don't want to see the approach circle - using (circle.BeginAbsoluteSequence(hitObject.StartTime - hitObject.TimePreempt)) - circle.ApproachCircle.Hide(); - } + if (hideApproachCircle) + { + // only fade the circle piece (not the approach circle) for the increased visibility object. + fadeTarget = circle.CirclePiece; + } + else + { + // we don't want to see the approach circle + using (circle.BeginAbsoluteSequence(hitObject.StartTime - hitObject.TimePreempt)) + circle.ApproachCircle.Hide(); + } - using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) - fadeTarget.FadeOut(fadeDuration); - break; + using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) + fadeTarget.FadeOut(fadeDuration); + break; - case DrawableSlider slider: - using (slider.BeginAbsoluteSequence(fadeStartTime)) - slider.Body.FadeOut(fadeDuration, Easing.Out); + case DrawableSlider slider: + using (slider.BeginAbsoluteSequence(fadeStartTime)) + slider.Body.FadeOut(fadeDuration, Easing.Out); - break; + break; - case DrawableSliderTick sliderTick: - using (sliderTick.BeginAbsoluteSequence(fadeStartTime)) - sliderTick.FadeOut(fadeDuration); + case DrawableSliderTick sliderTick: + using (sliderTick.BeginAbsoluteSequence(fadeStartTime)) + sliderTick.FadeOut(fadeDuration); - break; + break; - case DrawableSpinner spinner: - // hide elements we don't care about. - // todo: hide background + case DrawableSpinner spinner: + // hide elements we don't care about. + // todo: hide background - spinner.Body.OnSkinChanged += () => hideSpinnerApproachCircle(spinner); - hideSpinnerApproachCircle(spinner); + spinner.Body.OnSkinChanged += () => hideSpinnerApproachCircle(spinner); + hideSpinnerApproachCircle(spinner); - using (spinner.BeginAbsoluteSequence(fadeStartTime)) - spinner.FadeOut(fadeDuration); + using (spinner.BeginAbsoluteSequence(fadeStartTime)) + spinner.FadeOut(fadeDuration); - break; - } - } else - { - switch(drawableObject) - { - case DrawableHitCircle circle: - if (!increaseVisibility) - { - // we don't want to see the approach circle - using (circle.BeginAbsoluteSequence(hitObject.StartTime - hitObject.TimePreempt)) - circle.ApproachCircle.Hide(); - } - break; - - case DrawableSpinner spinner: - // hide elements we don't care about. - // todo: hide background - - spinner.Body.OnSkinChanged += () => hideSpinnerApproachCircle(spinner); - hideSpinnerApproachCircle(spinner); - break; - - default: - break; - } + break; } } From e7b19cb72489a32ac725ddbdfc25cfa2539056c9 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 26 Oct 2021 11:30:26 +0900 Subject: [PATCH 07/10] Rename test and fix incorrect layout --- .../Mods/TestSceneOsuModHidden.cs | 12 ++++++------ osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs | 1 - 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModHidden.cs b/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModHidden.cs index 1fd601cec5..71b575abe2 100644 --- a/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModHidden.cs +++ b/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModHidden.cs @@ -118,7 +118,7 @@ namespace osu.Game.Rulesets.Osu.Tests.Mods }); [Test] - public void OuendanTwoHidden() => CreateModTest(new ModTestData + public void TestApproachCirclesOnly() => CreateModTest(new ModTestData { Mod = new OsuModHidden { OnlyFadeApproachCircles = { Value = true } }, Autoplay = true, @@ -129,22 +129,22 @@ namespace osu.Game.Rulesets.Osu.Tests.Mods new HitCircle { StartTime = 1000, - Position = new Vector2(206,142) + Position = new Vector2(206, 142) }, new HitCircle { StartTime = 2000, - Position = new Vector2(306,142) + Position = new Vector2(306, 142) }, new Slider { StartTime = 3000, - Position = new Vector2(156,242), - Path = new SliderPath(PathType.Linear, new[] { Vector2.Zero, new Vector2(200,0), }) + Position = new Vector2(156, 242), + Path = new SliderPath(PathType.Linear, new[] { Vector2.Zero, new Vector2(200, 0), }) }, new Spinner { - Position = new Vector2(256,192), + Position = new Vector2(256, 192), StartTime = 7000, EndTime = 9000 } diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs index e93120b321..ed329f02b3 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs @@ -15,7 +15,6 @@ using osu.Game.Rulesets.Osu.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Skinning; - namespace osu.Game.Rulesets.Osu.Mods { public class OsuModHidden : ModHidden, IHidesApproachCircles From 0757044b1571bc5f9f2bec360296814f85a0f408 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 26 Oct 2021 11:42:15 +0900 Subject: [PATCH 08/10] Refactor logic to work --- osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs | 27 ++++++++++++++-------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs index ed329f02b3..c4444bf4f8 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs @@ -49,15 +49,15 @@ namespace osu.Game.Rulesets.Osu.Mods protected override void ApplyIncreasedVisibilityState(DrawableHitObject hitObject, ArmedState state) { - applyHiddenState(hitObject, true, OnlyFadeApproachCircles.Value); + applyHiddenState(hitObject, true); } protected override void ApplyNormalVisibilityState(DrawableHitObject hitObject, ArmedState state) { - applyHiddenState(hitObject, false, OnlyFadeApproachCircles.Value); + applyHiddenState(hitObject, false); } - private void applyHiddenState(DrawableHitObject drawableObject, bool hideApproachCircle, bool hideCirclePiece) + private void applyHiddenState(DrawableHitObject drawableObject, bool increaseVisibility) { if (!(drawableObject is DrawableOsuHitObject drawableOsuObject)) return; @@ -66,6 +66,19 @@ namespace osu.Game.Rulesets.Osu.Mods (double fadeStartTime, double fadeDuration) = getFadeOutParameters(drawableOsuObject); + // process approach circle hiding first (to allow for early return below). + if (!increaseVisibility) + { + if (drawableObject is DrawableHitCircle circle) + { + using (circle.BeginAbsoluteSequence(hitObject.StartTime - hitObject.TimePreempt)) + circle.ApproachCircle.Hide(); + } + } + + if (OnlyFadeApproachCircles.Value) + return; + switch (drawableObject) { case DrawableSliderTail _: @@ -84,17 +97,11 @@ namespace osu.Game.Rulesets.Osu.Mods case DrawableHitCircle circle: Drawable fadeTarget = circle; - if (hideApproachCircle) + if (increaseVisibility) { // only fade the circle piece (not the approach circle) for the increased visibility object. fadeTarget = circle.CirclePiece; } - else - { - // we don't want to see the approach circle - using (circle.BeginAbsoluteSequence(hitObject.StartTime - hitObject.TimePreempt)) - circle.ApproachCircle.Hide(); - } using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) fadeTarget.FadeOut(fadeDuration); From 8b85c78b0defe810b34a324f5a0c6b85bb35e18f Mon Sep 17 00:00:00 2001 From: Roxie Wattz Date: Mon, 25 Oct 2021 20:16:45 -0700 Subject: [PATCH 09/10] Add processing of Spinner approach circles --- osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs index c4444bf4f8..e5cc08c886 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs @@ -74,6 +74,11 @@ namespace osu.Game.Rulesets.Osu.Mods using (circle.BeginAbsoluteSequence(hitObject.StartTime - hitObject.TimePreempt)) circle.ApproachCircle.Hide(); } + else if (drawableObject is DrawableSpinner spinner) + { + spinner.Body.OnSkinChanged += () => hideSpinnerApproachCircle(spinner); + hideSpinnerApproachCircle(spinner); + } } if (OnlyFadeApproachCircles.Value) @@ -123,9 +128,6 @@ namespace osu.Game.Rulesets.Osu.Mods // hide elements we don't care about. // todo: hide background - spinner.Body.OnSkinChanged += () => hideSpinnerApproachCircle(spinner); - hideSpinnerApproachCircle(spinner); - using (spinner.BeginAbsoluteSequence(fadeStartTime)) spinner.FadeOut(fadeDuration); From 1147c6cbfc60584536237a15459b101c248a3e3c Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 26 Oct 2021 19:56:54 +0900 Subject: [PATCH 10/10] Remove unnecessary default value --- osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs index e5cc08c886..e162f805a1 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs @@ -20,7 +20,7 @@ namespace osu.Game.Rulesets.Osu.Mods public class OsuModHidden : ModHidden, IHidesApproachCircles { [SettingSource("Only fade approach circles", "The main object body will not fade when enabled.")] - public Bindable OnlyFadeApproachCircles { get; } = new BindableBool(false); + public Bindable OnlyFadeApproachCircles { get; } = new BindableBool(); public override string Description => @"Play with no approach circles and fading circles/sliders."; public override double ScoreMultiplier => 1.06;