diff --git a/Source/AssetRipper.Processing/LightingDataProcessor.cs b/Source/AssetRipper.Processing/LightingDataProcessor.cs index 6e4f83275..04d590c62 100644 --- a/Source/AssetRipper.Processing/LightingDataProcessor.cs +++ b/Source/AssetRipper.Processing/LightingDataProcessor.cs @@ -10,7 +10,7 @@ using AssetRipper.SourceGenerated.Classes.ClassID_108; using AssetRipper.SourceGenerated.Classes.ClassID_1120; using AssetRipper.SourceGenerated.Classes.ClassID_157; using AssetRipper.SourceGenerated.Classes.ClassID_218; -using AssetRipper.SourceGenerated.Classes.ClassID_23; +using AssetRipper.SourceGenerated.Classes.ClassID_25; using AssetRipper.SourceGenerated.Classes.ClassID_258; using AssetRipper.SourceGenerated.Extensions; using AssetRipper.SourceGenerated.Subclasses.LightmapData; @@ -90,10 +90,10 @@ namespace AssetRipper.Processing foreach (IUnityObjectBase asset in collection) { - if (asset is IMeshRenderer meshRenderer) //Need to do all renderer types + if (asset is IRenderer renderer) //Need to do all renderer types { - if ((meshRenderer.LightmapIndex_C23_Byte == byte.MaxValue || meshRenderer.LightmapIndex_C23_UInt16 == ushort.MaxValue) - && meshRenderer.LightmapIndexDynamic_C23 == ushort.MaxValue) + ushort lightmapIndex = renderer.GetLightmapIndex(); + if (lightmapIndex == ushort.MaxValue && renderer.LightmapIndexDynamic_C25 == ushort.MaxValue) { // No lightmap data associated with renderer continue; @@ -105,12 +105,12 @@ namespace AssetRipper.Processing //The lightmap index, lightmap uv scale/offset value, etc IRendererData rendererData = lightingDataAsset.LightmappedRendererData_C1120.AddNew(); - rendererData.LightmapIndex = Math.Max(meshRenderer.LightmapIndex_C23_Byte, meshRenderer.LightmapIndex_C23_UInt16); - rendererData.LightmapIndexDynamic = meshRenderer.LightmapIndexDynamic_C23; - rendererData.LightmapST.CopyValues(meshRenderer.LightmapTilingOffset_C23); - if (meshRenderer.Has_LightmapTilingOffsetDynamic_C23()) + rendererData.LightmapIndex = lightmapIndex; + rendererData.LightmapIndexDynamic = renderer.LightmapIndexDynamic_C25; + rendererData.LightmapST.CopyValues(renderer.LightmapTilingOffset_C25); + if (renderer.Has_LightmapTilingOffsetDynamic_C25()) { - rendererData.LightmapSTDynamic.CopyValues(meshRenderer.LightmapTilingOffsetDynamic_C23); + rendererData.LightmapSTDynamic.CopyValues(renderer.LightmapTilingOffsetDynamic_C25); } } else if (asset is ITerrain terrain) diff --git a/Source/AssetRipper.SourceGenerated.Extensions/RendererExtensions.cs b/Source/AssetRipper.SourceGenerated.Extensions/RendererExtensions.cs index b7ed88160..7a0326728 100644 --- a/Source/AssetRipper.SourceGenerated.Extensions/RendererExtensions.cs +++ b/Source/AssetRipper.SourceGenerated.Extensions/RendererExtensions.cs @@ -1,6 +1,7 @@ using AssetRipper.SourceGenerated.Classes.ClassID_21; using AssetRipper.SourceGenerated.Classes.ClassID_25; using AssetRipper.SourceGenerated.Enums; +using System.Diagnostics; namespace AssetRipper.SourceGenerated.Extensions { @@ -63,5 +64,19 @@ namespace AssetRipper.SourceGenerated.Extensions renderer.AutoUVMaxAngle_C25 = 89.0f; renderer.LightmapParameters_C25P = null; } + + public static ushort GetLightmapIndex(this IRenderer renderer) + { + if (renderer.Has_LightmapIndex_C25_UInt16()) + { + return renderer.LightmapIndex_C25_UInt16; + } + else + { + Debug.Assert(renderer.Has_LightmapIndex_C25_Byte()); + byte value = renderer.LightmapIndex_C25_Byte; + return value == byte.MaxValue ? ushort.MaxValue : value; + } + } } }