Fix fade in delay for first slider end circle being incorrect when snaking disabled

This commit is contained in:
Dean Herbert 2023-05-02 16:27:17 +09:00
parent e3c51b9652
commit 1a04be15c7
3 changed files with 15 additions and 9 deletions

View File

@ -87,12 +87,15 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
protected override void UpdateInitialTransforms() protected override void UpdateInitialTransforms()
{ {
// When snaking in is enabled, the first end circle needs to be delayed until the snaking completes.
bool delayFadeIn = DrawableSlider.SliderBody!.SnakingIn.Value && HitObject.RepeatIndex == 0;
animDuration = Math.Min(300, HitObject.SpanDuration); animDuration = Math.Min(300, HitObject.SpanDuration);
this.Animate( this
d => d.FadeIn(animDuration), .FadeOut()
d => d.ScaleTo(0.5f).ScaleTo(1f, animDuration * 2, Easing.OutElasticHalf) .Delay(delayFadeIn ? Slider!.TimePreempt / 3f : 0)
); .FadeIn(HitObject.RepeatIndex == 0 ? HitObject.TimeFadeIn : animDuration);
} }
protected override void UpdateHitStateTransforms(ArmedState state) protected override void UpdateHitStateTransforms(ArmedState state)

View File

@ -91,7 +91,13 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
{ {
base.UpdateInitialTransforms(); base.UpdateInitialTransforms();
CirclePiece.FadeInFromZero(HitObject.TimeFadeIn); // When snaking in is enabled, the first end circle needs to be delayed until the snaking completes.
bool delayFadeIn = DrawableSlider.SliderBody!.SnakingIn.Value && HitObject.RepeatIndex == 0;
CirclePiece
.FadeOut()
.Delay(delayFadeIn ? Slider!.TimePreempt / 3f : 0)
.FadeIn(HitObject.TimeFadeIn);
} }
protected override void UpdateHitStateTransforms(ArmedState state) protected override void UpdateHitStateTransforms(ArmedState state)

View File

@ -39,11 +39,8 @@ namespace osu.Game.Rulesets.Osu.Objects
} }
else else
{ {
// taken from osu-stable
const float first_end_circle_preempt_adjust = 2 / 3f;
// The first end circle should fade in with the slider. // The first end circle should fade in with the slider.
TimePreempt = (StartTime - slider.StartTime) + slider.TimePreempt * first_end_circle_preempt_adjust; TimePreempt = (StartTime - slider.StartTime) + slider.TimePreempt;
} }
} }