private void Write(string message, LogType type)
        {
            logMessage.Add(new LOG()
            {
                message = message,
                type    = type
            });

            if (logMessage.Count == MAXLOG)
            {
                RemoveFirstLogEntry();
            }

            RHLogger.RH_Log(message, type);
        }
        private void Write(string message, LogType type, params object[] arg)
        {
            logMessage.Add(new LOG()
            {
                message = string.Format(message, arg),
                type    = type
            });

            if (logMessage.Count == MAXLOG)
            {
                RemoveFirstLogEntry();
            }

            RHLogger.RH_Log(message, type, arg);
        }
        public static List <MaterialInfo> GetRendererInfo(this GameObject gameObject)
        {
            if (ShaderPropertyKeywords == null)
            {
                ShaderPropertyKeywords = ShaderHelper.CreateShaderPropertyList();
            }

            List <MaterialInfo> materialInfos = new List <MaterialInfo>();

            Renderer renderer = gameObject.GetComponent <Renderer>();

            if (renderer == null)
            {
                renderer = gameObject.GetComponentInChildren <Renderer>(true);
            }
            else if (renderer == null)
            {
                RHLogger.RH_Error($"Object: {gameObject.name} has no renderers!");
            }

            List <string> keywords = new List <string>();

            for (int i = 0; i < renderer.materials.Length; i++)
            {
                Material material = renderer.materials[i];

                materialInfos.Add(new MaterialInfo(material, i));

                int activeIndex = 0;

                keywords.Clear();

                material.GetTexturePropertyNames(keywords);

                for (int j = 0; j < keywords.Count; j++)
                {
                    string keyword = keywords[j];

                    if (material.HasProperty(keyword))
                    {
                        string value;

                        try
                        {
                            value = material.GetTexture(Shader.PropertyToID(keyword)).name;
                            materialInfos[i].ActiveShaders.Add(new ShaderInfo(material.shader.name, activeIndex, material.shader, keyword, value));
                            activeIndex++;
                        }
                        catch
                        {
                        }


                        for (int k = 0; k < ShaderPropertyKeywords.Count; k++)
                        {
                            string keyword2 = ShaderPropertyKeywords[j];

                            try
                            {
                                Color color = material.GetColor(keyword2);

                                if (color != transparent)
                                {
                                    materialInfos[i].ActiveShaders.Add(new ShaderInfo(material.shader.name, activeIndex, material.shader, keyword2, color.ToString()));
                                    activeIndex++;
                                }
                            }
                            catch
                            {
                            }
                        }
                    }
                }

                foreach (string item in material.shaderKeywords)
                {
                    materialInfos[i].ShaderKeywords.Add(item);
                }
            }

            return(materialInfos);
        }