Reworking the Ouendan 2 Hidden code AGAIN

Not finished. Will be finished in a later commit.
This commit is contained in:
Roxie Wattz 2021-10-25 14:09:22 -07:00
parent 7a92c7ab7e
commit c9a2c6c031

View File

@ -50,15 +50,15 @@ namespace osu.Game.Rulesets.Osu.Mods
protected override void ApplyIncreasedVisibilityState(DrawableHitObject hitObject, ArmedState state) protected override void ApplyIncreasedVisibilityState(DrawableHitObject hitObject, ArmedState state)
{ {
applyState(hitObject, true); applyHiddenState(hitObject, true, OnlyFadeApproachCircles.Value);
} }
protected override void ApplyNormalVisibilityState(DrawableHitObject hitObject, ArmedState state) 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)) if (!(drawableObject is DrawableOsuHitObject drawableOsuObject))
return; return;
@ -67,90 +67,63 @@ namespace osu.Game.Rulesets.Osu.Mods
(double fadeStartTime, double fadeDuration) = getFadeOutParameters(drawableOsuObject); (double fadeStartTime, double fadeDuration) = getFadeOutParameters(drawableOsuObject);
if (!OnlyFadeApproachCircles.Value) switch (drawableObject)
{ {
switch (drawableObject) case DrawableSliderTail _:
{ using (drawableObject.BeginAbsoluteSequence(fadeStartTime))
case DrawableSliderTail _: drawableObject.FadeOut(fadeDuration);
using (drawableObject.BeginAbsoluteSequence(fadeStartTime))
drawableObject.FadeOut(fadeDuration);
break; break;
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.
sliderRepeat.CirclePiece.FadeOut(fadeDuration); sliderRepeat.CirclePiece.FadeOut(fadeDuration);
break; break;
case DrawableHitCircle circle: case DrawableHitCircle circle:
Drawable fadeTarget = circle; Drawable fadeTarget = circle;
if (increaseVisibility) if (hideApproachCircle)
{ {
// 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.
fadeTarget = circle.CirclePiece; fadeTarget = circle.CirclePiece;
} }
else else
{ {
// we don't want to see the approach circle // we don't want to see the approach circle
using (circle.BeginAbsoluteSequence(hitObject.StartTime - hitObject.TimePreempt)) using (circle.BeginAbsoluteSequence(hitObject.StartTime - hitObject.TimePreempt))
circle.ApproachCircle.Hide(); circle.ApproachCircle.Hide();
} }
using (drawableObject.BeginAbsoluteSequence(fadeStartTime)) using (drawableObject.BeginAbsoluteSequence(fadeStartTime))
fadeTarget.FadeOut(fadeDuration); fadeTarget.FadeOut(fadeDuration);
break; break;
case DrawableSlider slider: case DrawableSlider slider:
using (slider.BeginAbsoluteSequence(fadeStartTime)) using (slider.BeginAbsoluteSequence(fadeStartTime))
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))
sliderTick.FadeOut(fadeDuration); sliderTick.FadeOut(fadeDuration);
break; break;
case DrawableSpinner spinner: case DrawableSpinner spinner:
// hide elements we don't care about. // hide elements we don't care about.
// todo: hide background // todo: hide background
spinner.Body.OnSkinChanged += () => hideSpinnerApproachCircle(spinner); spinner.Body.OnSkinChanged += () => hideSpinnerApproachCircle(spinner);
hideSpinnerApproachCircle(spinner); hideSpinnerApproachCircle(spinner);
using (spinner.BeginAbsoluteSequence(fadeStartTime)) using (spinner.BeginAbsoluteSequence(fadeStartTime))
spinner.FadeOut(fadeDuration); 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;
}
} }
} }