1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-23 06:13:13 +08:00

further adjust swell behavior

The outstanding visual issues of the clear animation is fixed. The
HandleUserInput state management is removed as it no longer seems
necessary.
This commit is contained in:
Nathan Du 2025-02-01 13:34:52 +08:00
parent a62a84a30f
commit e794389fe8
2 changed files with 60 additions and 63 deletions

View File

@ -158,21 +158,19 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables
protected override void UpdateHitStateTransforms(ArmedState state) protected override void UpdateHitStateTransforms(ArmedState state)
{ {
base.UpdateHitStateTransforms(state);
switch (state) switch (state)
{ {
case ArmedState.Idle: case ArmedState.Idle:
// Only for rewind support. Reallows user inputs if swell is rewound from being hit/missed to being idle.
HandleUserInput = true;
break; break;
case ArmedState.Miss: case ArmedState.Miss:
this.Delay(300).FadeOut();
break;
case ArmedState.Hit: case ArmedState.Hit:
const int clear_animation_duration = 1200; this.Delay(660).FadeOut();
// Postpone drawable hitobject expiration until it has animated/faded out. Inputs on the object are disallowed during this delay.
LifetimeEnd = Time.Current + clear_animation_duration;
HandleUserInput = false;
break; break;
} }
} }

View File

@ -41,13 +41,6 @@ namespace osu.Game.Rulesets.Taiko.Skinning.Legacy
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(DrawableHitObject hitObject, ISkinSource skin, SkinManager skinManager) private void load(DrawableHitObject hitObject, ISkinSource skin, SkinManager skinManager)
{ {
var spinnerCircleProvider = skin.FindProvider(s => s.GetTexture("spinner-circle") != null);
Child = new Container
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Children = new Drawable[] Children = new Drawable[]
{ {
warning = new Sprite warning = new Sprite
@ -57,11 +50,18 @@ namespace osu.Game.Rulesets.Taiko.Skinning.Legacy
Origin = Anchor.Centre, Origin = Anchor.Centre,
Scale = skin.GetTexture("spinner-warning") != null ? Vector2.One : new Vector2(0.18f), Scale = skin.GetTexture("spinner-warning") != null ? Vector2.One : new Vector2(0.18f),
}, },
bodyContainer = new Container new Container
{ {
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
Position = new Vector2(200f, 100f), Position = new Vector2(200f, 100f),
Children = new Drawable[]
{
bodyContainer = new Container
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Alpha = 0, Alpha = 0,
Children = new Drawable[] Children = new Drawable[]
@ -87,18 +87,17 @@ namespace osu.Game.Rulesets.Taiko.Skinning.Legacy
Position = new Vector2(0f, 165f), Position = new Vector2(0f, 165f),
Scale = Vector2.One, Scale = Vector2.One,
}, },
}
},
clearAnimation = new Sprite clearAnimation = new Sprite
{ {
Texture = skin.GetTexture("spinner-osu"), Texture = skin.GetTexture("spinner-osu"),
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
Position = new Vector2(0f, -165f),
Scale = new Vector2(0.3f),
Alpha = 0, Alpha = 0,
}, },
}
}, },
} },
}; };
drawableSwell = (DrawableSwell)hitObject; drawableSwell = (DrawableSwell)hitObject;
@ -110,7 +109,7 @@ namespace osu.Game.Rulesets.Taiko.Skinning.Legacy
private void animateSwellProgress(int numHits, int requiredHits) private void animateSwellProgress(int numHits, int requiredHits)
{ {
remainingHitsText.Text = $"{requiredHits - numHits}"; remainingHitsText.Text = $"{requiredHits - numHits}";
remainingHitsText.ScaleTo(1.6f - 0.6f * ((float)numHits / requiredHits), 60, Easing.OutQuad); remainingHitsText.ScaleTo(1.6f - (0.6f * ((float)numHits / requiredHits)), 60, Easing.OutQuad);
spinnerCircle.ClearTransforms(); spinnerCircle.ClearTransforms();
spinnerCircle spinnerCircle
@ -160,9 +159,9 @@ namespace osu.Game.Rulesets.Taiko.Skinning.Legacy
clearAnimation clearAnimation
.FadeIn(clear_fade_in) .FadeIn(clear_fade_in)
.MoveTo(new Vector2(320, 240)) .MoveTo(new Vector2(0, 0))
.ScaleTo(0.4f) .ScaleTo(0.4f)
.MoveTo(new Vector2(320, 150), clear_fade_in * 2, Easing.OutQuad) .MoveTo(new Vector2(0, -90), clear_fade_in * 2, Easing.OutQuad)
.ScaleTo(1f, clear_fade_in * 2, Easing.Out) .ScaleTo(1f, clear_fade_in * 2, Easing.Out)
.Delay(clear_fade_in * 3) .Delay(clear_fade_in * 3)
.FadeOut(clear_fade_in * 2.5); .FadeOut(clear_fade_in * 2.5);