diff --git a/osu.Game.Rulesets.Osu/Mods/OsuMod.cs b/osu.Game.Rulesets.Osu/Mods/OsuMod.cs index 6b8f30eaec..8c8e8e7d3a 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuMod.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuMod.cs @@ -48,7 +48,6 @@ namespace osu.Game.Rulesets.Osu.Mods if (!(drawable is DrawableOsuHitObject d)) return; - //var duration = (d.HitObject as IHasEndTime)?.Duration ?? 0; var fadeInTime = d.HitObject.StartTime - preEmpt; var fadeIn = d.HitObject.StartTime - preEmpt * fade_in_speed_multiplier - fadeInTime; var fadeOutTime = fadeInTime + fadeIn; @@ -56,22 +55,30 @@ namespace osu.Game.Rulesets.Osu.Mods d.FadeIn = fadeIn; - using (drawable.BeginAbsoluteSequence(fadeInTime)) + using (drawable.BeginAbsoluteSequence(fadeInTime, true)) { switch (drawable) { case DrawableHitCircle circle: circle.ApproachCircle.FadeOut(); + // prolong the hitcircle long enough so misses are still possible circle.LifetimeEnd = circle.HitObject.StartTime + Math.Max(fadeOut, circle.HitObject.HitWindowFor(HitResult.Miss)); - - using (circle.BeginDelayedSequence(fadeIn)) - circle.FadeOut(fadeOut); + circle.FadeIn(fadeIn).Then().FadeOut(fadeOut); // override fade in as it somehow gets cut otherwise break; case DrawableSlider slider: slider.InitialCircle.ApplyCustomUpdateState += customSequence; - //using (slider.BeginDelayedSequence(fadeIn)) - // slider.Body.FadeOut(duration, Easing.Out); + using (slider.BeginAbsoluteSequence(fadeOutTime, true)) + { + var duration = slider.Slider.EndTime - fadeOutTime; // new duration from fade in to end of the slider + slider.Body.FadeOut(duration); + // delay a bit less to let the sliderball fade out peacefully instead of having a hard cut + using (slider.BeginDelayedSequence(duration - fadeOut, true)) + { + slider.Ball.FadeOut(fadeOut); + slider.Delay(fadeOut).Expire(); + } + } break; case DrawableSpinner spinner: spinner.Disc.FadeOut(); diff --git a/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs b/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs index 7c9cbd63fc..f37b87e533 100644 --- a/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs +++ b/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs @@ -35,16 +35,13 @@ namespace osu.Game.Rulesets.Osu.UI protected override DrawableHitObject GetVisualRepresentation(OsuHitObject h) { - var circle = h as HitCircle; - if (circle != null) + if (h is HitCircle circle) return new DrawableHitCircle(circle); - var slider = h as Slider; - if (slider != null) + if (h is Slider slider) return new DrawableSlider(slider); - var spinner = h as Spinner; - if (spinner != null) + if (h is Spinner spinner) return new DrawableSpinner(spinner); return null; }