mirror of
https://github.com/osukey/osukey.git
synced 2025-05-22 22:17:36 +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;
|
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())
|
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;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
// Update rolling combo.
|
|
||||||
if (result.Type.IncreasesCombo())
|
if (result.Type.IncreasesCombo())
|
||||||
Combo.Value++;
|
Combo.Value++;
|
||||||
else if (result.Type.BreaksCombo())
|
else if (result.Type.BreaksCombo())
|
||||||
Combo.Value = 0;
|
Combo.Value = 0;
|
||||||
|
|
||||||
// Update maximum combo.
|
applyResult(result.Type, ref currentScoringValues);
|
||||||
currentScoringValues.MaxCombo = HighestCombo.Value;
|
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));
|
hitEvents.Add(CreateHitEvent(result));
|
||||||
lastHitObject = result.HitObject;
|
lastHitObject = result.HitObject;
|
||||||
@ -212,6 +189,20 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
updateScore();
|
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>
|
/// <summary>
|
||||||
/// Creates the <see cref="HitEvent"/> that describes a <see cref="JudgementResult"/>.
|
/// Creates the <see cref="HitEvent"/> that describes a <see cref="JudgementResult"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -230,37 +221,15 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
|
|
||||||
scoreResultCounts[result.Type] = scoreResultCounts.GetValueOrDefault(result.Type) - 1;
|
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())
|
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;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
// Update maximum combo.
|
revertResult(result.Type, ref currentScoringValues);
|
||||||
currentScoringValues.MaxCombo = HighestCombo.Value;
|
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);
|
Debug.Assert(hitEvents.Count > 0);
|
||||||
lastHitObject = hitEvents[^1].LastHitObject;
|
lastHitObject = hitEvents[^1].LastHitObject;
|
||||||
@ -269,6 +238,20 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
updateScore();
|
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()
|
private void updateScore()
|
||||||
{
|
{
|
||||||
Accuracy.Value = currentMaximumScoringValues.BaseScore > 0 ? currentScoringValues.BaseScore / currentMaximumScoringValues.BaseScore : 1;
|
Accuracy.Value = currentMaximumScoringValues.BaseScore > 0 ? currentScoringValues.BaseScore / currentMaximumScoringValues.BaseScore : 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user