コード例 #1
0
            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);
            }
コード例 #2
0
 public static void Highlight(this WearNTear self, Color color)
 {
     if (self.m_oldMaterials == null)
     {
         self.m_oldMaterials = new List <OldMeshData>();
         foreach (Renderer highlightRenderer in self.GetHighlightRenderers())
         {
             OldMeshData item = default;
             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;
             self.m_oldMaterials.Add(item);
         }
     }
     foreach (OldMeshData oldMaterial in self.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;
             }
         }
     }
     self.CancelInvoke("ResetHighlight");
     self.Invoke("ResetHighlight", 0.2f);
 }