Fix marking color bands (#18934)

I'm not entirely sure what happens, I know it's markings being loaded from DB with the same ID as a prototype that was modified don't jive, but I'm not entirely sure if it's the best fix.
This commit is contained in:
metalgearsloth
2023-08-10 13:34:01 +10:00
committed by GitHub
parent d951064a54
commit 1f3a4bec1b

View File

@@ -303,7 +303,9 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem
for (var j = 0; j < markingPrototype.Sprites.Count; j++) for (var j = 0; j < markingPrototype.Sprites.Count; j++)
{ {
if (markingPrototype.Sprites[j] is not SpriteSpecifier.Rsi rsi) var markingSprite = markingPrototype.Sprites[j];
if (markingSprite is not SpriteSpecifier.Rsi rsi)
{ {
continue; continue;
} }
@@ -312,7 +314,7 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem
if (!sprite.LayerMapTryGet(layerId, out _)) if (!sprite.LayerMapTryGet(layerId, out _))
{ {
var layer = sprite.AddLayer(markingPrototype.Sprites[j], targetLayer + j + 1); var layer = sprite.AddLayer(markingSprite, targetLayer + j + 1);
sprite.LayerMapSet(layerId, layer); sprite.LayerMapSet(layerId, layer);
sprite.LayerSetSprite(layerId, rsi); sprite.LayerSetSprite(layerId, rsi);
} }
@@ -324,7 +326,10 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem
continue; continue;
} }
if (colors != null) // Okay so if the marking prototype is modified but we load old marking data this may no longer be valid
// and we need to check the index is correct.
// So if that happens just default to white?
if (colors != null && j < colors.Count)
{ {
sprite.LayerSetColor(layerId, colors[j]); sprite.LayerSetColor(layerId, colors[j]);
} }