Added the ouendan 2 style hidden

Added as an option for nostalgia nerds like me
This commit is contained in:
Roxie Wattz 2021-10-24 21:34:40 -07:00
parent 00d0221fd5
commit 6b9e8dbd2e

View File

@ -5,6 +5,8 @@ using System;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Bindables;
using osu.Game.Configuration;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Objects; 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.Objects;
using osu.Game.Rulesets.Osu.Skinning; using osu.Game.Rulesets.Osu.Skinning;
namespace osu.Game.Rulesets.Osu.Mods namespace osu.Game.Rulesets.Osu.Mods
{ {
public class OsuModHidden : ModHidden, IHidesApproachCircles public class OsuModHidden : ModHidden, IHidesApproachCircles
{ {
[SettingSource("Don't fade out hit circles", "This makes the hidden mod only remove approach circles.")]
public Bindable<bool> NoHitCircles { get; } = new BindableBool(false);
public override string Description => @"Play with no approach circles and fading circles/sliders."; public override string Description => @"Play with no approach circles and fading circles/sliders.";
public override double ScoreMultiplier => 1.06; public override double ScoreMultiplier => 1.06;
@ -65,6 +71,7 @@ namespace osu.Game.Rulesets.Osu.Mods
{ {
case DrawableSliderTail _: case DrawableSliderTail _:
using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) using (drawableObject.BeginAbsoluteSequence(fadeStartTime))
if (!NoHitCircles.Value)
drawableObject.FadeOut(fadeDuration); drawableObject.FadeOut(fadeDuration);
break; break;
@ -72,6 +79,7 @@ namespace osu.Game.Rulesets.Osu.Mods
case DrawableSliderRepeat sliderRepeat: case DrawableSliderRepeat sliderRepeat:
using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) using (drawableObject.BeginAbsoluteSequence(fadeStartTime))
// only apply to circle piece reverse arrow is not affected by hidden. // only apply to circle piece reverse arrow is not affected by hidden.
if (!NoHitCircles.Value)
sliderRepeat.CirclePiece.FadeOut(fadeDuration); sliderRepeat.CirclePiece.FadeOut(fadeDuration);
break; break;
@ -82,6 +90,7 @@ namespace osu.Game.Rulesets.Osu.Mods
if (increaseVisibility) if (increaseVisibility)
{ {
// only fade the circle piece (not the approach circle) for the increased visibility object. // only fade the circle piece (not the approach circle) for the increased visibility object.
if (!NoHitCircles.Value)
fadeTarget = circle.CirclePiece; fadeTarget = circle.CirclePiece;
} }
else else
@ -92,17 +101,20 @@ namespace osu.Game.Rulesets.Osu.Mods
} }
using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) using (drawableObject.BeginAbsoluteSequence(fadeStartTime))
if (!NoHitCircles.Value)
fadeTarget.FadeOut(fadeDuration); fadeTarget.FadeOut(fadeDuration);
break; break;
case DrawableSlider slider: case DrawableSlider slider:
using (slider.BeginAbsoluteSequence(fadeStartTime)) using (slider.BeginAbsoluteSequence(fadeStartTime))
if (!NoHitCircles.Value)
slider.Body.FadeOut(fadeDuration, Easing.Out); slider.Body.FadeOut(fadeDuration, Easing.Out);
break; break;
case DrawableSliderTick sliderTick: case DrawableSliderTick sliderTick:
using (sliderTick.BeginAbsoluteSequence(fadeStartTime)) using (sliderTick.BeginAbsoluteSequence(fadeStartTime))
if (!NoHitCircles.Value)
sliderTick.FadeOut(fadeDuration); sliderTick.FadeOut(fadeDuration);
break; break;