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:
parent
2bd12e14db
commit
a5e6da76cb
@ -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>
|
||||||
|
Loading…
Reference in New Issue
Block a user