1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-13 08:32:57 +08:00

Use HitWindows data directly for computing effective OD

This commit is contained in:
Bartłomiej Dach 2023-12-14 20:02:02 +01:00
parent 605269f65f
commit 0f4d054bfe
No known key found for this signature in database
4 changed files with 10 additions and 8 deletions

View File

@ -342,9 +342,10 @@ namespace osu.Game.Rulesets.Osu
preempt /= rate; preempt /= rate;
adjustedDifficulty.ApproachRate = (float)IBeatmapDifficultyInfo.InverseDifficultyRange(preempt, OsuHitObject.PREEMPT_MAX, OsuHitObject.PREEMPT_MID, OsuHitObject.PREEMPT_MIN); adjustedDifficulty.ApproachRate = (float)IBeatmapDifficultyInfo.InverseDifficultyRange(preempt, OsuHitObject.PREEMPT_MAX, OsuHitObject.PREEMPT_MID, OsuHitObject.PREEMPT_MIN);
double greatHitWindow = IBeatmapDifficultyInfo.DifficultyRange(adjustedDifficulty.OverallDifficulty, 80, 50, 20); var greatHitWindowRange = OsuHitWindows.OSU_RANGES.Single(range => range.Result == HitResult.Great);
double greatHitWindow = IBeatmapDifficultyInfo.DifficultyRange(adjustedDifficulty.OverallDifficulty, greatHitWindowRange.Min, greatHitWindowRange.Average, greatHitWindowRange.Max);
greatHitWindow /= rate; greatHitWindow /= rate;
adjustedDifficulty.OverallDifficulty = (float)IBeatmapDifficultyInfo.InverseDifficultyRange(greatHitWindow, 80, 50, 20); adjustedDifficulty.OverallDifficulty = (float)IBeatmapDifficultyInfo.InverseDifficultyRange(greatHitWindow, greatHitWindowRange.Min, greatHitWindowRange.Average, greatHitWindowRange.Max);
return adjustedDifficulty; return adjustedDifficulty;
} }

View File

@ -12,7 +12,7 @@ namespace osu.Game.Rulesets.Osu.Scoring
/// </summary> /// </summary>
public const double MISS_WINDOW = 400; public const double MISS_WINDOW = 400;
private static readonly DifficultyRange[] osu_ranges = internal static readonly DifficultyRange[] OSU_RANGES =
{ {
new DifficultyRange(HitResult.Great, 80, 50, 20), new DifficultyRange(HitResult.Great, 80, 50, 20),
new DifficultyRange(HitResult.Ok, 140, 100, 60), new DifficultyRange(HitResult.Ok, 140, 100, 60),
@ -34,6 +34,6 @@ namespace osu.Game.Rulesets.Osu.Scoring
return false; return false;
} }
protected override DifficultyRange[] GetRanges() => osu_ranges; protected override DifficultyRange[] GetRanges() => OSU_RANGES;
} }
} }

View File

@ -7,7 +7,7 @@ namespace osu.Game.Rulesets.Taiko.Scoring
{ {
public class TaikoHitWindows : HitWindows public class TaikoHitWindows : HitWindows
{ {
private static readonly DifficultyRange[] taiko_ranges = internal static readonly DifficultyRange[] TAIKO_RANGES =
{ {
new DifficultyRange(HitResult.Great, 50, 35, 20), new DifficultyRange(HitResult.Great, 50, 35, 20),
new DifficultyRange(HitResult.Ok, 120, 80, 50), new DifficultyRange(HitResult.Ok, 120, 80, 50),
@ -27,6 +27,6 @@ namespace osu.Game.Rulesets.Taiko.Scoring
return false; return false;
} }
protected override DifficultyRange[] GetRanges() => taiko_ranges; protected override DifficultyRange[] GetRanges() => TAIKO_RANGES;
} }
} }

View File

@ -270,9 +270,10 @@ namespace osu.Game.Rulesets.Taiko
{ {
BeatmapDifficulty adjustedDifficulty = new BeatmapDifficulty(difficulty); BeatmapDifficulty adjustedDifficulty = new BeatmapDifficulty(difficulty);
double greatHitWindow = IBeatmapDifficultyInfo.DifficultyRange(adjustedDifficulty.OverallDifficulty, 50, 35, 20); var greatHitWindowRange = TaikoHitWindows.TAIKO_RANGES.Single(range => range.Result == HitResult.Great);
double greatHitWindow = IBeatmapDifficultyInfo.DifficultyRange(adjustedDifficulty.OverallDifficulty, greatHitWindowRange.Min, greatHitWindowRange.Average, greatHitWindowRange.Max);
greatHitWindow /= rate; greatHitWindow /= rate;
adjustedDifficulty.OverallDifficulty = (float)IBeatmapDifficultyInfo.InverseDifficultyRange(greatHitWindow, 50, 35, 20); adjustedDifficulty.OverallDifficulty = (float)IBeatmapDifficultyInfo.InverseDifficultyRange(greatHitWindow, greatHitWindowRange.Min, greatHitWindowRange.Average, greatHitWindowRange.Max);
return adjustedDifficulty; return adjustedDifficulty;
} }