1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-06 21:02:59 +08:00

Handle control point flattening of nested hit objects

This commit is contained in:
Dean Herbert 2021-09-10 16:51:10 +09:00
parent cd227213e6
commit 943e0d49f7

View File

@ -184,24 +184,8 @@ namespace osu.Game.Beatmaps.Formats
// iterate over hitobjects and pull out all required sample and difficulty changes // iterate over hitobjects and pull out all required sample and difficulty changes
foreach (var h in beatmap.HitObjects) foreach (var h in beatmap.HitObjects)
{ {
if (isOsuRuleset) extractDifficultyControlPoints(h);
{ extractSampleControlPoints(h);
var hDifficultyPoint = h.DifficultyControlPoint;
if (!hDifficultyPoint.IsRedundant(lastRelevantDifficultyPoint))
{
legacyControlPoints.Add(hDifficultyPoint.Time, hDifficultyPoint);
lastRelevantDifficultyPoint = hDifficultyPoint;
}
}
var hSamplePoint = h.SampleControlPoint;
if (!hSamplePoint.IsRedundant(lastRelevantSamplePoint))
{
legacyControlPoints.Add(hSamplePoint.Time, hSamplePoint);
lastRelevantSamplePoint = hSamplePoint;
}
} }
// handle scroll speed, which is stored as "slider velocity" in legacy formats. // handle scroll speed, which is stored as "slider velocity" in legacy formats.
@ -254,6 +238,39 @@ namespace osu.Game.Beatmaps.Formats
writer.Write(FormattableString.Invariant($"{(int)effectFlags}")); writer.Write(FormattableString.Invariant($"{(int)effectFlags}"));
writer.WriteLine(); writer.WriteLine();
} }
void extractDifficultyControlPoints(HitObject hitObject)
{
if (!isOsuRuleset)
return;
var hDifficultyPoint = hitObject.DifficultyControlPoint;
if (!hDifficultyPoint.IsRedundant(lastRelevantDifficultyPoint))
{
legacyControlPoints.Add(hDifficultyPoint.Time, hDifficultyPoint);
lastRelevantDifficultyPoint = hDifficultyPoint;
}
foreach (var nested in hitObject.NestedHitObjects)
extractDifficultyControlPoints(nested);
}
void extractSampleControlPoints(HitObject hitObject)
{
// process nested objects first as these use EndTime for legacy storage.
foreach (var nested in hitObject.NestedHitObjects)
extractSampleControlPoints(nested);
var hSamplePoint = hitObject.SampleControlPoint;
if (!hSamplePoint.IsRedundant(lastRelevantSamplePoint))
{
legacyControlPoints.Add(hSamplePoint.Time, hSamplePoint);
lastRelevantSamplePoint = hSamplePoint;
}
}
} }
private void handleColours(TextWriter writer) private void handleColours(TextWriter writer)