diff --git a/osu.Game.Modes.Osu/Objects/Drawables/DrawableHitCircle.cs b/osu.Game.Modes.Osu/Objects/Drawables/DrawableHitCircle.cs
index 208bf15328..0e085d63b8 100644
--- a/osu.Game.Modes.Osu/Objects/Drawables/DrawableHitCircle.cs
+++ b/osu.Game.Modes.Osu/Objects/Drawables/DrawableHitCircle.cs
@@ -84,18 +84,18 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
double hitOffset = Math.Abs(Judgement.TimeOffset);
+ OsuJudgementInfo osuJudgement = Judgement as OsuJudgementInfo;
+
if (hitOffset < hit50)
{
Judgement.Result = HitResult.Hit;
- OsuJudgementInfo osuInfo = Judgement as OsuJudgementInfo;
-
if (hitOffset < hit300)
- osuInfo.Score = OsuScoreResult.Hit300;
+ osuJudgement.Score = OsuScoreResult.Hit300;
else if (hitOffset < hit100)
- osuInfo.Score = OsuScoreResult.Hit100;
+ osuJudgement.Score = OsuScoreResult.Hit100;
else if (hitOffset < hit50)
- osuInfo.Score = OsuScoreResult.Hit50;
+ osuJudgement.Score = OsuScoreResult.Hit50;
}
else
Judgement.Result = HitResult.Miss;
diff --git a/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs b/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs
index d6907474f3..c7cc7cfdd7 100644
--- a/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs
+++ b/osu.Game.Modes.Osu/Objects/Drawables/DrawableOsuHitObject.cs
@@ -4,7 +4,6 @@
using System.ComponentModel;
using osu.Game.Modes.Objects;
using osu.Game.Modes.Objects.Drawables;
-using osu.Framework.Graphics;
namespace osu.Game.Modes.Osu.Objects.Drawables
{
@@ -19,7 +18,7 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
{
}
- public override JudgementInfo CreateJudgementInfo() => new OsuJudgementInfo();
+ public override JudgementInfo CreateJudgementInfo() => new OsuJudgementInfo { MaxScore = OsuScoreResult.Hit300 };
protected override void UpdateState(ArmedState state)
{
@@ -49,7 +48,37 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
public class OsuJudgementInfo : PositionalJudgementInfo
{
+ ///
+ /// The score the user achieved.
+ ///
public OsuScoreResult Score;
+
+ ///
+ /// The score which would be achievable on a perfect hit.
+ ///
+ public OsuScoreResult MaxScore = OsuScoreResult.Hit300;
+
+ public int ScoreValue => scoreToInt(Score);
+
+ public int MaxScoreValue => scoreToInt(MaxScore);
+
+ private int scoreToInt(OsuScoreResult result)
+ {
+ switch (result)
+ {
+ default:
+ return 0;
+ case OsuScoreResult.Hit50:
+ return 50;
+ case OsuScoreResult.Hit100:
+ return 100;
+ case OsuScoreResult.Hit300:
+ return 300;
+ case OsuScoreResult.SliderTick:
+ return 10;
+ }
+ }
+
public ComboResult Combo;
}
diff --git a/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs b/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs
index c1c17f1c53..7380871583 100644
--- a/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs
+++ b/osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs
@@ -26,6 +26,8 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
public override bool RemoveWhenNotAlive => false;
+ public override JudgementInfo CreateJudgementInfo() => new OsuJudgementInfo { MaxScore = OsuScoreResult.SliderTick };
+
public DrawableSliderTick(SliderTick sliderTick) : base(sliderTick)
{
this.sliderTick = sliderTick;
diff --git a/osu.Game.Modes.Osu/OsuScoreProcessor.cs b/osu.Game.Modes.Osu/OsuScoreProcessor.cs
index 224a669746..9493259558 100644
--- a/osu.Game.Modes.Osu/OsuScoreProcessor.cs
+++ b/osu.Game.Modes.Osu/OsuScoreProcessor.cs
@@ -36,28 +36,8 @@ namespace osu.Game.Modes.Osu
foreach (OsuJudgementInfo j in Judgements)
{
- switch (j.Score)
- {
- case OsuScoreResult.Miss:
- maxScore += 300;
- break;
- case OsuScoreResult.Hit50:
- score += 50;
- maxScore += 300;
- break;
- case OsuScoreResult.Hit100:
- score += 100;
- maxScore += 300;
- break;
- case OsuScoreResult.Hit300:
- score += 300;
- maxScore += 300;
- break;
- case OsuScoreResult.SliderTick:
- score += 10;
- maxScore += 10;
- break;
- }
+ score += j.ScoreValue;
+ maxScore += j.MaxScoreValue;
}
TotalScore.Value = score;