mirror of
https://github.com/ppy/osu.git
synced 2024-11-06 09:07:25 +08:00
Merge pull request #1840 from Aergwyn/fix-slider-follow-circle
Fix slider follow circle instantly disappearing on slider ends
This commit is contained in:
commit
8c2cc4c85b
@ -1 +1 @@
|
|||||||
Subproject commit 6134dafccb3368dac96d837537325c04b89fb8ee
|
Subproject commit 8366ab17059b8964b0fd6d1ef4f07b0f3412c2ec
|
@ -158,14 +158,23 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
protected override void UpdateCurrentState(ArmedState state)
|
protected override void UpdateCurrentState(ArmedState state)
|
||||||
{
|
{
|
||||||
Ball.FadeIn();
|
Ball.FadeIn();
|
||||||
|
Ball.ScaleTo(HitObject.Scale);
|
||||||
|
|
||||||
using (BeginDelayedSequence(slider.Duration, true))
|
using (BeginDelayedSequence(slider.Duration, true))
|
||||||
{
|
{
|
||||||
Body.FadeOut(160);
|
const float fade_out_time = 450;
|
||||||
Ball.FadeOut(160);
|
|
||||||
|
|
||||||
this.FadeOut(800)
|
// intentionally pile on an extra FadeOut to make it happen much faster.
|
||||||
.Expire();
|
Ball.FadeOut(fade_out_time / 4, Easing.Out);
|
||||||
|
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
case ArmedState.Hit:
|
||||||
|
Ball.ScaleTo(HitObject.Scale * 1.4f, fade_out_time, Easing.Out);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.FadeOut(fade_out_time, Easing.OutQuint).Expire();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
}
|
}
|
||||||
|
|
||||||
private readonly Slider slider;
|
private readonly Slider slider;
|
||||||
private readonly Box follow;
|
public readonly Box FollowCircle;
|
||||||
private readonly Box ball;
|
private readonly Box ball;
|
||||||
|
|
||||||
public SliderBall(Slider slider)
|
public SliderBall(Slider slider)
|
||||||
@ -46,7 +46,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
|
|
||||||
Children = new Drawable[]
|
Children = new Drawable[]
|
||||||
{
|
{
|
||||||
follow = new Box
|
FollowCircle = new Box
|
||||||
{
|
{
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
@ -101,11 +101,11 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
// If the current time is between the start and end of the slider, we should track mouse input regardless of the cursor position.
|
// If the current time is between the start and end of the slider, we should track mouse input regardless of the cursor position.
|
||||||
public override bool ReceiveMouseInputAt(Vector2 screenSpacePos) => canCurrentlyTrack || base.ReceiveMouseInputAt(screenSpacePos);
|
public override bool ReceiveMouseInputAt(Vector2 screenSpacePos) => canCurrentlyTrack || base.ReceiveMouseInputAt(screenSpacePos);
|
||||||
|
|
||||||
public override void ClearTransforms(bool propagateChildren = false, string targetMember = null)
|
public override void ClearTransformsAfter(double time, bool propagateChildren = false, string targetMember = null)
|
||||||
{
|
{
|
||||||
// Consider the case of rewinding - children's transforms are handled internally, so propagating down
|
// Consider the case of rewinding - children's transforms are handled internally, so propagating down
|
||||||
// any further will cause weirdness with the Tracking bool below. Let's not propagate further at this point.
|
// any further will cause weirdness with the Tracking bool below. Let's not propagate further at this point.
|
||||||
base.ClearTransforms(false, targetMember);
|
base.ClearTransformsAfter(time, false, targetMember);
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool tracking;
|
private bool tracking;
|
||||||
@ -118,8 +118,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
return;
|
return;
|
||||||
tracking = value;
|
tracking = value;
|
||||||
|
|
||||||
follow.ScaleTo(tracking ? 2.8f : 1, 300, Easing.OutQuint);
|
FollowCircle.ScaleTo(tracking ? 2.8f : 1, 300, Easing.OutQuint);
|
||||||
follow.FadeTo(tracking ? 0.2f : 0, 300, Easing.OutQuint);
|
FollowCircle.FadeTo(tracking ? 0.2f : 0, 300, Easing.OutQuint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,11 +129,14 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
{
|
{
|
||||||
base.Update();
|
base.Update();
|
||||||
|
|
||||||
// Make sure to use the base version of ReceiveMouseInputAt so that we correctly check the position.
|
if (Time.Current < slider.EndTime)
|
||||||
Tracking = canCurrentlyTrack
|
{
|
||||||
&& lastState != null
|
// Make sure to use the base version of ReceiveMouseInputAt so that we correctly check the position.
|
||||||
&& base.ReceiveMouseInputAt(lastState.Mouse.NativeState.Position)
|
Tracking = canCurrentlyTrack
|
||||||
&& ((Parent as DrawableSlider)?.OsuActionInputManager?.PressedActions.Any(x => x == OsuAction.LeftButton || x == OsuAction.RightButton) ?? false);
|
&& lastState != null
|
||||||
|
&& base.ReceiveMouseInputAt(lastState.Mouse.NativeState.Position)
|
||||||
|
&& ((Parent as DrawableSlider)?.OsuActionInputManager?.PressedActions.Any(x => x == OsuAction.LeftButton || x == OsuAction.RightButton) ?? false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateProgress(double progress, int repeat)
|
public void UpdateProgress(double progress, int repeat)
|
||||||
@ -141,4 +144,4 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
Position = slider.Curve.PositionAt(progress);
|
Position = slider.Curve.PositionAt(progress);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user