Add Frames support to Combine

This commit is contained in:
reaperrr
2020-02-23 17:49:51 +01:00
committed by Matthias Mailänder
parent 301d09ea8f
commit eb007fc43c

View File

@@ -261,17 +261,18 @@ namespace OpenRA.Mods.Common.Graphics
var subOffset = LoadField(sd, "Offset", float3.Zero); var subOffset = LoadField(sd, "Offset", float3.Zero);
var subFlipX = LoadField(sd, "FlipX", false); var subFlipX = LoadField(sd, "FlipX", false);
var subFlipY = LoadField(sd, "FlipY", false); var subFlipY = LoadField(sd, "FlipY", false);
var subFrames = LoadField<int[]>(sd, "Frames", null);
var subLength = 0; var subLength = 0;
Func<int, IEnumerable<int>> subGetUsedFrames = subFrameCount => Func<int, IEnumerable<int>> subGetUsedFrames = subFrameCount =>
{ {
MiniYaml subLengthYaml; MiniYaml subLengthYaml;
if (sd.TryGetValue("Length", out subLengthYaml) && subLengthYaml.Value == "*") if (sd.TryGetValue("Length", out subLengthYaml) && subLengthYaml.Value == "*")
subLength = subFrameCount - subStart; subLength = subFrames != null ? subFrames.Length : subFrameCount - subStart;
else else
subLength = LoadField(sd, "Length", 1); subLength = LoadField(sd, "Length", 1);
return Enumerable.Range(subStart, subLength); return subFrames != null ? subFrames.Skip(subStart).Take(subLength) : Enumerable.Range(subStart, subLength);
}; };
var subSrc = GetSpriteSrc(modData, tileSet, sequence, animation, sub.Key, sd); var subSrc = GetSpriteSrc(modData, tileSet, sequence, animation, sub.Key, sd);
@@ -279,9 +280,10 @@ namespace OpenRA.Mods.Common.Graphics
s => s != null ? new Sprite(s.Sheet, s => s != null ? new Sprite(s.Sheet,
FlipRectangle(s.Bounds, subFlipX, subFlipY), ZRamp, FlipRectangle(s.Bounds, subFlipX, subFlipY), ZRamp,
new float3(subFlipX ? -s.Offset.X : s.Offset.X, subFlipY ? -s.Offset.Y : s.Offset.Y, s.Offset.Z) + subOffset + offset, new float3(subFlipX ? -s.Offset.X : s.Offset.X, subFlipY ? -s.Offset.Y : s.Offset.Y, s.Offset.Z) + subOffset + offset,
s.Channel, blendMode) : null); s.Channel, blendMode) : null).ToList();
combined = combined.Concat(subSprites.Skip(subStart).Take(subLength)); var frames = subFrames != null ? subFrames.Skip(subStart).Take(subLength).ToArray() : Exts.MakeArray(subLength, i => subStart + i);
combined = combined.Concat(frames.Select(i => subSprites[i]));
} }
sprites = combined.ToArray(); sprites = combined.ToArray();