1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-11 20:07:29 +08:00

Improve compatibility with older storyboards.

This commit is contained in:
Damnae 2017-09-08 12:09:45 +02:00
parent e547416193
commit 13322b4293

View File

@ -248,7 +248,7 @@ namespace osu.Game.Beatmaps.Formats
while (line.StartsWith(" ") || line.StartsWith("_")) while (line.StartsWith(" ") || line.StartsWith("_"))
{ {
++depth; ++depth;
line = line.Substring(depth); line = line.Substring(1);
} }
decodeVariables(ref line); decodeVariables(ref line);
@ -305,7 +305,7 @@ namespace osu.Game.Beatmaps.Formats
var y = float.Parse(split[5], NumberFormatInfo.InvariantInfo); var y = float.Parse(split[5], NumberFormatInfo.InvariantInfo);
var frameCount = int.Parse(split[6]); var frameCount = int.Parse(split[6]);
var frameDelay = double.Parse(split[7], NumberFormatInfo.InvariantInfo); var frameDelay = double.Parse(split[7], NumberFormatInfo.InvariantInfo);
var loopType = (AnimationLoopType)Enum.Parse(typeof(AnimationLoopType), split[8]); var loopType = split.Length > 8 ? (AnimationLoopType)Enum.Parse(typeof(AnimationLoopType), split[8]) : AnimationLoopType.LoopForever;
spriteDefinition = new AnimationDefinition(path, origin, new Vector2(x, y), frameCount, frameDelay, loopType); spriteDefinition = new AnimationDefinition(path, origin, new Vector2(x, y), frameCount, frameDelay, loopType);
beatmap.Storyboard.GetLayer(layer).Add(spriteDefinition); beatmap.Storyboard.GetLayer(layer).Add(spriteDefinition);
} }
@ -315,7 +315,7 @@ namespace osu.Game.Beatmaps.Formats
var time = double.Parse(split[1], CultureInfo.InvariantCulture); var time = double.Parse(split[1], CultureInfo.InvariantCulture);
var layer = split[2]; var layer = split[2];
var path = cleanFilename(split[3]); var path = cleanFilename(split[3]);
var volume = float.Parse(split[4], CultureInfo.InvariantCulture); var volume = split.Length > 4 ? float.Parse(split[4], CultureInfo.InvariantCulture) : 100;
beatmap.Storyboard.GetLayer(layer).Add(new SampleDefinition(path, time, volume)); beatmap.Storyboard.GetLayer(layer).Add(new SampleDefinition(path, time, volume));
} }
break; break;
@ -326,13 +326,14 @@ namespace osu.Game.Beatmaps.Formats
if (depth < 2) if (depth < 2)
timelineGroup = spriteDefinition; timelineGroup = spriteDefinition;
switch (split[0]) var commandType = split[0];
switch (commandType)
{ {
case "T": case "T":
{ {
var triggerName = split[1]; var triggerName = split[1];
var startTime = double.Parse(split[2], CultureInfo.InvariantCulture); var startTime = split.Length > 2 ? double.Parse(split[2], CultureInfo.InvariantCulture) : double.MinValue;
var endTime = double.Parse(split[3], CultureInfo.InvariantCulture); var endTime = split.Length > 3 ? double.Parse(split[3], CultureInfo.InvariantCulture) : double.MaxValue;
var groupNumber = split.Length > 4 ? int.Parse(split[4]) : 0; var groupNumber = split.Length > 4 ? int.Parse(split[4]) : 0;
timelineGroup = spriteDefinition?.AddTrigger(triggerName, startTime, endTime, groupNumber); timelineGroup = spriteDefinition?.AddTrigger(triggerName, startTime, endTime, groupNumber);
} }
@ -349,7 +350,6 @@ namespace osu.Game.Beatmaps.Formats
if (string.IsNullOrEmpty(split[3])) if (string.IsNullOrEmpty(split[3]))
split[3] = split[2]; split[3] = split[2];
var commandType = split[0];
var easing = (Easing)int.Parse(split[1]); var easing = (Easing)int.Parse(split[1]);
var startTime = double.Parse(split[2], CultureInfo.InvariantCulture); var startTime = double.Parse(split[2], CultureInfo.InvariantCulture);
var endTime = double.Parse(split[3], CultureInfo.InvariantCulture); var endTime = double.Parse(split[3], CultureInfo.InvariantCulture);
@ -434,6 +434,8 @@ namespace osu.Game.Beatmaps.Formats
} }
} }
break; break;
default:
throw new InvalidDataException($@"Unknown command type: {commandType}");
} }
} }
break; break;