diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderRepeat.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderRepeat.cs
index 0c8e5b765f..c6d4f7c4ca 100644
--- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderRepeat.cs
+++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderRepeat.cs
@@ -34,8 +34,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
private Drawable scaleContainer;
- public override bool DisplayResult => false;
-
public DrawableSliderRepeat()
: base(null)
{
diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs
index 60bad5d4a7..c4731118a1 100644
--- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs
+++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs
@@ -24,11 +24,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
protected DrawableSlider DrawableSlider => (DrawableSlider)ParentHitObject;
- ///
- /// The judgement text is provided by the .
- ///
- public override bool DisplayResult => false;
-
///
/// Whether the hit samples only play on successful hits.
/// If false, the hit samples will also play on misses.
diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs
index cb323f4ac7..d64fb0bcc6 100644
--- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs
+++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs
@@ -20,8 +20,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
private const float default_tick_size = 16;
- public override bool DisplayResult => false;
-
protected DrawableSlider DrawableSlider => (DrawableSlider)ParentHitObject;
private SkinnableDrawable scaleContainer;
diff --git a/osu.Game.Rulesets.Osu/Scoring/OsuHitWindows.cs b/osu.Game.Rulesets.Osu/Scoring/OsuHitWindows.cs
index fd86e0eeda..5b2c95b536 100644
--- a/osu.Game.Rulesets.Osu/Scoring/OsuHitWindows.cs
+++ b/osu.Game.Rulesets.Osu/Scoring/OsuHitWindows.cs
@@ -28,6 +28,8 @@ namespace osu.Game.Rulesets.Osu.Scoring
case HitResult.Ok:
case HitResult.Meh:
case HitResult.Miss:
+ case HitResult.LargeTickMiss:
+ case HitResult.IgnoreMiss:
return true;
}
diff --git a/osu.Game.Rulesets.Osu/Skinning/Argon/ArgonJudgementPiece.cs b/osu.Game.Rulesets.Osu/Skinning/Argon/ArgonJudgementPiece.cs
index 6f55d93eff..94766cb077 100644
--- a/osu.Game.Rulesets.Osu/Skinning/Argon/ArgonJudgementPiece.cs
+++ b/osu.Game.Rulesets.Osu/Skinning/Argon/ArgonJudgementPiece.cs
@@ -62,25 +62,23 @@ namespace osu.Game.Rulesets.Osu.Skinning.Argon
///
public virtual void PlayAnimation()
{
- switch (Result)
+ if (Result.IsHit())
{
- default:
- JudgementText
- .FadeInFromZero(300, Easing.OutQuint)
- .ScaleTo(Vector2.One)
- .ScaleTo(new Vector2(1.2f), 1800, Easing.OutQuint);
- break;
+ JudgementText
+ .FadeInFromZero(300, Easing.OutQuint)
+ .ScaleTo(Vector2.One)
+ .ScaleTo(new Vector2(1.2f), 1800, Easing.OutQuint);
+ }
+ else
+ {
+ this.ScaleTo(1.6f);
+ this.ScaleTo(1, 100, Easing.In);
- case HitResult.Miss:
- this.ScaleTo(1.6f);
- this.ScaleTo(1, 100, Easing.In);
+ this.MoveTo(Vector2.Zero);
+ this.MoveToOffset(new Vector2(0, 100), 800, Easing.InQuint);
- this.MoveTo(Vector2.Zero);
- this.MoveToOffset(new Vector2(0, 100), 800, Easing.InQuint);
-
- this.RotateTo(0);
- this.RotateTo(40, 800, Easing.InQuint);
- break;
+ this.RotateTo(0);
+ this.RotateTo(40, 800, Easing.InQuint);
}
this.FadeOutFromOne(800);
diff --git a/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs b/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs
index 15ca0a90de..3f60ce3610 100644
--- a/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs
+++ b/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs
@@ -170,7 +170,10 @@ namespace osu.Game.Rulesets.Osu.UI
if (!judgedObject.DisplayResult || !DisplayJudgements.Value)
return;
- DrawableOsuJudgement explosion = poolDictionary[result.Type].Get(doj => doj.Apply(result, judgedObject));
+ if (!poolDictionary.TryGetValue(result.Type, out var pool))
+ return;
+
+ DrawableOsuJudgement explosion = pool.Get(doj => doj.Apply(result, judgedObject));
judgementLayer.Add(explosion);
diff --git a/osu.Game/Graphics/OsuColour.cs b/osu.Game/Graphics/OsuColour.cs
index a417164e27..caa2037691 100644
--- a/osu.Game/Graphics/OsuColour.cs
+++ b/osu.Game/Graphics/OsuColour.cs
@@ -77,6 +77,7 @@ namespace osu.Game.Graphics
{
case HitResult.SmallTickMiss:
case HitResult.LargeTickMiss:
+ case HitResult.IgnoreMiss:
case HitResult.Miss:
case HitResult.ComboBreak:
return Red;
diff --git a/osu.Game/Rulesets/Judgements/DefaultJudgementPiece.cs b/osu.Game/Rulesets/Judgements/DefaultJudgementPiece.cs
index d5f586dc35..3c5e37f91c 100644
--- a/osu.Game/Rulesets/Judgements/DefaultJudgementPiece.cs
+++ b/osu.Game/Rulesets/Judgements/DefaultJudgementPiece.cs
@@ -38,18 +38,16 @@ namespace osu.Game.Rulesets.Judgements
///
public virtual void PlayAnimation()
{
- switch (Result)
+ if (Result != HitResult.None && !Result.IsHit())
{
- case HitResult.Miss:
- this.ScaleTo(1.6f);
- this.ScaleTo(1, 100, Easing.In);
+ this.ScaleTo(1.6f);
+ this.ScaleTo(1, 100, Easing.In);
- this.MoveTo(Vector2.Zero);
- this.MoveToOffset(new Vector2(0, 100), 800, Easing.InQuint);
+ this.MoveTo(Vector2.Zero);
+ this.MoveToOffset(new Vector2(0, 100), 800, Easing.InQuint);
- this.RotateTo(0);
- this.RotateTo(40, 800, Easing.InQuint);
- break;
+ this.RotateTo(0);
+ this.RotateTo(40, 800, Easing.InQuint);
}
this.FadeOutFromOne(800);
diff --git a/osu.Game/Rulesets/Judgements/DrawableJudgement.cs b/osu.Game/Rulesets/Judgements/DrawableJudgement.cs
index 15434fcc04..b4686c52f3 100644
--- a/osu.Game/Rulesets/Judgements/DrawableJudgement.cs
+++ b/osu.Game/Rulesets/Judgements/DrawableJudgement.cs
@@ -133,12 +133,11 @@ namespace osu.Game.Rulesets.Judgements
case HitResult.None:
break;
- case HitResult.Miss:
- ApplyMissAnimations();
- break;
-
default:
- ApplyHitAnimations();
+ if (Result.Type.IsHit())
+ ApplyHitAnimations();
+ else
+ ApplyMissAnimations();
break;
}
diff --git a/osu.Game/Rulesets/Scoring/HitResult.cs b/osu.Game/Rulesets/Scoring/HitResult.cs
index 9705421571..b490501021 100644
--- a/osu.Game/Rulesets/Scoring/HitResult.cs
+++ b/osu.Game/Rulesets/Scoring/HitResult.cs
@@ -86,6 +86,7 @@ namespace osu.Game.Rulesets.Scoring
/// Indicates a large tick miss.
///
[EnumMember(Value = "large_tick_miss")]
+ [Description(@"x")]
[Order(10)]
LargeTickMiss,
@@ -117,6 +118,7 @@ namespace osu.Game.Rulesets.Scoring
/// Indicates a miss that should be ignored for scoring purposes.
///
[EnumMember(Value = "ignore_miss")]
+ [Description("x")]
[Order(13)]
IgnoreMiss,
diff --git a/osu.Game/Skinning/LegacyJudgementPieceNew.cs b/osu.Game/Skinning/LegacyJudgementPieceNew.cs
index 9b1ff9b22f..a93c48ba63 100644
--- a/osu.Game/Skinning/LegacyJudgementPieceNew.cs
+++ b/osu.Game/Skinning/LegacyJudgementPieceNew.cs
@@ -50,7 +50,7 @@ namespace osu.Game.Skinning
});
}
- if (result != HitResult.Miss)
+ if (result.IsHit())
{
//new judgement shows old as a temporary effect
AddInternal(temporaryOldStyle = new LegacyJudgementPieceOld(result, createMainDrawable, 1.05f, true)
diff --git a/osu.Game/Skinning/LegacyJudgementPieceOld.cs b/osu.Game/Skinning/LegacyJudgementPieceOld.cs
index 082d0e4a67..5381cfc050 100644
--- a/osu.Game/Skinning/LegacyJudgementPieceOld.cs
+++ b/osu.Game/Skinning/LegacyJudgementPieceOld.cs
@@ -52,39 +52,35 @@ namespace osu.Game.Skinning
if (animation?.FrameCount > 1 && !forceTransforms)
return;
- switch (result)
+ if (result.IsHit())
{
- case HitResult.Miss:
- this.ScaleTo(1.6f);
- this.ScaleTo(1, 100, Easing.In);
+ this.ScaleTo(0.6f).Then()
+ .ScaleTo(1.1f, fade_in_length * 0.8f).Then() // t = 0.8
+ .Delay(fade_in_length * 0.2f) // t = 1.0
+ .ScaleTo(0.9f, fade_in_length * 0.2f).Then() // t = 1.2
+ // stable dictates scale of 0.9->1 over time 1.0 to 1.4, but we are already at 1.2.
+ // so we need to force the current value to be correct at 1.2 (0.95) then complete the
+ // second half of the transform.
+ .ScaleTo(0.95f).ScaleTo(finalScale, fade_in_length * 0.2f); // t = 1.4
+ }
+ else
+ {
+ this.ScaleTo(1.6f);
+ this.ScaleTo(1, 100, Easing.In);
- decimal? legacyVersion = skin.GetConfig(SkinConfiguration.LegacySetting.Version)?.Value;
+ decimal? legacyVersion = skin.GetConfig(SkinConfiguration.LegacySetting.Version)?.Value;
- if (legacyVersion >= 2.0m)
- {
- this.MoveTo(new Vector2(0, -5));
- this.MoveToOffset(new Vector2(0, 80), fade_out_delay + fade_out_length, Easing.In);
- }
+ if (legacyVersion >= 2.0m)
+ {
+ this.MoveTo(new Vector2(0, -5));
+ this.MoveToOffset(new Vector2(0, 80), fade_out_delay + fade_out_length, Easing.In);
+ }
- float rotation = RNG.NextSingle(-8.6f, 8.6f);
+ float rotation = RNG.NextSingle(-8.6f, 8.6f);
- this.RotateTo(0);
- this.RotateTo(rotation, fade_in_length)
- .Then().RotateTo(rotation * 2, fade_out_delay + fade_out_length - fade_in_length, Easing.In);
- break;
-
- default:
-
- this.ScaleTo(0.6f).Then()
- .ScaleTo(1.1f, fade_in_length * 0.8f).Then() // t = 0.8
- .Delay(fade_in_length * 0.2f) // t = 1.0
- .ScaleTo(0.9f, fade_in_length * 0.2f).Then() // t = 1.2
-
- // stable dictates scale of 0.9->1 over time 1.0 to 1.4, but we are already at 1.2.
- // so we need to force the current value to be correct at 1.2 (0.95) then complete the
- // second half of the transform.
- .ScaleTo(0.95f).ScaleTo(finalScale, fade_in_length * 0.2f); // t = 1.4
- break;
+ this.RotateTo(0);
+ this.RotateTo(rotation, fade_in_length)
+ .Then().RotateTo(rotation * 2, fade_out_delay + fade_out_length - fade_in_length, Easing.In);
}
}
diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs
index 9102231913..7516c73b68 100644
--- a/osu.Game/Skinning/LegacySkin.cs
+++ b/osu.Game/Skinning/LegacySkin.cs
@@ -453,11 +453,11 @@ namespace osu.Game.Skinning
private Drawable? getJudgementAnimation(HitResult result)
{
+ if (!result.IsHit())
+ return this.GetAnimation("hit0", true, false);
+
switch (result)
{
- case HitResult.Miss:
- return this.GetAnimation("hit0", true, false);
-
case HitResult.Meh:
return this.GetAnimation("hit50", true, false);