1
0
mirror of https://github.com/ppy/osu.git synced 2025-03-22 21:00:33 +08:00

fix circles and slider sequences

+ minor cleanup
This commit is contained in:
Aergwyn 2017-12-27 21:12:02 +01:00
parent 4c2554595e
commit 7d29c076d2
2 changed files with 17 additions and 13 deletions

View File

@ -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();

View File

@ -35,16 +35,13 @@ namespace osu.Game.Rulesets.Osu.UI
protected override DrawableHitObject<OsuHitObject> 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;
}