1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-21 22:53:22 +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)
{
base.UpdateHitStateTransforms(state);
switch (state)
{
case ArmedState.Idle:
// Only for rewind support. Reallows user inputs if swell is rewound from being hit/missed to being idle.
HandleUserInput = true;
break;
case ArmedState.Miss:
this.Delay(300).FadeOut();
break;
case ArmedState.Hit:
const int clear_animation_duration = 1200;
// 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;
this.Delay(660).FadeOut();
break;
}
}

View File

@ -41,64 +41,63 @@ namespace osu.Game.Rulesets.Taiko.Skinning.Legacy
[BackgroundDependencyLoader]
private void load(DrawableHitObject hitObject, ISkinSource skin, SkinManager skinManager)
{
var spinnerCircleProvider = skin.FindProvider(s => s.GetTexture("spinner-circle") != null);
Child = new Container
Children = new Drawable[]
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Children = new Drawable[]
warning = new Sprite
{
warning = new Sprite
{
Texture = skin.GetTexture("spinner-warning"),
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Scale = skin.GetTexture("spinner-warning") != null ? Vector2.One : new Vector2(0.18f),
},
bodyContainer = new Container
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Position = new Vector2(200f, 100f),
Alpha = 0,
Texture = skin.GetTexture("spinner-warning"),
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Scale = skin.GetTexture("spinner-warning") != null ? Vector2.One : new Vector2(0.18f),
},
new Container
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Position = new Vector2(200f, 100f),
Children = new Drawable[]
Children = new Drawable[]
{
bodyContainer = new Container
{
spinnerCircle = new Sprite
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Alpha = 0,
Children = new Drawable[]
{
Texture = skin.GetTexture("spinner-circle"),
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Scale = new Vector2(0.8f),
},
approachCircle = new Sprite
{
Texture = skin.GetTexture("spinner-approachcircle"),
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Scale = new Vector2(1.86f * 0.8f),
},
remainingHitsText = new LegacySpriteText(LegacyFont.Combo)
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Position = new Vector2(0f, 165f),
Scale = Vector2.One,
},
clearAnimation = new Sprite
{
Texture = skin.GetTexture("spinner-osu"),
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Position = new Vector2(0f, -165f),
Scale = new Vector2(0.3f),
Alpha = 0,
},
}
spinnerCircle = new Sprite
{
Texture = skin.GetTexture("spinner-circle"),
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Scale = new Vector2(0.8f),
},
approachCircle = new Sprite
{
Texture = skin.GetTexture("spinner-approachcircle"),
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Scale = new Vector2(1.86f * 0.8f),
},
remainingHitsText = new LegacySpriteText(LegacyFont.Combo)
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Position = new Vector2(0f, 165f),
Scale = Vector2.One,
},
}
},
clearAnimation = new Sprite
{
Texture = skin.GetTexture("spinner-osu"),
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Alpha = 0,
},
},
}
},
};
drawableSwell = (DrawableSwell)hitObject;
@ -110,7 +109,7 @@ namespace osu.Game.Rulesets.Taiko.Skinning.Legacy
private void animateSwellProgress(int numHits, int requiredHits)
{
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
@ -160,9 +159,9 @@ namespace osu.Game.Rulesets.Taiko.Skinning.Legacy
clearAnimation
.FadeIn(clear_fade_in)
.MoveTo(new Vector2(320, 240))
.MoveTo(new Vector2(0, 0))
.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)
.Delay(clear_fade_in * 3)
.FadeOut(clear_fade_in * 2.5);