1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-08 21:15:07 +08:00

introduce difficult strains globally

This commit is contained in:
Jay Lawton 2024-11-07 19:53:53 +10:00
parent 2bd12e14db
commit a5e6da76cb

View File

@ -26,10 +26,10 @@ namespace osu.Game.Rulesets.Difficulty.Skills
protected virtual int SectionLength => 400; protected virtual int SectionLength => 400;
private double currentSectionPeak; // We also keep track of the peak strain level in the current section. private double currentSectionPeak; // We also keep track of the peak strain level in the current section.
private double currentSectionEnd; private double currentSectionEnd;
private readonly List<double> strainPeaks = new List<double>(); private readonly List<double> strainPeaks = new List<double>();
protected List<double> ObjectStrains = new List<double>(); // Store individual strains
protected StrainSkill(Mod[] mods) protected StrainSkill(Mod[] mods)
: base(mods) : base(mods)
@ -57,7 +57,25 @@ namespace osu.Game.Rulesets.Difficulty.Skills
currentSectionEnd += SectionLength; currentSectionEnd += SectionLength;
} }
currentSectionPeak = Math.Max(StrainValueAt(current), currentSectionPeak); double strain = StrainValueAt(current);
currentSectionPeak = Math.Max(strain, currentSectionPeak);
// Store the strain value for the object
ObjectStrains.Add(strain);
}
/// <summary>
/// Calculates the number of strains weighted against the top strain.
/// The result is scaled by clock rate as it affects the total number of strains.
/// </summary>
public double CountDifficultStrains()
{
if (ObjectStrains.Count == 0)
return 0.0;
double consistentTopStrain = DifficultyValue() / 10; // What would the top strain be if all strain values were identical
// Use a weighted sum of all strains. Constants are arbitrary and give nice values
return ObjectStrains.Sum(s => 1.1 / (1 + Math.Exp(-10 * (s / consistentTopStrain - 0.88))));
} }
/// <summary> /// <summary>