Handle timingpoint FormatException

This commit is contained in:
smoogipoo 2018-04-02 20:08:40 +09:00
parent d24d81d8a9
commit fd9480cfb6

View File

@ -277,87 +277,93 @@ namespace osu.Game.Beatmaps.Formats
private void handleTimingPoint(string line) private void handleTimingPoint(string line)
{ {
string[] split = line.Split(','); try
double time = getOffsetTime(double.Parse(split[0].Trim(), NumberFormatInfo.InvariantInfo));
double beatLength = double.Parse(split[1].Trim(), NumberFormatInfo.InvariantInfo);
double speedMultiplier = beatLength < 0 ? 100.0 / -beatLength : 1;
TimeSignatures timeSignature = TimeSignatures.SimpleQuadruple;
if (split.Length >= 3)
timeSignature = split[2][0] == '0' ? TimeSignatures.SimpleQuadruple : (TimeSignatures)int.Parse(split[2]);
LegacySampleBank sampleSet = defaultSampleBank;
if (split.Length >= 4)
sampleSet = (LegacySampleBank)int.Parse(split[3]);
//SampleBank sampleBank = SampleBank.Default;
//if (split.Length >= 5)
// sampleBank = (SampleBank)int.Parse(split[4]);
int sampleVolume = defaultSampleVolume;
if (split.Length >= 6)
sampleVolume = int.Parse(split[5]);
bool timingChange = true;
if (split.Length >= 7)
timingChange = split[6][0] == '1';
bool kiaiMode = false;
bool omitFirstBarSignature = false;
if (split.Length >= 8)
{ {
int effectFlags = int.Parse(split[7]); string[] split = line.Split(',');
kiaiMode = (effectFlags & 1) > 0;
omitFirstBarSignature = (effectFlags & 8) > 0;
}
string stringSampleSet = sampleSet.ToString().ToLower(); double time = getOffsetTime(double.Parse(split[0].Trim(), NumberFormatInfo.InvariantInfo));
if (stringSampleSet == @"none") double beatLength = double.Parse(split[1].Trim(), NumberFormatInfo.InvariantInfo);
stringSampleSet = @"normal"; double speedMultiplier = beatLength < 0 ? 100.0 / -beatLength : 1;
DifficultyControlPoint difficultyPoint = beatmap.ControlPointInfo.DifficultyPointAt(time); TimeSignatures timeSignature = TimeSignatures.SimpleQuadruple;
SampleControlPoint samplePoint = beatmap.ControlPointInfo.SamplePointAt(time); if (split.Length >= 3)
EffectControlPoint effectPoint = beatmap.ControlPointInfo.EffectPointAt(time); timeSignature = split[2][0] == '0' ? TimeSignatures.SimpleQuadruple : (TimeSignatures)int.Parse(split[2]);
if (timingChange) LegacySampleBank sampleSet = defaultSampleBank;
{ if (split.Length >= 4)
beatmap.ControlPointInfo.TimingPoints.Add(new TimingControlPoint sampleSet = (LegacySampleBank)int.Parse(split[3]);
//SampleBank sampleBank = SampleBank.Default;
//if (split.Length >= 5)
// sampleBank = (SampleBank)int.Parse(split[4]);
int sampleVolume = defaultSampleVolume;
if (split.Length >= 6)
sampleVolume = int.Parse(split[5]);
bool timingChange = true;
if (split.Length >= 7)
timingChange = split[6][0] == '1';
bool kiaiMode = false;
bool omitFirstBarSignature = false;
if (split.Length >= 8)
{ {
Time = time, int effectFlags = int.Parse(split[7]);
BeatLength = beatLength, kiaiMode = (effectFlags & 1) > 0;
TimeSignature = timeSignature omitFirstBarSignature = (effectFlags & 8) > 0;
}); }
}
if (speedMultiplier != difficultyPoint.SpeedMultiplier) string stringSampleSet = sampleSet.ToString().ToLower();
{ if (stringSampleSet == @"none")
beatmap.ControlPointInfo.DifficultyPoints.RemoveAll(x => x.Time == time); stringSampleSet = @"normal";
beatmap.ControlPointInfo.DifficultyPoints.Add(new DifficultyControlPoint
{
Time = time,
SpeedMultiplier = speedMultiplier
});
}
if (stringSampleSet != samplePoint.SampleBank || sampleVolume != samplePoint.SampleVolume) DifficultyControlPoint difficultyPoint = beatmap.ControlPointInfo.DifficultyPointAt(time);
{ SampleControlPoint samplePoint = beatmap.ControlPointInfo.SamplePointAt(time);
beatmap.ControlPointInfo.SamplePoints.Add(new SampleControlPoint EffectControlPoint effectPoint = beatmap.ControlPointInfo.EffectPointAt(time);
{
Time = time,
SampleBank = stringSampleSet,
SampleVolume = sampleVolume
});
}
if (kiaiMode != effectPoint.KiaiMode || omitFirstBarSignature != effectPoint.OmitFirstBarLine) if (timingChange)
{
beatmap.ControlPointInfo.EffectPoints.Add(new EffectControlPoint
{ {
Time = time, beatmap.ControlPointInfo.TimingPoints.Add(new TimingControlPoint
KiaiMode = kiaiMode, {
OmitFirstBarLine = omitFirstBarSignature Time = time,
}); BeatLength = beatLength,
TimeSignature = timeSignature
});
}
if (speedMultiplier != difficultyPoint.SpeedMultiplier)
{
beatmap.ControlPointInfo.DifficultyPoints.RemoveAll(x => x.Time == time);
beatmap.ControlPointInfo.DifficultyPoints.Add(new DifficultyControlPoint
{
Time = time,
SpeedMultiplier = speedMultiplier
});
}
if (stringSampleSet != samplePoint.SampleBank || sampleVolume != samplePoint.SampleVolume)
{
beatmap.ControlPointInfo.SamplePoints.Add(new SampleControlPoint
{
Time = time,
SampleBank = stringSampleSet,
SampleVolume = sampleVolume
});
}
if (kiaiMode != effectPoint.KiaiMode || omitFirstBarSignature != effectPoint.OmitFirstBarLine)
{
beatmap.ControlPointInfo.EffectPoints.Add(new EffectControlPoint
{
Time = time,
KiaiMode = kiaiMode,
OmitFirstBarLine = omitFirstBarSignature
});
}
}
catch (FormatException e)
{
} }
} }