public static void OnSceneReflectUnityEngineMaterial( SceneExplorerState state, ReferenceChain refChain, Material material) { Debug.Log($"OnSceneReflectUnityEngineMaterial(): " + System.Environment.StackTrace); if (!SceneExplorerCommon.SceneTreeCheckDepth(refChain)) { return; } if (material == null) { SceneExplorerCommon.OnSceneTreeMessage(refChain, "null"); return; } GUILayout.BeginHorizontal(); GUI.contentColor = Color.white; GUILayout.Label("Special Properties:"); GUILayout.EndHorizontal(); foreach (var prop in ShaderUtil.GetTextureProperties()) { if (!material.HasProperty(prop)) { continue; } var value = material.GetTexture(prop); if (value == null) { continue; } var newRefChain = refChain.Add(prop); var type = value.GetType(); GUILayout.BeginHorizontal(GUIWindow.HighlightStyle); SceneExplorerCommon.InsertIndent(newRefChain.Indentation + 1); GUIExpander.ExpanderControls(state, newRefChain, type); GUI.contentColor = MainWindow.Instance.Config.TypeColor; GUILayout.Label(type.ToString() + " "); GUI.contentColor = MainWindow.Instance.Config.NameColor; GUILayout.Label(prop); GUI.contentColor = Color.white; GUILayout.Label(" = "); GUI.contentColor = MainWindow.Instance.Config.ValueColor; GUILayout.Label(value.ToString()); GUI.contentColor = Color.white; GUILayout.FlexibleSpace(); GUIButtons.SetupCommonButtons(newRefChain, value, valueIndex: 0); var doPaste = GUIButtons.SetupPasteButon(type, value, out var paste); if (value != null) { GUIButtons.SetupJumpButton(value, newRefChain); } GUILayout.EndHorizontal(); if (!TypeUtil.IsSpecialType(type) && state.ExpandedObjects.Contains(newRefChain.UniqueId)) { GUIReflect.OnSceneTreeReflect(state, newRefChain, value, false); } if (doPaste) { material.SetTexture(prop, (Texture)paste); } } foreach (var prop in ShaderUtil.GetColorProperties()) { if (!material.HasProperty(prop)) { continue; } var value = material.GetColor(prop); var newRefChain = refChain.Add(prop); var type = value.GetType(); GUILayout.BeginHorizontal(); SceneExplorerCommon.InsertIndent(newRefChain.Indentation + 1); GUIExpander.ExpanderControls(state, newRefChain, type); GUI.contentColor = MainWindow.Instance.Config.TypeColor; GUILayout.Label(type.ToString() + " "); GUI.contentColor = MainWindow.Instance.Config.NameColor; GUILayout.Label(prop); GUI.contentColor = Color.white; GUILayout.Label(" = "); GUI.contentColor = MainWindow.Instance.Config.ValueColor; var newColor = GUIControls.CustomValueField(newRefChain.UniqueId, string.Empty, GUIControls.PresentColor, value); if (newColor != value) { material.SetColor(prop, newColor); } GUI.contentColor = Color.white; GUILayout.FlexibleSpace(); GUIButtons.SetupCommonButtons(newRefChain, value, valueIndex: 0); var doPaste = GUIButtons.SetupPasteButon(type, value, out var paste); GUIButtons.SetupJumpButton(value, newRefChain); GUILayout.EndHorizontal(); if (!TypeUtil.IsSpecialType(type) && state.ExpandedObjects.Contains(newRefChain.UniqueId)) { GUIReflect.OnSceneTreeReflect(state, newRefChain, value, false); } if (doPaste) { material.SetColor(prop, (Color)paste); } } foreach (var prop in ShaderUtil.GetFloatProperties()) { if (!material.HasProperty(prop)) { continue; } var value = material.GetFloat(prop); var newRefChain = refChain.Add(prop); var type = value.GetType(); GUILayout.BeginHorizontal(); SceneExplorerCommon.InsertIndent(newRefChain.Indentation + 1); GUIExpander.ExpanderControls(state, newRefChain, type); GUI.contentColor = MainWindow.Instance.Config.TypeColor; GUILayout.Label(type.ToString() + " "); GUI.contentColor = MainWindow.Instance.Config.NameColor; GUILayout.Label(prop); GUI.contentColor = Color.white; GUILayout.Label(" = "); GUI.contentColor = MainWindow.Instance.Config.ValueColor; var newValue = GUIControls.NumericValueField(newRefChain.UniqueId, string.Empty, value); if (newValue != value) { material.SetFloat(prop, newValue); } GUI.contentColor = Color.white; GUILayout.FlexibleSpace(); GUIButtons.SetupCommonButtons(newRefChain, value, 0); var doPaste = GUIButtons.SetupPasteButon(type, value, out var paste); GUIButtons.SetupJumpButton(value, newRefChain); GUILayout.EndHorizontal(); if (!TypeUtil.IsSpecialType(type) && state.ExpandedObjects.Contains(newRefChain.UniqueId)) { GUIReflect.OnSceneTreeReflect(state, newRefChain, value, false); } if (doPaste) { material.SetColor(prop, (Color)paste); } } foreach (var prop in ShaderUtil.GetVectorProperties()) { if (!material.HasProperty(prop)) { continue; } var value = material.GetVector(prop); var newRefChain = refChain.Add(prop); var type = value.GetType(); GUILayout.BeginHorizontal(); SceneExplorerCommon.InsertIndent(newRefChain.Indentation + 1); GUIExpander.ExpanderControls(state, newRefChain, type); GUI.contentColor = MainWindow.Instance.Config.TypeColor; GUILayout.Label(type.ToString() + " "); GUI.contentColor = MainWindow.Instance.Config.NameColor; GUILayout.Label(prop); GUI.contentColor = Color.white; GUILayout.Label(" = "); GUI.contentColor = MainWindow.Instance.Config.ValueColor; var newValue = GUIControls.PresentVector4(newRefChain.UniqueId, value); if (newValue != value) { material.SetVector(prop, newValue); } GUI.contentColor = Color.white; GUILayout.FlexibleSpace(); GUIButtons.SetupCommonButtons(newRefChain, value, valueIndex: 0); var doPaste = GUIButtons.SetupPasteButon(type, value, out var paste); GUIButtons.SetupJumpButton(value, newRefChain); GUILayout.EndHorizontal(); if (!TypeUtil.IsSpecialType(type) && state.ExpandedObjects.Contains(newRefChain.UniqueId)) { GUIReflect.OnSceneTreeReflect(state, newRefChain, value, false); } if (doPaste) { material.SetColor(prop, (Color)paste); } } var shaderKeywords = material.shaderKeywords; if (shaderKeywords != null && shaderKeywords.Length > 0) { var valueTyoe = shaderKeywords.GetType(); GUILayout.BeginHorizontal(); SceneExplorerCommon.InsertIndent(refChain.Indentation + 2); GUI.contentColor = MainWindow.Instance.Config.TypeColor; GUILayout.Label(valueTyoe.ToString() + " "); GUI.contentColor = MainWindow.Instance.Config.NameColor; GUILayout.Label("Shader keywords "); GUI.contentColor = Color.white; GUILayout.Label(" = "); GUI.contentColor = MainWindow.Instance.Config.ValueColor; GUILayout.Label(string.Join(", ", shaderKeywords)); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); } GUIReflect.OnSceneTreeReflect(state, refChain, material, true); }
public static void OnSceneReflectUnityEngineMaterial(SceneExplorerState state, ReferenceChain refChain, Material material) { if (!SceneExplorerCommon.SceneTreeCheckDepth(refChain)) { return; } if (material == null) { SceneExplorerCommon.OnSceneTreeMessage(refChain, "null"); return; } ReferenceChain oldRefChain = refChain; foreach (var prop in textureProps) { if (!material.HasProperty(prop)) { continue; } var value = material.GetTexture(prop); if (value == null) { continue; } refChain = oldRefChain.Add(prop); var type = value.GetType(); GUILayout.BeginHorizontal(); GUILayout.Space(ModTools.Instance.config.sceneExplorerTreeIdentSpacing * (refChain.Ident + 1)); GUIExpander.ExpanderControls(state, refChain, type); GUI.contentColor = ModTools.Instance.config.typeColor; GUILayout.Label(type.ToString() + " "); GUI.contentColor = ModTools.Instance.config.nameColor; GUILayout.Label(prop); GUI.contentColor = Color.white; GUILayout.Label(" = "); GUI.contentColor = ModTools.Instance.config.valueColor; GUILayout.Label(value.ToString()); GUI.contentColor = Color.white; GUILayout.FlexibleSpace(); GUIButtons.SetupButtons(type, value, refChain); object paste; var doPaste = GUIButtons.SetupPasteButon(type, out paste); GUILayout.EndHorizontal(); if (!TypeUtil.IsSpecialType(type) && state.expandedObjects.ContainsKey(refChain)) { GUIReflect.OnSceneTreeReflect(state, refChain, value); } if (doPaste) { material.SetTexture(prop, (Texture)paste); } } foreach (string prop in colorProps) { if (!material.HasProperty(prop)) { continue; } Color value = material.GetColor(prop); refChain = oldRefChain.Add(prop); var type = value.GetType(); GUILayout.BeginHorizontal(); GUILayout.Space(ModTools.Instance.config.sceneExplorerTreeIdentSpacing * (refChain.Ident + 1)); GUIExpander.ExpanderControls(state, refChain, type); GUI.contentColor = ModTools.Instance.config.typeColor; GUILayout.Label(type.ToString() + " "); GUI.contentColor = ModTools.Instance.config.nameColor; GUILayout.Label(prop); GUI.contentColor = Color.white; GUILayout.Label(" = "); var f = value; GUI.contentColor = ModTools.Instance.config.valueColor; var propertyCopy = prop; GUIControls.ColorField(refChain.ToString(), "", ref f, 0.0f, null, true, true, color => { material.SetColor(propertyCopy, color); }); if (f != value) { material.SetColor(prop, f); } GUI.contentColor = Color.white; GUILayout.FlexibleSpace(); GUIButtons.SetupButtons(type, value, refChain); object paste; var doPaste = GUIButtons.SetupPasteButon(type, out paste); GUILayout.EndHorizontal(); if (!TypeUtil.IsSpecialType(type) && state.expandedObjects.ContainsKey(refChain)) { GUIReflect.OnSceneTreeReflect(state, refChain, value); } if (doPaste) { material.SetColor(prop, (Color)paste); } } // GUILayout.BeginHorizontal(); // GUILayout.Space(ModTools.Instance.config.sceneExplorerTreeIdentSpacing * (refChain.Ident + 1)); // GUI.contentColor = ModTools.Instance.config.typeColor; // // GUILayout.Label("Shader:"); // // GUI.contentColor = ModTools.Instance.config.nameColor; // // var shaders = Resources.FindObjectsOfTypeAll<Shader>(); // Array.Sort(shaders, (a, b) => string.Compare(a.name, b.name, StringComparison.Ordinal)); // var availableShaders = shaders.Select(s => s.name).ToArray(); // var currentShader = material.shader; // var selectedShader = Array.IndexOf(shaders, currentShader); // // var newSelectedShader = GUIComboBox.Box(selectedShader, availableShaders, "SceneExplorerShadersComboBox"); // if (newSelectedShader != selectedShader) // { // material.shader = shaders[newSelectedShader]; // } // GUILayout.FlexibleSpace(); // GUILayout.EndHorizontal(); GUIReflect.OnSceneTreeReflect(state, refChain, material, true); }