mirror of
https://github.com/ppy/osu.git
synced 2025-02-11 21:03:02 +08:00
Expose only as one method
This commit is contained in:
parent
4e3b994142
commit
6b4b2a57fc
@ -136,7 +136,7 @@ namespace osu.Game.Rulesets.Catch.Difficulty
|
|||||||
if (isBonus)
|
if (isBonus)
|
||||||
{
|
{
|
||||||
legacyBonusScore += scoreIncrease;
|
legacyBonusScore += scoreIncrease;
|
||||||
standardisedBonusScore += scoreProcessor.GetRawBonusScore(bonusResult);
|
standardisedBonusScore += scoreProcessor.GetBaseScoreForResult(bonusResult);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
attributes.AccuracyScore += scoreIncrease;
|
attributes.AccuracyScore += scoreIncrease;
|
||||||
|
@ -33,7 +33,7 @@ namespace osu.Game.Rulesets.Catch.Scoring
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected override double GetComboScoreChange(JudgementResult result)
|
protected override double GetComboScoreChange(JudgementResult result)
|
||||||
=> GetRawComboScore(result.Type) * Math.Min(Math.Max(0.5, Math.Log(result.ComboAfterJudgement, combo_base)), Math.Log(combo_cap, combo_base));
|
=> GetBaseScoreForResult(result.Type) * Math.Min(Math.Max(0.5, Math.Log(result.ComboAfterJudgement, combo_base)), Math.Log(combo_cap, combo_base));
|
||||||
|
|
||||||
public override ScoreRank RankFromAccuracy(double accuracy)
|
public override ScoreRank RankFromAccuracy(double accuracy)
|
||||||
{
|
{
|
||||||
|
@ -31,7 +31,12 @@ namespace osu.Game.Rulesets.Mania.Scoring
|
|||||||
+ bonusPortion;
|
+ bonusPortion;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int GetRawAccuracyScore(HitResult result)
|
protected override double GetComboScoreChange(JudgementResult result)
|
||||||
|
{
|
||||||
|
return getBaseComboScoreForResult(result.Type) * Math.Min(Math.Max(0.5, Math.Log(result.ComboAfterJudgement, combo_base)), Math.Log(400, combo_base));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int GetBaseScoreForResult(HitResult result)
|
||||||
{
|
{
|
||||||
switch (result)
|
switch (result)
|
||||||
{
|
{
|
||||||
@ -39,10 +44,10 @@ namespace osu.Game.Rulesets.Mania.Scoring
|
|||||||
return 305;
|
return 305;
|
||||||
}
|
}
|
||||||
|
|
||||||
return base.GetRawAccuracyScore(result);
|
return base.GetBaseScoreForResult(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int GetRawComboScore(HitResult result)
|
private int getBaseComboScoreForResult(HitResult result)
|
||||||
{
|
{
|
||||||
switch (result)
|
switch (result)
|
||||||
{
|
{
|
||||||
@ -50,12 +55,9 @@ namespace osu.Game.Rulesets.Mania.Scoring
|
|||||||
return 300;
|
return 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
return base.GetRawComboScore(result);
|
return GetBaseScoreForResult(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override double GetComboScoreChange(JudgementResult result)
|
|
||||||
=> GetRawComboScore(result.Type) * Math.Min(Math.Max(0.5, Math.Log(result.ComboAfterJudgement, combo_base)), Math.Log(400, combo_base));
|
|
||||||
|
|
||||||
private class JudgementOrderComparer : IComparer<HitObject>
|
private class JudgementOrderComparer : IComparer<HitObject>
|
||||||
{
|
{
|
||||||
public static readonly JudgementOrderComparer DEFAULT = new JudgementOrderComparer();
|
public static readonly JudgementOrderComparer DEFAULT = new JudgementOrderComparer();
|
||||||
|
@ -134,7 +134,7 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
|
|
||||||
// multipled by 2 to nullify the score multiplier. (autoplay mod selected)
|
// multipled by 2 to nullify the score multiplier. (autoplay mod selected)
|
||||||
long totalScore = scoreProcessor.TotalScore.Value * 2;
|
long totalScore = scoreProcessor.TotalScore.Value * 2;
|
||||||
return totalScore == (int)(drawableSpinner.Result.TotalRotation / 360) * scoreProcessor.GetRawBonusScore(new SpinnerTick().CreateJudgement().MaxResult);
|
return totalScore == (int)(drawableSpinner.Result.TotalRotation / 360) * scoreProcessor.GetBaseScoreForResult(new SpinnerTick().CreateJudgement().MaxResult);
|
||||||
});
|
});
|
||||||
|
|
||||||
addSeekStep(0);
|
addSeekStep(0);
|
||||||
|
@ -173,7 +173,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty
|
|||||||
if (isBonus)
|
if (isBonus)
|
||||||
{
|
{
|
||||||
legacyBonusScore += scoreIncrease;
|
legacyBonusScore += scoreIncrease;
|
||||||
standardisedBonusScore += scoreProcessor.GetRawBonusScore(bonusResult);
|
standardisedBonusScore += scoreProcessor.GetBaseScoreForResult(bonusResult);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
attributes.AccuracyScore += scoreIncrease;
|
attributes.AccuracyScore += scoreIncrease;
|
||||||
|
@ -313,7 +313,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
updateBonusScore();
|
updateBonusScore();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static readonly int score_per_tick = new OsuScoreProcessor().GetRawBonusScore(new SpinnerBonusTick.OsuSpinnerBonusTickJudgement().MaxResult);
|
private static readonly int score_per_tick = new OsuScoreProcessor().GetBaseScoreForResult(new SpinnerBonusTick.OsuSpinnerBonusTickJudgement().MaxResult);
|
||||||
|
|
||||||
private void updateBonusScore()
|
private void updateBonusScore()
|
||||||
{
|
{
|
||||||
|
@ -193,7 +193,7 @@ namespace osu.Game.Rulesets.Taiko.Difficulty
|
|||||||
if (isBonus)
|
if (isBonus)
|
||||||
{
|
{
|
||||||
legacyBonusScore += scoreIncrease;
|
legacyBonusScore += scoreIncrease;
|
||||||
standardisedBonusScore += scoreProcessor.GetRawBonusScore(bonusResult);
|
standardisedBonusScore += scoreProcessor.GetBaseScoreForResult(bonusResult);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
attributes.AccuracyScore += scoreIncrease;
|
attributes.AccuracyScore += scoreIncrease;
|
||||||
|
@ -28,12 +28,12 @@ namespace osu.Game.Rulesets.Taiko.Scoring
|
|||||||
|
|
||||||
protected override double GetComboScoreChange(JudgementResult result)
|
protected override double GetComboScoreChange(JudgementResult result)
|
||||||
{
|
{
|
||||||
return GetRawComboScore(result.Type)
|
return GetBaseScoreForResult(result.Type)
|
||||||
* Math.Min(Math.Max(0.5, Math.Log(result.ComboAfterJudgement, combo_base)), Math.Log(400, combo_base))
|
* Math.Min(Math.Max(0.5, Math.Log(result.ComboAfterJudgement, combo_base)), Math.Log(400, combo_base))
|
||||||
* strongScaleValue(result);
|
* strongScaleValue(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int GetRawAccuracyScore(HitResult result)
|
public override int GetBaseScoreForResult(HitResult result)
|
||||||
{
|
{
|
||||||
switch (result)
|
switch (result)
|
||||||
{
|
{
|
||||||
@ -41,18 +41,7 @@ namespace osu.Game.Rulesets.Taiko.Scoring
|
|||||||
return 150;
|
return 150;
|
||||||
}
|
}
|
||||||
|
|
||||||
return base.GetRawAccuracyScore(result);
|
return base.GetBaseScoreForResult(result);
|
||||||
}
|
|
||||||
|
|
||||||
public override int GetRawComboScore(HitResult result)
|
|
||||||
{
|
|
||||||
switch (result)
|
|
||||||
{
|
|
||||||
case HitResult.Ok:
|
|
||||||
return 150;
|
|
||||||
}
|
|
||||||
|
|
||||||
return base.GetRawComboScore(result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private double strongScaleValue(JudgementResult result)
|
private double strongScaleValue(JudgementResult result)
|
||||||
|
@ -48,7 +48,7 @@ namespace osu.Game.Tests.Gameplay
|
|||||||
// Apply a judgement
|
// Apply a judgement
|
||||||
scoreProcessor.ApplyResult(new JudgementResult(new HitObject(), new TestJudgement(HitResult.LargeBonus)) { Type = HitResult.LargeBonus });
|
scoreProcessor.ApplyResult(new JudgementResult(new HitObject(), new TestJudgement(HitResult.LargeBonus)) { Type = HitResult.LargeBonus });
|
||||||
|
|
||||||
Assert.That(scoreProcessor.TotalScore.Value, Is.EqualTo(scoreProcessor.GetRawBonusScore(HitResult.LargeBonus)));
|
Assert.That(scoreProcessor.TotalScore.Value, Is.EqualTo(scoreProcessor.GetBaseScoreForResult(HitResult.LargeBonus)));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -57,14 +57,14 @@ namespace osu.Game.Database
|
|||||||
// We are constructing a "best possible" score from the statistics provided because it's the best we can do.
|
// We are constructing a "best possible" score from the statistics provided because it's the best we can do.
|
||||||
List<HitResult> sortedHits = score.Statistics
|
List<HitResult> sortedHits = score.Statistics
|
||||||
.Where(kvp => kvp.Key.AffectsCombo())
|
.Where(kvp => kvp.Key.AffectsCombo())
|
||||||
.OrderByDescending(kvp => processor.GetRawComboScore(kvp.Key))
|
.OrderByDescending(kvp => processor.GetBaseScoreForResult(kvp.Key))
|
||||||
.SelectMany(kvp => Enumerable.Repeat(kvp.Key, kvp.Value))
|
.SelectMany(kvp => Enumerable.Repeat(kvp.Key, kvp.Value))
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
// Attempt to use maximum statistics from the database.
|
// Attempt to use maximum statistics from the database.
|
||||||
var maximumJudgements = score.MaximumStatistics
|
var maximumJudgements = score.MaximumStatistics
|
||||||
.Where(kvp => kvp.Key.AffectsCombo())
|
.Where(kvp => kvp.Key.AffectsCombo())
|
||||||
.OrderByDescending(kvp => processor.GetRawComboScore(kvp.Key))
|
.OrderByDescending(kvp => processor.GetBaseScoreForResult(kvp.Key))
|
||||||
.SelectMany(kvp => Enumerable.Repeat(new FakeJudgement(kvp.Key), kvp.Value))
|
.SelectMany(kvp => Enumerable.Repeat(new FakeJudgement(kvp.Key), kvp.Value))
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
|
@ -227,12 +227,12 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
|
|
||||||
if (result.Judgement.MaxResult.AffectsAccuracy())
|
if (result.Judgement.MaxResult.AffectsAccuracy())
|
||||||
{
|
{
|
||||||
currentMaximumBaseScore += GetRawAccuracyScore(result.Judgement.MaxResult);
|
currentMaximumBaseScore += GetBaseScoreForResult(result.Judgement.MaxResult);
|
||||||
currentAccuracyJudgementCount++;
|
currentAccuracyJudgementCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.Type.AffectsAccuracy())
|
if (result.Type.AffectsAccuracy())
|
||||||
currentBaseScore += GetRawAccuracyScore(result.Type);
|
currentBaseScore += GetBaseScoreForResult(result.Type);
|
||||||
|
|
||||||
if (result.Type.IsBonus())
|
if (result.Type.IsBonus())
|
||||||
currentBonusPortion += GetBonusScoreChange(result);
|
currentBonusPortion += GetBonusScoreChange(result);
|
||||||
@ -276,12 +276,12 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
|
|
||||||
if (result.Judgement.MaxResult.AffectsAccuracy())
|
if (result.Judgement.MaxResult.AffectsAccuracy())
|
||||||
{
|
{
|
||||||
currentMaximumBaseScore -= GetRawAccuracyScore(result.Judgement.MaxResult);
|
currentMaximumBaseScore -= GetBaseScoreForResult(result.Judgement.MaxResult);
|
||||||
currentAccuracyJudgementCount--;
|
currentAccuracyJudgementCount--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.Type.AffectsAccuracy())
|
if (result.Type.AffectsAccuracy())
|
||||||
currentBaseScore -= GetRawAccuracyScore(result.Type);
|
currentBaseScore -= GetBaseScoreForResult(result.Type);
|
||||||
|
|
||||||
if (result.Type.IsBonus())
|
if (result.Type.IsBonus())
|
||||||
currentBonusPortion -= GetBonusScoreChange(result);
|
currentBonusPortion -= GetBonusScoreChange(result);
|
||||||
@ -301,19 +301,15 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
/// Gets the final score change to be applied to the bonus portion of the score.
|
/// Gets the final score change to be applied to the bonus portion of the score.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="result">The judgement result.</param>
|
/// <param name="result">The judgement result.</param>
|
||||||
protected virtual double GetBonusScoreChange(JudgementResult result) => GetRawBonusScore(result.Type);
|
protected virtual double GetBonusScoreChange(JudgementResult result) => GetBaseScoreForResult(result.Type);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the final score change to be applied to the combo portion of the score.
|
/// Gets the final score change to be applied to the combo portion of the score.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="result">The judgement result.</param>
|
/// <param name="result">The judgement result.</param>
|
||||||
protected virtual double GetComboScoreChange(JudgementResult result) => GetRawComboScore(result.Judgement.MaxResult) * Math.Pow(result.ComboAfterJudgement, COMBO_EXPONENT);
|
protected virtual double GetComboScoreChange(JudgementResult result) => GetBaseScoreForResult(result.Judgement.MaxResult) * Math.Pow(result.ComboAfterJudgement, COMBO_EXPONENT);
|
||||||
|
|
||||||
/// <summary>
|
public virtual int GetBaseScoreForResult(HitResult result)
|
||||||
/// Retrieves the raw score value for a hit result, in order to be applied to the combo portion.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="result">The hit result.</param>
|
|
||||||
public virtual int GetRawComboScore(HitResult result)
|
|
||||||
{
|
{
|
||||||
switch (result)
|
switch (result)
|
||||||
{
|
{
|
||||||
@ -338,51 +334,6 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
case HitResult.Great:
|
case HitResult.Great:
|
||||||
case HitResult.Perfect: // Perfect doesn't actually give more score / accuracy directly.
|
case HitResult.Perfect: // Perfect doesn't actually give more score / accuracy directly.
|
||||||
return 300;
|
return 300;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Retrieves the raw score value for a hit result, in order to be applied to the accuracy portion.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="result">The hit result.</param>
|
|
||||||
public virtual int GetRawAccuracyScore(HitResult result)
|
|
||||||
{
|
|
||||||
switch (result)
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case HitResult.SmallTickHit:
|
|
||||||
return 10;
|
|
||||||
|
|
||||||
case HitResult.LargeTickHit:
|
|
||||||
return 30;
|
|
||||||
|
|
||||||
case HitResult.Meh:
|
|
||||||
return 50;
|
|
||||||
|
|
||||||
case HitResult.Ok:
|
|
||||||
return 100;
|
|
||||||
|
|
||||||
case HitResult.Good:
|
|
||||||
return 200;
|
|
||||||
|
|
||||||
case HitResult.Great:
|
|
||||||
case HitResult.Perfect: // Perfect doesn't actually give more score / accuracy directly.
|
|
||||||
return 300;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Retrieves the raw score value for a hit result, in order to be applied to the bonus portion.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="result">The hit result.</param>
|
|
||||||
public virtual int GetRawBonusScore(HitResult result)
|
|
||||||
{
|
|
||||||
switch (result)
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case HitResult.SmallBonus:
|
case HitResult.SmallBonus:
|
||||||
return 10;
|
return 10;
|
||||||
@ -619,7 +570,7 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// Used to compute accuracy.
|
/// Used to compute accuracy.
|
||||||
/// See: <see cref="HitResultExtensions.IsBasic"/> and <see cref="ScoreProcessor.GetRawAccuracyScore"/>.
|
/// See: <see cref="HitResultExtensions.IsBasic"/> and <see cref="ScoreProcessor.GetBaseScoreForResult"/>.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
[Key(0)]
|
[Key(0)]
|
||||||
public double BaseScore { get; set; }
|
public double BaseScore { get; set; }
|
||||||
|
@ -131,7 +131,7 @@ namespace osu.Game.Scoring
|
|||||||
// Populate the maximum statistics.
|
// Populate the maximum statistics.
|
||||||
HitResult maxBasicResult = rulesetInstance.GetHitResults()
|
HitResult maxBasicResult = rulesetInstance.GetHitResults()
|
||||||
.Select(h => h.result)
|
.Select(h => h.result)
|
||||||
.Where(h => h.IsBasic()).MaxBy(scoreProcessor.GetRawAccuracyScore);
|
.Where(h => h.IsBasic()).MaxBy(scoreProcessor.GetBaseScoreForResult);
|
||||||
|
|
||||||
foreach ((HitResult result, int count) in score.Statistics)
|
foreach ((HitResult result, int count) in score.Statistics)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user