mirror of
https://github.com/osukey/osukey.git
synced 2025-05-22 14:07:38 +09:00
Refactor to reduce nested conditions
This commit is contained in:
parent
a434cc14a4
commit
fc079ad8cf
@ -168,43 +168,20 @@ namespace osu.Game.Rulesets.Scoring
|
||||
|
||||
scoreResultCounts[result.Type] = scoreResultCounts.GetValueOrDefault(result.Type) + 1;
|
||||
|
||||
// Always update the maximum scoring values.
|
||||
applyResult(result.Judgement.MaxResult, ref currentMaximumScoringValues);
|
||||
currentMaximumScoringValues.MaxCombo += result.Judgement.MaxResult.IncreasesCombo() ? 1 : 0;
|
||||
|
||||
if (!result.Type.IsScorable())
|
||||
{
|
||||
// The inverse of non-scorable (ignore) judgements may be bonus judgements.
|
||||
if (result.Judgement.MaxResult.IsBonus())
|
||||
currentMaximumScoringValues.BonusScore += result.Judgement.MaxNumericResult;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Update rolling combo.
|
||||
if (result.Type.IncreasesCombo())
|
||||
Combo.Value++;
|
||||
else if (result.Type.BreaksCombo())
|
||||
Combo.Value = 0;
|
||||
|
||||
// Update maximum combo.
|
||||
applyResult(result.Type, ref currentScoringValues);
|
||||
currentScoringValues.MaxCombo = HighestCombo.Value;
|
||||
currentMaximumScoringValues.MaxCombo += result.Judgement.MaxResult.AffectsCombo() ? 1 : 0;
|
||||
|
||||
// Update base/bonus score.
|
||||
if (result.Type.IsBonus())
|
||||
{
|
||||
currentScoringValues.BonusScore += result.Type.IsHit() ? result.Judgement.NumericResultFor(result) : 0;
|
||||
currentMaximumScoringValues.BonusScore += result.Judgement.MaxNumericResult;
|
||||
}
|
||||
else
|
||||
{
|
||||
currentScoringValues.BaseScore += result.Type.IsHit() ? result.Judgement.NumericResultFor(result) : 0;
|
||||
currentMaximumScoringValues.BaseScore += result.Judgement.MaxNumericResult;
|
||||
}
|
||||
|
||||
// Update hitobject count.
|
||||
if (result.Type.IsBasic())
|
||||
{
|
||||
currentScoringValues.HitObjects++;
|
||||
currentMaximumScoringValues.HitObjects++;
|
||||
}
|
||||
|
||||
hitEvents.Add(CreateHitEvent(result));
|
||||
lastHitObject = result.HitObject;
|
||||
@ -212,6 +189,20 @@ namespace osu.Game.Rulesets.Scoring
|
||||
updateScore();
|
||||
}
|
||||
|
||||
private static void applyResult(HitResult result, ref ScoringValues scoringValues)
|
||||
{
|
||||
if (!result.IsScorable())
|
||||
return;
|
||||
|
||||
if (result.IsBonus())
|
||||
scoringValues.BonusScore += result.IsHit() ? Judgement.ToNumericResult(result) : 0;
|
||||
else
|
||||
scoringValues.BaseScore += result.IsHit() ? Judgement.ToNumericResult(result) : 0;
|
||||
|
||||
if (result.IsBasic())
|
||||
scoringValues.HitObjects++;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the <see cref="HitEvent"/> that describes a <see cref="JudgementResult"/>.
|
||||
/// </summary>
|
||||
@ -230,37 +221,15 @@ namespace osu.Game.Rulesets.Scoring
|
||||
|
||||
scoreResultCounts[result.Type] = scoreResultCounts.GetValueOrDefault(result.Type) - 1;
|
||||
|
||||
// Always update the maximum scoring values.
|
||||
revertResult(result.Judgement.MaxResult, ref currentMaximumScoringValues);
|
||||
currentMaximumScoringValues.MaxCombo -= result.Judgement.MaxResult.IncreasesCombo() ? 1 : 0;
|
||||
|
||||
if (!result.Type.IsScorable())
|
||||
{
|
||||
// The inverse of non-scorable (ignore) judgements may be bonus judgements.
|
||||
if (result.Judgement.MaxResult.IsBonus())
|
||||
currentMaximumScoringValues.BonusScore -= result.Judgement.MaxNumericResult;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Update maximum combo.
|
||||
revertResult(result.Type, ref currentScoringValues);
|
||||
currentScoringValues.MaxCombo = HighestCombo.Value;
|
||||
currentMaximumScoringValues.MaxCombo -= result.Judgement.MaxResult.AffectsCombo() ? 1 : 0;
|
||||
|
||||
// Update base/bonus score.
|
||||
if (result.Type.IsBonus())
|
||||
{
|
||||
currentScoringValues.BonusScore -= result.Type.IsHit() ? result.Judgement.NumericResultFor(result) : 0;
|
||||
currentMaximumScoringValues.BonusScore -= result.Judgement.MaxNumericResult;
|
||||
}
|
||||
else
|
||||
{
|
||||
currentScoringValues.BaseScore -= result.Type.IsHit() ? result.Judgement.NumericResultFor(result) : 0;
|
||||
currentMaximumScoringValues.BaseScore -= result.Judgement.MaxNumericResult;
|
||||
}
|
||||
|
||||
// Update hitobject count.
|
||||
if (result.Type.IsBasic())
|
||||
{
|
||||
currentScoringValues.HitObjects--;
|
||||
currentMaximumScoringValues.HitObjects--;
|
||||
}
|
||||
|
||||
Debug.Assert(hitEvents.Count > 0);
|
||||
lastHitObject = hitEvents[^1].LastHitObject;
|
||||
@ -269,6 +238,20 @@ namespace osu.Game.Rulesets.Scoring
|
||||
updateScore();
|
||||
}
|
||||
|
||||
private static void revertResult(HitResult result, ref ScoringValues scoringValues)
|
||||
{
|
||||
if (!result.IsScorable())
|
||||
return;
|
||||
|
||||
if (result.IsBonus())
|
||||
scoringValues.BonusScore -= result.IsHit() ? Judgement.ToNumericResult(result) : 0;
|
||||
else
|
||||
scoringValues.BaseScore -= result.IsHit() ? Judgement.ToNumericResult(result) : 0;
|
||||
|
||||
if (result.IsBasic())
|
||||
scoringValues.HitObjects--;
|
||||
}
|
||||
|
||||
private void updateScore()
|
||||
{
|
||||
Accuracy.Value = currentMaximumScoringValues.BaseScore > 0 ? currentScoringValues.BaseScore / currentMaximumScoringValues.BaseScore : 1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user