1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-30 10:02:54 +08:00
osu-lazer/osu.Game.Rulesets.Catch/UI/CatcherTrail.cs

71 lines
2.3 KiB
C#
Raw Normal View History

// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
2022-06-17 15:37:17 +08:00
#nullable disable
2020-12-07 17:12:55 +08:00
using osu.Framework.Graphics;
2021-06-16 15:14:42 +08:00
using osu.Framework.Timing;
using osu.Game.Rulesets.Objects.Pooling;
using osuTK;
namespace osu.Game.Rulesets.Catch.UI
{
2021-06-16 13:01:12 +08:00
/// <summary>
/// A trail of the catcher.
/// It also represents a hyper dash afterimage.
/// </summary>
public class CatcherTrail : PoolableDrawableWithLifetime<CatcherTrailEntry>
{
private readonly SkinnableCatcher body;
2020-12-07 17:12:55 +08:00
public CatcherTrail()
2020-12-07 17:12:55 +08:00
{
Size = new Vector2(Catcher.BASE_SIZE);
Origin = Anchor.TopCentre;
2021-06-14 18:46:48 +08:00
Blending = BlendingParameters.Additive;
2021-06-16 15:14:42 +08:00
InternalChild = body = new SkinnableCatcher
{
// Using a frozen clock because trails should not be animated when the skin has an animated catcher.
// TODO: The animation should be frozen at the animation frame at the time of the trail generation.
Clock = new FramedClock(new ManualClock()),
};
}
protected override void OnApply(CatcherTrailEntry entry)
{
Position = new Vector2(entry.Position, 0);
2021-07-31 07:31:08 +08:00
Scale = entry.Scale;
body.AnimationState.Value = entry.CatcherState;
using (BeginAbsoluteSequence(entry.LifetimeStart, false))
applyTransforms(entry.Animation);
}
protected override void OnFree(CatcherTrailEntry entry)
{
2021-07-31 07:31:08 +08:00
ApplyTransformsAt(double.MinValue);
ClearTransforms();
}
private void applyTransforms(CatcherTrailAnimation animation)
{
switch (animation)
{
case CatcherTrailAnimation.Dashing:
case CatcherTrailAnimation.HyperDashing:
this.FadeTo(0.4f).FadeOut(800, Easing.OutQuint);
break;
2021-08-02 14:08:42 +08:00
case CatcherTrailAnimation.HyperDashAfterImage:
this.MoveToOffset(new Vector2(0, -10), 1200, Easing.In);
this.ScaleTo(Scale * 0.95f).ScaleTo(Scale * 1.2f, 1200, Easing.In);
this.FadeOut(1200);
break;
}
Expire();
}
}
}