public static bool Prefix(WearNTear __instance) { if (__instance.m_oldMaterials == null) { __instance.m_oldMaterials = new List <WearNTear.OldMeshData>(); foreach (Renderer highlightRenderer in __instance.GetHighlightRenderers()) { WearNTear.OldMeshData item = default(WearNTear.OldMeshData); item.m_materials = highlightRenderer.sharedMaterials; item.m_color = new Color[item.m_materials.Length]; item.m_emissiveColor = new Color[item.m_materials.Length]; for (int i = 0; i < item.m_materials.Length; i++) { if (item.m_materials[i].HasProperty("_Color")) { item.m_color[i] = item.m_materials[i].GetColor("_Color"); } if (item.m_materials[i].HasProperty("_EmissionColor")) { item.m_emissiveColor[i] = item.m_materials[i].GetColor("_EmissionColor"); } } item.m_renderer = highlightRenderer; __instance.m_oldMaterials.Add(item); } } Color color = new Color(0.6f, 0.8f, 1f); float supportColorValue; if (!_modEnabled) { supportColorValue = __instance.GetSupportColorValue(); if (supportColorValue >= 0f) { color = Color.Lerp(new Color(1f, 0f, 0f), new Color(0f, 1f, 0f), supportColorValue); Color.RGBToHSV(color, out var H, out var S, out var V); S = Mathf.Lerp(1f, 0.5f, supportColorValue); V = Mathf.Lerp(1.2f, 0.9f, supportColorValue); color = Color.HSVToRGB(H, S, V); } } foreach (WearNTear.OldMeshData oldMaterial in __instance.m_oldMaterials) { if ((bool)oldMaterial.m_renderer) { Material[] materials = oldMaterial.m_renderer.materials; foreach (Material obj in materials) { obj.SetColor("_EmissionColor", color * 0.4f); obj.color = color; } } } __instance.CancelInvoke("ResetHighlight"); __instance.Invoke("ResetHighlight", 0.2f); return(false); }