Add MaxScore to correctly account for the maximum attainable score of DrawableHitObjects.

This commit is contained in:
Dean Herbert
2017-02-16 17:33:13 +09:00
parent 8bf3902cbd
commit b55d85a5c5
4 changed files with 40 additions and 29 deletions

View File

@ -84,18 +84,18 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
double hitOffset = Math.Abs(Judgement.TimeOffset); double hitOffset = Math.Abs(Judgement.TimeOffset);
OsuJudgementInfo osuJudgement = Judgement as OsuJudgementInfo;
if (hitOffset < hit50) if (hitOffset < hit50)
{ {
Judgement.Result = HitResult.Hit; Judgement.Result = HitResult.Hit;
OsuJudgementInfo osuInfo = Judgement as OsuJudgementInfo;
if (hitOffset < hit300) if (hitOffset < hit300)
osuInfo.Score = OsuScoreResult.Hit300; osuJudgement.Score = OsuScoreResult.Hit300;
else if (hitOffset < hit100) else if (hitOffset < hit100)
osuInfo.Score = OsuScoreResult.Hit100; osuJudgement.Score = OsuScoreResult.Hit100;
else if (hitOffset < hit50) else if (hitOffset < hit50)
osuInfo.Score = OsuScoreResult.Hit50; osuJudgement.Score = OsuScoreResult.Hit50;
} }
else else
Judgement.Result = HitResult.Miss; Judgement.Result = HitResult.Miss;

View File

@ -4,7 +4,6 @@
using System.ComponentModel; using System.ComponentModel;
using osu.Game.Modes.Objects; using osu.Game.Modes.Objects;
using osu.Game.Modes.Objects.Drawables; using osu.Game.Modes.Objects.Drawables;
using osu.Framework.Graphics;
namespace osu.Game.Modes.Osu.Objects.Drawables 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) protected override void UpdateState(ArmedState state)
{ {
@ -49,7 +48,37 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
public class OsuJudgementInfo : PositionalJudgementInfo public class OsuJudgementInfo : PositionalJudgementInfo
{ {
/// <summary>
/// The score the user achieved.
/// </summary>
public OsuScoreResult Score; public OsuScoreResult Score;
/// <summary>
/// The score which would be achievable on a perfect hit.
/// </summary>
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; public ComboResult Combo;
} }

View File

@ -26,6 +26,8 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
public override bool RemoveWhenNotAlive => false; public override bool RemoveWhenNotAlive => false;
public override JudgementInfo CreateJudgementInfo() => new OsuJudgementInfo { MaxScore = OsuScoreResult.SliderTick };
public DrawableSliderTick(SliderTick sliderTick) : base(sliderTick) public DrawableSliderTick(SliderTick sliderTick) : base(sliderTick)
{ {
this.sliderTick = sliderTick; this.sliderTick = sliderTick;

View File

@ -36,28 +36,8 @@ namespace osu.Game.Modes.Osu
foreach (OsuJudgementInfo j in Judgements) foreach (OsuJudgementInfo j in Judgements)
{ {
switch (j.Score) score += j.ScoreValue;
{ maxScore += j.MaxScoreValue;
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;
}
} }
TotalScore.Value = score; TotalScore.Value = score;