Skip to content

Commit

Permalink
Improve consistency in LoadField default values.
Browse files Browse the repository at this point in the history
  • Loading branch information
pchote committed Jun 26, 2022
1 parent 8a3cdba commit 6eaa79a
Showing 1 changed file with 18 additions and 16 deletions.
34 changes: 18 additions & 16 deletions OpenRA.Mods.Common/Graphics/DefaultSpriteSequence.cs
Expand Up @@ -249,19 +249,19 @@ public DefaultSpriteSequence(ModData modData, string tileSet, SpriteCache cache,

try
{
Start = LoadField(d, nameof(Start), 0);
Start = LoadField(d, nameof(Start), Start);
ShadowStart = LoadField(d, nameof(ShadowStart), ShadowStart);
ShadowZOffset = LoadField(d, nameof(ShadowZOffset), DefaultShadowSpriteZOffset).Length;
ZOffset = LoadField(d, nameof(ZOffset), WDist.Zero).Length;
ZRamp = LoadField(d, nameof(ZRamp), 0f);
ZOffset = LoadField(d, nameof(ZOffset), new WDist(ZOffset)).Length;
ZRamp = LoadField(d, nameof(ZRamp), ZRamp);
Tick = LoadField(d, nameof(Tick), Tick);
transpose = LoadField(d, nameof(Transpose), false);
Frames = LoadField<int[]>(d, nameof(Frames), null);
IgnoreWorldTint = LoadField(d, nameof(IgnoreWorldTint), false);
transpose = LoadField(d, nameof(Transpose), Transpose);
Frames = LoadField(d, nameof(Frames), Frames);
IgnoreWorldTint = LoadField(d, nameof(IgnoreWorldTint), IgnoreWorldTint);
Scale = LoadField(d, nameof(Scale), Scale);

FlipX = LoadField(d, nameof(FlipX), false);
FlipY = LoadField(d, nameof(FlipY), false);
FlipX = LoadField(d, nameof(FlipX), FlipX);
FlipY = LoadField(d, nameof(FlipY), FlipY);

Facings = LoadField(d, nameof(Facings), Facings);
if (Facings < 0)
Expand All @@ -281,14 +281,15 @@ public DefaultSpriteSequence(ModData modData, string tileSet, SpriteCache cache,
Length = LoadField(d, nameof(Length), Length);
// Plays the animation forwards, and then in reverse
if (LoadField(d, nameof(Reverses), false))
if (LoadField(d, nameof(Reverses), Reverses))
{
var frames = Frames != null ? Frames.Skip(Start).Take(Length).ToArray() : Exts.MakeArray(Length, i => Start + i);
Frames = frames.Concat(frames.Skip(1).Take(Length - 2).Reverse()).ToArray();
Length = 2 * Length - 2;
Start = 0;
}
// Note: Defaulting to Length is intentional
Stride = LoadField(d, nameof(Stride), Length);
if (Length > Stride)
Expand Down Expand Up @@ -339,8 +340,9 @@ public DefaultSpriteSequence(ModData modData, string tileSet, SpriteCache cache,
var sd = sub.Value.ToDictionary();

// Allow per-sprite offset, flipping, start, and length
// These shouldn't inherit Start/Offset/etc from the main definition
var subStart = LoadField(sd, nameof(Start), 0);
var subOffset = LoadField(sd, nameof(Offset), Offset);
var subOffset = LoadField(sd, nameof(Offset), float3.Zero);
var subFlipX = LoadField(sd, nameof(FlipX), false);
var subFlipY = LoadField(sd, nameof(FlipY), false);
var subFrames = LoadField<int[]>(sd, nameof(Frames), null);
Expand All @@ -351,7 +353,7 @@ public DefaultSpriteSequence(ModData modData, string tileSet, SpriteCache cache,
if (sd.TryGetValue(nameof(Length), out var subLengthYaml) && subLengthYaml.Value == "*")
subLength = subFrames != null ? subFrames.Length : subFrameCount - subStart;
else
subLength = LoadField(sd, nameof(Length), Length);
subLength = LoadField(sd, nameof(Length), 1);
return subFrames != null ? subFrames.Skip(subStart).Take(subLength) : Enumerable.Range(subStart, subLength);
};
Expand Down Expand Up @@ -396,7 +398,7 @@ public DefaultSpriteSequence(ModData modData, string tileSet, SpriteCache cache,
}).ToArray();
}

Alpha = LoadField(d, nameof(Alpha), (float[])null);
Alpha = LoadField(d, nameof(Alpha), Alpha);
if (Alpha != null)
{
if (Alpha.Length == 1)
Expand All @@ -405,18 +407,18 @@ public DefaultSpriteSequence(ModData modData, string tileSet, SpriteCache cache,
throw new YamlException($"Sequence {sequence}.{animation} must define either 1 or {Length} Alpha values.");
}

if (LoadField(d, nameof(AlphaFade), false))
if (LoadField(d, nameof(AlphaFade), AlphaFade))
{
if (Alpha != null)
throw new YamlException($"Sequence {sequence}.{animation} cannot define both AlphaFade and Alpha.");

Alpha = Exts.MakeArray(Length, i => float2.Lerp(1f, 0f, i / (Length - 1f)));
}

DepthSprite = LoadField<string>(d, nameof(DepthSprite), null);
DepthSprite = LoadField<string>(d, nameof(DepthSprite), DepthSprite);
if (!string.IsNullOrEmpty(DepthSprite))
{
var depthSpriteFrame = LoadField(d, nameof(DepthSpriteFrame), 0);
var depthSpriteFrame = LoadField(d, nameof(DepthSpriteFrame), DepthSpriteFrame);
var depthOffset = LoadField(d, nameof(DepthSpriteOffset), DepthSpriteOffset);
IEnumerable<int> GetDepthFrame(int _) => new[] { depthSpriteFrame };
var ds = cache[DepthSprite, GetDepthFrame][depthSpriteFrame];
Expand All @@ -436,7 +438,7 @@ public DefaultSpriteSequence(ModData modData, string tileSet, SpriteCache cache,
}).ToArray();
}

var hasEmbeddedPalette = LoadField<bool>(d, nameof(HasEmbeddedPalette), HasEmbeddedPalette);
var hasEmbeddedPalette = LoadField(d, nameof(HasEmbeddedPalette), HasEmbeddedPalette);
if (hasEmbeddedPalette)
{
var src = GetSpriteSrc(modData, tileSet, sequence, animation, info.Value, d);
Expand Down

0 comments on commit 6eaa79a

Please sign in to comment.