mirror of
https://github.com/osukey/osukey.git
synced 2025-05-30 01:47:30 +09:00
Merge pull request #8195 from smoogipoo/fix-storyboard-crashes
Fix crashes on some storyboards
This commit is contained in:
commit
dbfbcca29c
@ -99,7 +99,7 @@ namespace osu.Game.Tests.Beatmaps.Formats
|
|||||||
var storyboard = decoder.Decode(stream);
|
var storyboard = decoder.Decode(stream);
|
||||||
|
|
||||||
StoryboardLayer background = storyboard.Layers.Single(l => l.Depth == 3);
|
StoryboardLayer background = storyboard.Layers.Single(l => l.Depth == 3);
|
||||||
Assert.AreEqual(123456, ((StoryboardSprite)background.Elements.Single()).InitialPosition.X);
|
Assert.AreEqual(3456, ((StoryboardSprite)background.Elements.Single()).InitialPosition.X);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
[Variables]
|
[Variables]
|
||||||
$var=1234
|
$var=34
|
||||||
|
|
||||||
[Events]
|
[Events]
|
||||||
Sprite,Background,TopCentre,"img.jpg",$var56,240
|
Sprite,Background,TopCentre,"img.jpg",$var56,240
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using osuTK;
|
using osuTK;
|
||||||
using osuTK.Graphics;
|
using osuTK.Graphics;
|
||||||
@ -93,8 +92,8 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
var layer = parseLayer(split[1]);
|
var layer = parseLayer(split[1]);
|
||||||
var origin = parseOrigin(split[2]);
|
var origin = parseOrigin(split[2]);
|
||||||
var path = CleanFilename(split[3]);
|
var path = CleanFilename(split[3]);
|
||||||
var x = float.Parse(split[4], NumberFormatInfo.InvariantInfo);
|
var x = Parsing.ParseFloat(split[4], Parsing.MAX_COORDINATE_VALUE);
|
||||||
var y = float.Parse(split[5], NumberFormatInfo.InvariantInfo);
|
var y = Parsing.ParseFloat(split[5], Parsing.MAX_COORDINATE_VALUE);
|
||||||
storyboardSprite = new StoryboardSprite(path, origin, new Vector2(x, y));
|
storyboardSprite = new StoryboardSprite(path, origin, new Vector2(x, y));
|
||||||
storyboard.GetLayer(layer).Add(storyboardSprite);
|
storyboard.GetLayer(layer).Add(storyboardSprite);
|
||||||
break;
|
break;
|
||||||
@ -105,10 +104,10 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
var layer = parseLayer(split[1]);
|
var layer = parseLayer(split[1]);
|
||||||
var origin = parseOrigin(split[2]);
|
var origin = parseOrigin(split[2]);
|
||||||
var path = CleanFilename(split[3]);
|
var path = CleanFilename(split[3]);
|
||||||
var x = float.Parse(split[4], NumberFormatInfo.InvariantInfo);
|
var x = Parsing.ParseFloat(split[4], Parsing.MAX_COORDINATE_VALUE);
|
||||||
var y = float.Parse(split[5], NumberFormatInfo.InvariantInfo);
|
var y = Parsing.ParseFloat(split[5], Parsing.MAX_COORDINATE_VALUE);
|
||||||
var frameCount = int.Parse(split[6]);
|
var frameCount = Parsing.ParseInt(split[6]);
|
||||||
var frameDelay = double.Parse(split[7], NumberFormatInfo.InvariantInfo);
|
var frameDelay = Parsing.ParseDouble(split[7]);
|
||||||
var loopType = split.Length > 8 ? (AnimationLoopType)Enum.Parse(typeof(AnimationLoopType), split[8]) : AnimationLoopType.LoopForever;
|
var loopType = split.Length > 8 ? (AnimationLoopType)Enum.Parse(typeof(AnimationLoopType), split[8]) : AnimationLoopType.LoopForever;
|
||||||
storyboardSprite = new StoryboardAnimation(path, origin, new Vector2(x, y), frameCount, frameDelay, loopType);
|
storyboardSprite = new StoryboardAnimation(path, origin, new Vector2(x, y), frameCount, frameDelay, loopType);
|
||||||
storyboard.GetLayer(layer).Add(storyboardSprite);
|
storyboard.GetLayer(layer).Add(storyboardSprite);
|
||||||
@ -117,10 +116,10 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
|
|
||||||
case LegacyEventType.Sample:
|
case LegacyEventType.Sample:
|
||||||
{
|
{
|
||||||
var time = double.Parse(split[1], CultureInfo.InvariantCulture);
|
var time = Parsing.ParseDouble(split[1]);
|
||||||
var layer = parseLayer(split[2]);
|
var layer = parseLayer(split[2]);
|
||||||
var path = CleanFilename(split[3]);
|
var path = CleanFilename(split[3]);
|
||||||
var volume = split.Length > 4 ? float.Parse(split[4], CultureInfo.InvariantCulture) : 100;
|
var volume = split.Length > 4 ? Parsing.ParseFloat(split[4]) : 100;
|
||||||
storyboard.GetLayer(layer).Add(new StoryboardSampleInfo(path, time, (int)volume));
|
storyboard.GetLayer(layer).Add(new StoryboardSampleInfo(path, time, (int)volume));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -138,17 +137,17 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
case "T":
|
case "T":
|
||||||
{
|
{
|
||||||
var triggerName = split[1];
|
var triggerName = split[1];
|
||||||
var startTime = split.Length > 2 ? double.Parse(split[2], CultureInfo.InvariantCulture) : double.MinValue;
|
var startTime = split.Length > 2 ? Parsing.ParseDouble(split[2]) : double.MinValue;
|
||||||
var endTime = split.Length > 3 ? double.Parse(split[3], CultureInfo.InvariantCulture) : double.MaxValue;
|
var endTime = split.Length > 3 ? Parsing.ParseDouble(split[3]) : double.MaxValue;
|
||||||
var groupNumber = split.Length > 4 ? int.Parse(split[4]) : 0;
|
var groupNumber = split.Length > 4 ? Parsing.ParseInt(split[4]) : 0;
|
||||||
timelineGroup = storyboardSprite?.AddTrigger(triggerName, startTime, endTime, groupNumber);
|
timelineGroup = storyboardSprite?.AddTrigger(triggerName, startTime, endTime, groupNumber);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "L":
|
case "L":
|
||||||
{
|
{
|
||||||
var startTime = double.Parse(split[1], CultureInfo.InvariantCulture);
|
var startTime = Parsing.ParseDouble(split[1]);
|
||||||
var loopCount = int.Parse(split[2]);
|
var loopCount = Parsing.ParseInt(split[2]);
|
||||||
timelineGroup = storyboardSprite?.AddLoop(startTime, loopCount);
|
timelineGroup = storyboardSprite?.AddLoop(startTime, loopCount);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -158,52 +157,52 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
if (string.IsNullOrEmpty(split[3]))
|
if (string.IsNullOrEmpty(split[3]))
|
||||||
split[3] = split[2];
|
split[3] = split[2];
|
||||||
|
|
||||||
var easing = (Easing)int.Parse(split[1]);
|
var easing = (Easing)Parsing.ParseInt(split[1]);
|
||||||
var startTime = double.Parse(split[2], CultureInfo.InvariantCulture);
|
var startTime = Parsing.ParseDouble(split[2]);
|
||||||
var endTime = double.Parse(split[3], CultureInfo.InvariantCulture);
|
var endTime = Parsing.ParseDouble(split[3]);
|
||||||
|
|
||||||
switch (commandType)
|
switch (commandType)
|
||||||
{
|
{
|
||||||
case "F":
|
case "F":
|
||||||
{
|
{
|
||||||
var startValue = float.Parse(split[4], CultureInfo.InvariantCulture);
|
var startValue = Parsing.ParseFloat(split[4]);
|
||||||
var endValue = split.Length > 5 ? float.Parse(split[5], CultureInfo.InvariantCulture) : startValue;
|
var endValue = split.Length > 5 ? Parsing.ParseFloat(split[5]) : startValue;
|
||||||
timelineGroup?.Alpha.Add(easing, startTime, endTime, startValue, endValue);
|
timelineGroup?.Alpha.Add(easing, startTime, endTime, startValue, endValue);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "S":
|
case "S":
|
||||||
{
|
{
|
||||||
var startValue = float.Parse(split[4], CultureInfo.InvariantCulture);
|
var startValue = Parsing.ParseFloat(split[4]);
|
||||||
var endValue = split.Length > 5 ? float.Parse(split[5], CultureInfo.InvariantCulture) : startValue;
|
var endValue = split.Length > 5 ? Parsing.ParseFloat(split[5]) : startValue;
|
||||||
timelineGroup?.Scale.Add(easing, startTime, endTime, startValue, endValue);
|
timelineGroup?.Scale.Add(easing, startTime, endTime, startValue, endValue);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "V":
|
case "V":
|
||||||
{
|
{
|
||||||
var startX = float.Parse(split[4], CultureInfo.InvariantCulture);
|
var startX = Parsing.ParseFloat(split[4]);
|
||||||
var startY = float.Parse(split[5], CultureInfo.InvariantCulture);
|
var startY = Parsing.ParseFloat(split[5]);
|
||||||
var endX = split.Length > 6 ? float.Parse(split[6], CultureInfo.InvariantCulture) : startX;
|
var endX = split.Length > 6 ? Parsing.ParseFloat(split[6]) : startX;
|
||||||
var endY = split.Length > 7 ? float.Parse(split[7], CultureInfo.InvariantCulture) : startY;
|
var endY = split.Length > 7 ? Parsing.ParseFloat(split[7]) : startY;
|
||||||
timelineGroup?.VectorScale.Add(easing, startTime, endTime, new Vector2(startX, startY), new Vector2(endX, endY));
|
timelineGroup?.VectorScale.Add(easing, startTime, endTime, new Vector2(startX, startY), new Vector2(endX, endY));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "R":
|
case "R":
|
||||||
{
|
{
|
||||||
var startValue = float.Parse(split[4], CultureInfo.InvariantCulture);
|
var startValue = Parsing.ParseFloat(split[4]);
|
||||||
var endValue = split.Length > 5 ? float.Parse(split[5], CultureInfo.InvariantCulture) : startValue;
|
var endValue = split.Length > 5 ? Parsing.ParseFloat(split[5]) : startValue;
|
||||||
timelineGroup?.Rotation.Add(easing, startTime, endTime, MathUtils.RadiansToDegrees(startValue), MathUtils.RadiansToDegrees(endValue));
|
timelineGroup?.Rotation.Add(easing, startTime, endTime, MathUtils.RadiansToDegrees(startValue), MathUtils.RadiansToDegrees(endValue));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "M":
|
case "M":
|
||||||
{
|
{
|
||||||
var startX = float.Parse(split[4], CultureInfo.InvariantCulture);
|
var startX = Parsing.ParseFloat(split[4]);
|
||||||
var startY = float.Parse(split[5], CultureInfo.InvariantCulture);
|
var startY = Parsing.ParseFloat(split[5]);
|
||||||
var endX = split.Length > 6 ? float.Parse(split[6], CultureInfo.InvariantCulture) : startX;
|
var endX = split.Length > 6 ? Parsing.ParseFloat(split[6]) : startX;
|
||||||
var endY = split.Length > 7 ? float.Parse(split[7], CultureInfo.InvariantCulture) : startY;
|
var endY = split.Length > 7 ? Parsing.ParseFloat(split[7]) : startY;
|
||||||
timelineGroup?.X.Add(easing, startTime, endTime, startX, endX);
|
timelineGroup?.X.Add(easing, startTime, endTime, startX, endX);
|
||||||
timelineGroup?.Y.Add(easing, startTime, endTime, startY, endY);
|
timelineGroup?.Y.Add(easing, startTime, endTime, startY, endY);
|
||||||
break;
|
break;
|
||||||
@ -211,28 +210,28 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
|
|
||||||
case "MX":
|
case "MX":
|
||||||
{
|
{
|
||||||
var startValue = float.Parse(split[4], CultureInfo.InvariantCulture);
|
var startValue = Parsing.ParseFloat(split[4]);
|
||||||
var endValue = split.Length > 5 ? float.Parse(split[5], CultureInfo.InvariantCulture) : startValue;
|
var endValue = split.Length > 5 ? Parsing.ParseFloat(split[5]) : startValue;
|
||||||
timelineGroup?.X.Add(easing, startTime, endTime, startValue, endValue);
|
timelineGroup?.X.Add(easing, startTime, endTime, startValue, endValue);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "MY":
|
case "MY":
|
||||||
{
|
{
|
||||||
var startValue = float.Parse(split[4], CultureInfo.InvariantCulture);
|
var startValue = Parsing.ParseFloat(split[4]);
|
||||||
var endValue = split.Length > 5 ? float.Parse(split[5], CultureInfo.InvariantCulture) : startValue;
|
var endValue = split.Length > 5 ? Parsing.ParseFloat(split[5]) : startValue;
|
||||||
timelineGroup?.Y.Add(easing, startTime, endTime, startValue, endValue);
|
timelineGroup?.Y.Add(easing, startTime, endTime, startValue, endValue);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "C":
|
case "C":
|
||||||
{
|
{
|
||||||
var startRed = float.Parse(split[4], CultureInfo.InvariantCulture);
|
var startRed = Parsing.ParseFloat(split[4]);
|
||||||
var startGreen = float.Parse(split[5], CultureInfo.InvariantCulture);
|
var startGreen = Parsing.ParseFloat(split[5]);
|
||||||
var startBlue = float.Parse(split[6], CultureInfo.InvariantCulture);
|
var startBlue = Parsing.ParseFloat(split[6]);
|
||||||
var endRed = split.Length > 7 ? float.Parse(split[7], CultureInfo.InvariantCulture) : startRed;
|
var endRed = split.Length > 7 ? Parsing.ParseFloat(split[7]) : startRed;
|
||||||
var endGreen = split.Length > 8 ? float.Parse(split[8], CultureInfo.InvariantCulture) : startGreen;
|
var endGreen = split.Length > 8 ? Parsing.ParseFloat(split[8]) : startGreen;
|
||||||
var endBlue = split.Length > 9 ? float.Parse(split[9], CultureInfo.InvariantCulture) : startBlue;
|
var endBlue = split.Length > 9 ? Parsing.ParseFloat(split[9]) : startBlue;
|
||||||
timelineGroup?.Colour.Add(easing, startTime, endTime,
|
timelineGroup?.Colour.Add(easing, startTime, endTime,
|
||||||
new Color4(startRed / 255f, startGreen / 255f, startBlue / 255f, 1),
|
new Color4(startRed / 255f, startGreen / 255f, startBlue / 255f, 1),
|
||||||
new Color4(endRed / 255f, endGreen / 255f, endBlue / 255f, 1));
|
new Color4(endRed / 255f, endGreen / 255f, endBlue / 255f, 1));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user