mirror of
https://github.com/ppy/osu.git
synced 2025-02-15 09:42:57 +08:00
Merge pull request #11635 from bdach/storyboard-loop-type-decoding
Fix invalid numeric values for storyboard animation type parsing incorrectly
This commit is contained in:
commit
adc57dd94b
@ -129,5 +129,25 @@ namespace osu.Game.Tests.Beatmaps.Formats
|
||||
Assert.AreEqual(3456, ((StoryboardSprite)background.Elements.Single()).InitialPosition.X);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestDecodeOutOfRangeLoopAnimationType()
|
||||
{
|
||||
var decoder = new LegacyStoryboardDecoder();
|
||||
|
||||
using (var resStream = TestResources.OpenResource("animation-types.osb"))
|
||||
using (var stream = new LineBufferedReader(resStream))
|
||||
{
|
||||
var storyboard = decoder.Decode(stream);
|
||||
|
||||
StoryboardLayer foreground = storyboard.Layers.Single(l => l.Depth == 0);
|
||||
Assert.AreEqual(AnimationLoopType.LoopForever, ((StoryboardAnimation)foreground.Elements[0]).LoopType);
|
||||
Assert.AreEqual(AnimationLoopType.LoopOnce, ((StoryboardAnimation)foreground.Elements[1]).LoopType);
|
||||
Assert.AreEqual(AnimationLoopType.LoopForever, ((StoryboardAnimation)foreground.Elements[2]).LoopType);
|
||||
Assert.AreEqual(AnimationLoopType.LoopOnce, ((StoryboardAnimation)foreground.Elements[3]).LoopType);
|
||||
Assert.AreEqual(AnimationLoopType.LoopForever, ((StoryboardAnimation)foreground.Elements[4]).LoopType);
|
||||
Assert.AreEqual(AnimationLoopType.LoopForever, ((StoryboardAnimation)foreground.Elements[5]).LoopType);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
9
osu.Game.Tests/Resources/animation-types.osb
Normal file
9
osu.Game.Tests/Resources/animation-types.osb
Normal file
@ -0,0 +1,9 @@
|
||||
osu file format v14
|
||||
|
||||
[Events]
|
||||
Animation,Foreground,Centre,"forever-string.png",330,240,10,108,LoopForever
|
||||
Animation,Foreground,Centre,"once-string.png",330,240,10,108,LoopOnce
|
||||
Animation,Foreground,Centre,"forever-number.png",330,240,10,108,0
|
||||
Animation,Foreground,Centre,"once-number.png",330,240,10,108,1
|
||||
Animation,Foreground,Centre,"undefined-number.png",330,240,10,108,16
|
||||
Animation,Foreground,Centre,"omitted.png",330,240,10,108
|
@ -139,7 +139,7 @@ namespace osu.Game.Beatmaps.Formats
|
||||
// this is random as hell but taken straight from osu-stable.
|
||||
frameDelay = Math.Round(0.015 * frameDelay) * 1.186 * (1000 / 60f);
|
||||
|
||||
var loopType = split.Length > 8 ? (AnimationLoopType)Enum.Parse(typeof(AnimationLoopType), split[8]) : AnimationLoopType.LoopForever;
|
||||
var loopType = split.Length > 8 ? parseAnimationLoopType(split[8]) : AnimationLoopType.LoopForever;
|
||||
storyboardSprite = new StoryboardAnimation(path, origin, new Vector2(x, y), frameCount, frameDelay, loopType);
|
||||
storyboard.GetLayer(layer).Add(storyboardSprite);
|
||||
break;
|
||||
@ -341,6 +341,12 @@ namespace osu.Game.Beatmaps.Formats
|
||||
}
|
||||
}
|
||||
|
||||
private AnimationLoopType parseAnimationLoopType(string value)
|
||||
{
|
||||
var parsed = (AnimationLoopType)Enum.Parse(typeof(AnimationLoopType), value);
|
||||
return Enum.IsDefined(typeof(AnimationLoopType), parsed) ? parsed : AnimationLoopType.LoopForever;
|
||||
}
|
||||
|
||||
private void handleVariables(string line)
|
||||
{
|
||||
var pair = SplitKeyVal(line, '=');
|
||||
|
Loading…
Reference in New Issue
Block a user