Simplify standardized scoring to BasePortion (raw scoring) + ComboPortion (highest combo)

This commit is contained in:
smoogipooo 2017-09-13 15:17:32 +09:00
parent 3619f7c1eb
commit ba3e44cd71
4 changed files with 18 additions and 21 deletions

View File

@ -89,8 +89,8 @@ internal class ManiaScoreProcessor : ScoreProcessor<ManiaHitObject>
/// </summary> /// </summary>
private double hpMultiplier = 1; private double hpMultiplier = 1;
protected override double ComboPortion => 0.2f; protected override double BasePortion => 0.8;
protected override double AccuracyPortion => 0.8f; protected override double ComboPortion => 0.2;
public ManiaScoreProcessor() public ManiaScoreProcessor()
{ {

View File

@ -16,8 +16,8 @@ namespace osu.Game.Rulesets.Osu.Scoring
{ {
internal class OsuScoreProcessor : ScoreProcessor<OsuHitObject> internal class OsuScoreProcessor : ScoreProcessor<OsuHitObject>
{ {
protected override double BasePortion => 0.3;
protected override double ComboPortion => 0.7; protected override double ComboPortion => 0.7;
protected override double AccuracyPortion => 0.3;
public OsuScoreProcessor() public OsuScoreProcessor()
{ {

View File

@ -55,8 +55,8 @@ internal class TaikoScoreProcessor : ScoreProcessor<TaikoHitObject>
/// </summary> /// </summary>
public override bool HasFailed => Hits == MaxHits && Health.Value <= 0.5; public override bool HasFailed => Hits == MaxHits && Health.Value <= 0.5;
protected override double BasePortion => 0.8;
protected override double ComboPortion => 0.2; protected override double ComboPortion => 0.2;
protected override double AccuracyPortion => 0.8;
private double hpIncreaseTick; private double hpIncreaseTick;
private double hpIncreaseGreat; private double hpIncreaseGreat;

View File

@ -156,16 +156,17 @@ public abstract class ScoreProcessor<TObject> : ScoreProcessor
protected sealed override bool HasCompleted => Hits == MaxHits; protected sealed override bool HasCompleted => Hits == MaxHits;
protected virtual double BasePortion => 0.5f;
protected virtual double ComboPortion => 0.5f; protected virtual double ComboPortion => 0.5f;
protected virtual double AccuracyPortion => 0.5f;
protected int MaxHits { get; private set; } protected int MaxHits { get; private set; }
protected int Hits { get; private set; } protected int Hits { get; private set; }
private double maxHighestCombo; private double maxHighestCombo;
private double maxComboScore;
private double rollingMaxComboScore; private double maxBaseScore;
private double comboScore; private double rollingMaxBaseScore;
private double baseScore;
protected ScoreProcessor() protected ScoreProcessor()
{ {
@ -216,8 +217,8 @@ protected virtual void OnNewJudgement(Judgement judgement)
break; break;
} }
comboScore += judgement.NumericResult; baseScore += judgement.NumericResult;
rollingMaxComboScore += judgement.MaxNumericResult; rollingMaxBaseScore += judgement.MaxNumericResult;
} }
else if (judgement.IsHit) else if (judgement.IsHit)
bonusScore += judgement.NumericResult; bonusScore += judgement.NumericResult;
@ -225,20 +226,16 @@ protected virtual void OnNewJudgement(Judgement judgement)
if (judgement.AffectsAccuracy) if (judgement.AffectsAccuracy)
Hits++; Hits++;
if (rollingMaxComboScore != 0) if (rollingMaxBaseScore != 0)
Accuracy.Value = comboScore / rollingMaxComboScore; Accuracy.Value = baseScore / rollingMaxBaseScore;
switch (Mode.Value) switch (Mode.Value)
{ {
case ScoringMode.Standardised: case ScoringMode.Standardised:
TotalScore.Value = TotalScore.Value = max_score * (BasePortion * baseScore / maxBaseScore + ComboPortion * HighestCombo / maxHighestCombo) + bonusScore;
max_score *
(ComboPortion * (comboScore * Math.Log(HighestCombo + 1, 2)) / (maxComboScore * Math.Log(maxHighestCombo + 1, 2))
+ AccuracyPortion * Accuracy)
+ bonusScore;
break; break;
case ScoringMode.Exponential: case ScoringMode.Exponential:
TotalScore.Value = (comboScore + bonusScore) * Math.Log(HighestCombo + 1, 2); TotalScore.Value = (baseScore + bonusScore) * Math.Log(HighestCombo + 1, 2);
break; break;
} }
} }
@ -249,14 +246,14 @@ protected override void Reset(bool storeResults)
{ {
MaxHits = Hits; MaxHits = Hits;
maxHighestCombo = HighestCombo; maxHighestCombo = HighestCombo;
maxComboScore = comboScore; maxBaseScore = baseScore;
} }
base.Reset(storeResults); base.Reset(storeResults);
Hits = 0; Hits = 0;
comboScore = 0; baseScore = 0;
rollingMaxComboScore = 0; rollingMaxBaseScore = 0;
} }
} }