public static void SetUpCollectionNavigation( string collectionLabel, SceneExplorerState state, ReferenceChain refChain, ReferenceChain oldRefChain, int collectionSize, out uint arrayStart, out uint arrayEnd) { GUILayout.BeginHorizontal(); SceneExplorerCommon.InsertIndent(refChain.Indentation); GUILayout.Label($"{collectionLabel} size: {collectionSize}"); if (!state.SelectedArrayStartIndices.TryGetValue(refChain.UniqueId, out arrayStart)) { state.SelectedArrayStartIndices.Add(refChain.UniqueId, 0); } if (!state.SelectedArrayEndIndices.TryGetValue(refChain.UniqueId, out arrayEnd)) { state.SelectedArrayEndIndices.Add(refChain.UniqueId, 32); arrayEnd = 32; } arrayStart = GUIControls.NumericValueField($"{oldRefChain}.arrayStart", "Start index", arrayStart); arrayEnd = GUIControls.NumericValueField($"{oldRefChain}.arrayEnd", "End index", arrayEnd); GUILayout.Label("(32 items max)"); var pageSize = (uint)Mathf.Clamp(arrayEnd - arrayStart + 1, 1, Mathf.Min(32, collectionSize - arrayStart, arrayEnd + 1)); if (GUILayout.Button("◄", GUILayout.ExpandWidth(false))) { arrayStart -= pageSize; arrayEnd -= pageSize; } if (GUILayout.Button("►", GUILayout.ExpandWidth(false))) { arrayStart += pageSize; arrayEnd += pageSize; } arrayStart = (uint)Mathf.Clamp(arrayStart, 0, collectionSize - pageSize); arrayEnd = (uint)Mathf.Max(0, Mathf.Clamp(arrayEnd, pageSize - 1, collectionSize - 1)); if (arrayStart > arrayEnd) { arrayEnd = arrayStart; } if (arrayEnd - arrayStart > 32) { arrayEnd = arrayStart + 32; arrayEnd = (uint)Mathf.Max(0, Mathf.Clamp(arrayEnd, 32, collectionSize - 1)); } state.SelectedArrayStartIndices[refChain.UniqueId] = arrayStart; state.SelectedArrayEndIndices[refChain.UniqueId] = arrayEnd; GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); }
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); }
private void DrawExpandedHeader() { GUILayout.BeginHorizontal(); GUILayout.Label("Log message format:", GUILayout.ExpandWidth(false)); Config.ConsoleFormatString = GUILayout.TextField(Config.ConsoleFormatString, GUILayout.ExpandWidth(true)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Max items in history:", GUILayout.ExpandWidth(false)); Config.ConsoleMaxHistoryLength = GUIControls.NumericValueField("ConsoleMaxItemsInHistory", string.Empty, Config.ConsoleMaxHistoryLength); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Show console on:", GUILayout.ExpandWidth(false)); GUILayout.FlexibleSpace(); GUILayout.Label("Message", GUILayout.ExpandWidth(false)); Config.ShowConsoleOnMessage = GUILayout.Toggle(Config.ShowConsoleOnMessage, string.Empty, GUILayout.ExpandWidth(false)); GUILayout.FlexibleSpace(); GUILayout.Label("Warning", GUILayout.ExpandWidth(false)); Config.ShowConsoleOnWarning = GUILayout.Toggle(Config.ShowConsoleOnWarning, string.Empty, GUILayout.ExpandWidth(false)); GUILayout.FlexibleSpace(); GUILayout.Label("Error", GUILayout.ExpandWidth(false)); Config.ShowConsoleOnError = GUILayout.Toggle(Config.ShowConsoleOnError, string.Empty, GUILayout.ExpandWidth(false)); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Auto-scroll on new messages:"); Config.ConsoleAutoScrollToBottom = GUILayout.Toggle(Config.ConsoleAutoScrollToBottom, string.Empty); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("▲", GUILayout.ExpandWidth(false))) { headerExpanded = false; RecalculateAreas(); } GUILayout.Label("Hide console configuration"); GUILayout.FlexibleSpace(); if (GUILayout.Button("Save")) { MainWindow.Instance.SaveConfig(); } if (GUILayout.Button("Reset")) { var template = new ModConfiguration(); Config.ConsoleMaxHistoryLength = template.ConsoleMaxHistoryLength; Config.ConsoleFormatString = template.ConsoleFormatString; Config.ShowConsoleOnMessage = template.ShowConsoleOnMessage; Config.ShowConsoleOnWarning = template.ShowConsoleOnWarning; Config.ShowConsoleOnError = template.ShowConsoleOnError; MainWindow.Instance.SaveConfig(); } if (GUILayout.Button("Clear", GUILayout.ExpandWidth(false))) { lock (historyLock) { history.Clear(); } } GUILayout.EndHorizontal(); }