mirror of
https://github.com/osukey/osukey.git
synced 2025-06-21 19:27:58 +09:00
For some reason, spinner judgements would stack from the top left in an awkward fashion. This patch ensures that the judgement location will always be in the centre of the screen.
95 lines
2.9 KiB
C#
95 lines
2.9 KiB
C#
// 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.
|
|
|
|
using osu.Framework.Allocation;
|
|
using osu.Framework.Graphics;
|
|
using osu.Game.Configuration;
|
|
using osu.Game.Rulesets.Judgements;
|
|
using osu.Game.Rulesets.Scoring;
|
|
using osuTK;
|
|
|
|
namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|
{
|
|
public class DrawableOsuJudgement : DrawableJudgement
|
|
{
|
|
protected SkinnableLighting Lighting { get; private set; }
|
|
|
|
[Resolved]
|
|
private OsuConfigManager config { get; set; }
|
|
|
|
[BackgroundDependencyLoader]
|
|
private void load()
|
|
{
|
|
AddInternal(Lighting = new SkinnableLighting
|
|
{
|
|
Anchor = Anchor.Centre,
|
|
Origin = Anchor.Centre,
|
|
Blending = BlendingParameters.Additive,
|
|
Depth = float.MaxValue,
|
|
Alpha = 0
|
|
});
|
|
}
|
|
|
|
protected override void PrepareForUse()
|
|
{
|
|
base.PrepareForUse();
|
|
|
|
Lighting.ResetAnimation();
|
|
Lighting.SetColourFrom(JudgedObject, Result);
|
|
|
|
if (JudgedObject?.HitObject is OsuHitObject osuObject)
|
|
{
|
|
if (JudgedObject?.HitObject is Spinner)
|
|
{
|
|
Position = osuObject.Position;
|
|
} else
|
|
{
|
|
Position = osuObject.StackedEndPosition;
|
|
}
|
|
Scale = new Vector2(osuObject.Scale);
|
|
}
|
|
}
|
|
|
|
protected override void ApplyHitAnimations()
|
|
{
|
|
bool hitLightingEnabled = config.Get<bool>(OsuSetting.HitLighting);
|
|
|
|
Lighting.Alpha = 0;
|
|
|
|
if (hitLightingEnabled && Lighting.Drawable != null)
|
|
{
|
|
// todo: this animation changes slightly based on new/old legacy skin versions.
|
|
Lighting.ScaleTo(0.8f).ScaleTo(1.2f, 600, Easing.Out);
|
|
Lighting.FadeIn(200).Then().Delay(200).FadeOut(1000);
|
|
|
|
// extend the lifetime to cover lighting fade
|
|
LifetimeEnd = Lighting.LatestTransformEndTime;
|
|
}
|
|
|
|
base.ApplyHitAnimations();
|
|
}
|
|
|
|
protected override Drawable CreateDefaultJudgement(HitResult result) => new OsuJudgementPiece(result);
|
|
|
|
private class OsuJudgementPiece : DefaultJudgementPiece
|
|
{
|
|
public OsuJudgementPiece(HitResult result)
|
|
: base(result)
|
|
{
|
|
}
|
|
|
|
public override void PlayAnimation()
|
|
{
|
|
if (Result != HitResult.Miss)
|
|
{
|
|
JudgementText
|
|
.ScaleTo(new Vector2(0.8f, 1))
|
|
.ScaleTo(new Vector2(1.2f, 1), 1800, Easing.OutQuint);
|
|
}
|
|
|
|
base.PlayAnimation();
|
|
}
|
|
}
|
|
}
|
|
}
|