Fixed precision and updated AdvancedStats

This commit is contained in:
Givikap120 2023-11-12 18:05:18 +02:00
parent a04f9aaef7
commit 26d493986c
2 changed files with 26 additions and 26 deletions

View File

@ -204,8 +204,8 @@ namespace osu.Game.Overlays.Mods
if (haveRateChangedValues) if (haveRateChangedValues)
{ {
return $"One or more values are being adjusted by mods that change speed." + return $"One or more values are being adjusted by mods that change speed." +
$" (AR {originalDifficulty?.ApproachRate ?? 0}→{adjustedDifficulty?.ApproachRate ?? 0}, " + $" (AR {originalDifficulty?.ApproachRate ?? 0}→{(adjustedDifficulty?.ApproachRate ?? 0):0.0#}, " +
$"OD {originalDifficulty?.OverallDifficulty ?? 0}→{adjustedDifficulty?.OverallDifficulty ?? 0})"; $"OD {originalDifficulty?.OverallDifficulty ?? 0}→{(adjustedDifficulty?.OverallDifficulty ?? 0):0.0#})";
} }
return string.Empty; return string.Empty;

View File

@ -46,6 +46,7 @@ namespace osu.Game.Screens.Select.Details
private readonly StatisticRow starDifficulty; private readonly StatisticRow starDifficulty;
private BeatmapDifficulty originalDifficulty; private BeatmapDifficulty originalDifficulty;
private BeatmapDifficulty adjustedDifficulty;
private bool haveRateChangedValues; private bool haveRateChangedValues;
private IBeatmapInfo beatmapInfo; private IBeatmapInfo beatmapInfo;
@ -120,24 +121,25 @@ namespace osu.Game.Screens.Select.Details
private void updateStatistics() private void updateStatistics()
{ {
IBeatmapDifficultyInfo baseDifficulty = BeatmapInfo?.Difficulty; IBeatmapDifficultyInfo baseDifficulty = BeatmapInfo?.Difficulty;
BeatmapDifficulty adjustedDifficulty = null;
if (baseDifficulty != null) if (baseDifficulty != null)
{ {
adjustedDifficulty = new BeatmapDifficulty(baseDifficulty); originalDifficulty = new BeatmapDifficulty(baseDifficulty);
foreach (var mod in mods.Value.OfType<IApplicableToDifficulty>()) foreach (var mod in mods.Value.OfType<IApplicableToDifficulty>())
mod.ApplyToDifficulty(adjustedDifficulty); mod.ApplyToDifficulty(originalDifficulty);
originalDifficulty = adjustedDifficulty; if (gameRuleset != null)
{
Ruleset ruleset = gameRuleset.Value.CreateInstance();
Ruleset ruleset = gameRuleset.Value.CreateInstance(); double rate = 1;
double rate = 1; foreach (var mod in mods.Value.OfType<IApplicableToRate>())
foreach (var mod in mods.Value.OfType<IApplicableToRate>()) rate = mod.ApplyToRate(0, rate);
rate = mod.ApplyToRate(0, rate);
adjustedDifficulty = ruleset.GetRateAdjustedDifficulty(adjustedDifficulty, rate);
haveRateChangedValues = isDifferentArOd(originalDifficulty, adjustedDifficulty); adjustedDifficulty = ruleset.GetRateAdjustedDifficulty(originalDifficulty, rate);
haveRateChangedValues = hasRateAdjustedProperties(originalDifficulty, adjustedDifficulty);
}
} }
switch (BeatmapInfo?.Ruleset.OnlineID) switch (BeatmapInfo?.Ruleset.OnlineID)
@ -202,31 +204,29 @@ namespace osu.Game.Screens.Select.Details
starDifficultyCancellationSource?.Cancel(); starDifficultyCancellationSource?.Cancel();
} }
private bool isDifferentArOd(BeatmapDifficulty a, BeatmapDifficulty b)
{
if (a == null && b == null) return false;
if (a == null || b == null) return true;
if (!Precision.AlmostEquals(a.ApproachRate, b.ApproachRate, 0.01)) return true;
if (!Precision.AlmostEquals(a.OverallDifficulty, b.OverallDifficulty, 0.01)) return true;
return false;
}
public LocalisableString TooltipText public LocalisableString TooltipText
{ {
get get
{ {
if (haveRateChangedValues) if (haveRateChangedValues)
{ {
return LocalisableString.Format("Values are changed by mods that change speed.\n" + return $"One or more values are being adjusted by mods that change speed." +
"Original values: AR = {0}, OD = {1}", originalDifficulty?.ApproachRate ?? 0, originalDifficulty?.OverallDifficulty ?? 0); $" (AR {originalDifficulty?.ApproachRate ?? 0}→{(adjustedDifficulty?.ApproachRate ?? 0):0.0#}, " +
$"OD {originalDifficulty?.OverallDifficulty ?? 0}→{(adjustedDifficulty?.OverallDifficulty ?? 0):0.0#})";
} }
return ""; return string.Empty;
} }
} }
private static bool hasRateAdjustedProperties(BeatmapDifficulty a, BeatmapDifficulty b)
{
if (!Precision.AlmostEquals(a.ApproachRate, b.ApproachRate)) return true;
if (!Precision.AlmostEquals(a.OverallDifficulty, b.OverallDifficulty)) return true;
return false;
}
public partial class StatisticRow : Container, IHasAccentColour public partial class StatisticRow : Container, IHasAccentColour
{ {
private const float value_width = 25; private const float value_width = 25;