Fix drum rolls not taking into account nodal samples when converting from drum rolls to hit circles.

This commit is contained in:
smoogipooo
2017-04-21 18:52:08 +09:00
parent a999c42d8a
commit 29fe0b471c

View File

@ -66,6 +66,7 @@ namespace osu.Game.Rulesets.Taiko.Beatmaps
var distanceData = obj as IHasDistance; var distanceData = obj as IHasDistance;
var repeatsData = obj as IHasRepeats; var repeatsData = obj as IHasRepeats;
var endTimeData = obj as IHasEndTime; var endTimeData = obj as IHasEndTime;
var curveData = obj as IHasCurve;
// Old osu! used hit sounding to determine various hit type information // Old osu! used hit sounding to determine various hit type information
List<SampleInfo> samples = obj.Samples; List<SampleInfo> samples = obj.Samples;
@ -102,16 +103,43 @@ namespace osu.Game.Rulesets.Taiko.Beatmaps
if (tickSpacing > 0 && osuDuration < 2 * speedAdjustedBeatLength) if (tickSpacing > 0 && osuDuration < 2 * speedAdjustedBeatLength)
{ {
var allSamples = new List<List<SampleInfo>>();
if (curveData != null)
{
allSamples.Add(curveData.HeadSamples);
allSamples.AddRange(curveData.RepeatSamples);
allSamples.Add(curveData.TailSamples);
}
else
allSamples.Add(samples);
int i = 0;
for (double j = obj.StartTime; j <= obj.StartTime + taikoDuration + tickSpacing / 8; j += tickSpacing) for (double j = obj.StartTime; j <= obj.StartTime + taikoDuration + tickSpacing / 8; j += tickSpacing)
{ {
// Todo: This should generate different type of hits (including strongs) List<SampleInfo> currentSamples = allSamples[i];
// depending on hitobject sound additions (not implemented fully yet) bool isRim = currentSamples.Any(s => s.Name == SampleInfo.HIT_CLAP || s.Name == SampleInfo.HIT_WHISTLE);
yield return new CentreHit
if (isRim)
{ {
StartTime = j, yield return new RimHit
Samples = obj.Samples, {
IsStrong = strong, StartTime = j,
}; Samples = currentSamples,
IsStrong = strong
};
}
else
{
yield return new CentreHit
{
StartTime = j,
Samples = currentSamples,
IsStrong = strong,
};
}
i = (i + 1) % allSamples.Count;
} }
} }
else else