From e42fa7205b7f160376ebdffcd498abefb5e0a838 Mon Sep 17 00:00:00 2001 From: Aergwyn Date: Wed, 27 Dec 2017 21:23:56 +0100 Subject: [PATCH] adjust spinner sequence to the new fadeout speed --- osu.Game.Rulesets.Osu/Mods/OsuMod.cs | 23 ++++++++++++++++--- .../Objects/Drawables/DrawableSpinner.cs | 22 +++++++++--------- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuMod.cs b/osu.Game.Rulesets.Osu/Mods/OsuMod.cs index 8c8e8e7d3a..318ccab2f1 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuMod.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuMod.cs @@ -70,10 +70,10 @@ private void customSequence(DrawableHitObject drawable, ArmedState state) 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); + var sliderDuration = slider.Slider.EndTime - fadeOutTime; // new duration from fade in to end of the slider + slider.Body.FadeOut(sliderDuration); // delay a bit less to let the sliderball fade out peacefully instead of having a hard cut - using (slider.BeginDelayedSequence(duration - fadeOut, true)) + using (slider.BeginDelayedSequence(sliderDuration - fadeOut, true)) { slider.Ball.FadeOut(fadeOut); slider.Delay(fadeOut).Expire(); @@ -84,6 +84,23 @@ private void customSequence(DrawableHitObject drawable, ArmedState state) spinner.Disc.FadeOut(); spinner.Ticks.FadeOut(); spinner.Background.FadeOut(); + + using (spinner.BeginAbsoluteSequence(fadeOutTime, true)) + { + var spinnerDuration = spinner.Spinner.EndTime - fadeOutTime; // new duration from fade in to end of the spinner + var sequence = spinner.Delay(spinnerDuration).FadeOut(fadeOut); + // speed up the end sequence accordingly + switch (state) + { + case ArmedState.Hit: + sequence.ScaleTo(spinner.Scale * 1.2f, fadeOut * 2, Easing.Out); + break; + case ArmedState.Miss: + sequence.ScaleTo(spinner.Scale * 0.8f, fadeOut * 2, Easing.Out); + break; + } + sequence.Expire(); + } break; } } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs index 9e80e3ccd1..57aa0f2c09 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs @@ -18,7 +18,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables { public class DrawableSpinner : DrawableOsuHitObject { - private readonly Spinner spinner; + public readonly Spinner Spinner; public readonly SpinnerDisc Disc; public readonly SpinnerTicks Ticks; @@ -49,7 +49,7 @@ public DrawableSpinner(Spinner s) : base(s) // we are slightly bigger than our parent, to clip the top and bottom of the circle Height = 1.3f; - spinner = s; + Spinner = s; Children = new Drawable[] { @@ -90,7 +90,7 @@ public DrawableSpinner(Spinner s) : base(s) Anchor = Anchor.Centre, Origin = Anchor.Centre, }, - Disc = new SpinnerDisc(spinner) + Disc = new SpinnerDisc(Spinner) { Scale = Vector2.Zero, Anchor = Anchor.Centre, @@ -114,7 +114,7 @@ public DrawableSpinner(Spinner s) : base(s) }; } - public float Progress => MathHelper.Clamp(Disc.RotationAbsolute / 360 / spinner.SpinsRequired, 0, 1); + public float Progress => MathHelper.Clamp(Disc.RotationAbsolute / 360 / Spinner.SpinsRequired, 0, 1); protected override void CheckForJudgements(bool userTriggered, double timeOffset) { @@ -135,7 +135,7 @@ protected override void CheckForJudgements(bool userTriggered, double timeOffset glow.FadeColour(completeColour, duration); } - if (!userTriggered && Time.Current >= spinner.EndTime) + if (!userTriggered && Time.Current >= Spinner.EndTime) { if (Progress >= 1) AddJudgement(new OsuJudgement { Result = HitResult.Great }); @@ -143,7 +143,7 @@ protected override void CheckForJudgements(bool userTriggered, double timeOffset AddJudgement(new OsuJudgement { Result = HitResult.Good }); else if (Progress > .75) AddJudgement(new OsuJudgement { Result = HitResult.Meh }); - else if (Time.Current >= spinner.EndTime) + else if (Time.Current >= Spinner.EndTime) AddJudgement(new OsuJudgement { Result = HitResult.Miss }); } } @@ -179,7 +179,7 @@ protected override void UpdateAfterChildren() Ticks.Rotation = Disc.Rotation; spmCounter.SetRotation(Disc.RotationAbsolute); - float relativeCircleScale = spinner.Scale * circle.DrawHeight / mainContainer.DrawHeight; + float relativeCircleScale = Spinner.Scale * circle.DrawHeight / mainContainer.DrawHeight; Disc.ScaleTo(relativeCircleScale + (1 - relativeCircleScale) * Progress, 200, Easing.OutQuint); symbol.RotateTo(Disc.Rotation / 2, 500, Easing.OutQuint); @@ -189,22 +189,22 @@ protected override void UpdatePreemptState() { base.UpdatePreemptState(); - circleContainer.ScaleTo(spinner.Scale * 0.3f); - circleContainer.ScaleTo(spinner.Scale, TIME_PREEMPT / 1.4f, Easing.OutQuint); + circleContainer.ScaleTo(Spinner.Scale * 0.3f); + circleContainer.ScaleTo(Spinner.Scale, TIME_PREEMPT / 1.4f, Easing.OutQuint); Disc.RotateTo(-720); symbol.RotateTo(-720); mainContainer .ScaleTo(0) - .ScaleTo(spinner.Scale * circle.DrawHeight / DrawHeight * 1.4f, TIME_PREEMPT - 150, Easing.OutQuint) + .ScaleTo(Spinner.Scale * circle.DrawHeight / DrawHeight * 1.4f, TIME_PREEMPT - 150, Easing.OutQuint) .Then() .ScaleTo(1, 500, Easing.OutQuint); } protected override void UpdateCurrentState(ArmedState state) { - var sequence = this.Delay(spinner.Duration).FadeOut(160); + var sequence = this.Delay(Spinner.Duration).FadeOut(160); switch (state) {