diff --git a/Assets/Fungus/Scripts/Components/Flowchart.cs b/Assets/Fungus/Scripts/Components/Flowchart.cs index 753b8221..10cdfa0b 100644 --- a/Assets/Fungus/Scripts/Components/Flowchart.cs +++ b/Assets/Fungus/Scripts/Components/Flowchart.cs @@ -80,6 +80,9 @@ namespace Fungus [Tooltip("The ExecuteLua command adds a global Lua variable with this name bound to the flowchart prior to executing.")] [SerializeField] protected string luaBindingName = "flowchart"; + [Tooltip("Draw the variable gui in the inspector.")] + [SerializeField] protected bool showVariablesInInspector = true; + protected static List cachedFlowcharts = new List(); protected static bool eventSystemPresent; diff --git a/Assets/Fungus/Scripts/Editor/FlowchartEditor.cs b/Assets/Fungus/Scripts/Editor/FlowchartEditor.cs index 564c38c4..c769b8a8 100644 --- a/Assets/Fungus/Scripts/Editor/FlowchartEditor.cs +++ b/Assets/Fungus/Scripts/Editor/FlowchartEditor.cs @@ -30,6 +30,7 @@ namespace Fungus.EditorUtils protected SerializedProperty hideCommandsProp; protected SerializedProperty luaEnvironmentProp; protected SerializedProperty luaBindingNameProp; + protected SerializedProperty varInspectorProp; protected Texture2D addTexture; @@ -49,6 +50,7 @@ namespace Fungus.EditorUtils hideCommandsProp = serializedObject.FindProperty("hideCommands"); luaEnvironmentProp = serializedObject.FindProperty("luaEnvironment"); luaBindingNameProp = serializedObject.FindProperty("luaBindingName"); + varInspectorProp = serializedObject.FindProperty("showVariablesInInspector"); addTexture = FungusEditorResources.AddSmall; } @@ -71,6 +73,11 @@ namespace Fungus.EditorUtils EditorGUILayout.PropertyField(luaEnvironmentProp); EditorGUILayout.PropertyField(luaBindingNameProp); + if (!FungusEditorPreferences.hideVariableInFlowchartInspector) + { + EditorGUILayout.PropertyField(varInspectorProp); + } + // Show list of commands to hide in Add Command menu ReorderableListGUI.Title(new GUIContent(hideCommandsProp.displayName, hideCommandsProp.tooltip)); ReorderableListGUI.ListField(hideCommandsProp); @@ -82,13 +89,22 @@ namespace Fungus.EditorUtils EditorWindow.GetWindow(typeof(FlowchartWindow), false, "Flowchart"); } + GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); serializedObject.ApplyModifiedProperties(); - } - public virtual void DrawVariablesGUI() + if (varInspectorProp.boolValue && !FungusEditorPreferences.hideVariableInFlowchartInspector) + { + GUILayout.Space(20); + + DrawVariablesGUI(false, Screen.width - 70); + } + + } + + public virtual void DrawVariablesGUI(bool showVariableToggleButton, int w) { serializedObject.Update(); @@ -99,7 +115,7 @@ namespace Fungus.EditorUtils t.VariablesExpanded = true; } - if (!t.VariablesExpanded) + if (showVariableToggleButton && !t.VariablesExpanded) { if (GUILayout.Button ("Variables (" + t.Variables.Count + ")", GUILayout.Height(24))) { @@ -129,11 +145,12 @@ namespace Fungus.EditorUtils } ReorderableListGUI.Title("Variables"); - VariableListAdaptor adaptor = new VariableListAdaptor(variablesProp, 0); + VariableListAdaptor adaptor = new VariableListAdaptor(variablesProp, 0, w == 0 ? VariableListAdaptor.DefaultWidth : w); ReorderableListFlags flags = ReorderableListFlags.DisableContextMenu | ReorderableListFlags.HideAddButton; ReorderableListControl.DrawControlFromState(adaptor, null, flags); + listRect = GUILayoutUtility.GetLastRect(); } else @@ -156,7 +173,7 @@ namespace Fungus.EditorUtils buttonRect.width -= 30; } - if (GUI.Button (buttonRect, "Variables")) + if (showVariableToggleButton && GUI.Button(buttonRect, "Variables")) { t.VariablesExpanded = false; } @@ -165,7 +182,8 @@ namespace Fungus.EditorUtils Rect lastRect = buttonRect; lastRect.x += 5; lastRect.y += 5; - EditorGUI.Foldout(lastRect, true, ""); + //this is not required, seems to be legacy that is hidden in the normal reorderable + //EditorGUI.Foldout(lastRect, true, ""); Rect plusRect = listRect; plusRect.x += plusRect.width - plusWidth; diff --git a/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs b/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs index faf82dc0..c21e042f 100644 --- a/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs +++ b/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs @@ -497,7 +497,7 @@ namespace Fungus.EditorUtils GUILayout.Space(8); FlowchartEditor flowchartEditor = Editor.CreateEditor (flowchart) as FlowchartEditor; - flowchartEditor.DrawVariablesGUI(); + flowchartEditor.DrawVariablesGUI(true, 0); DestroyImmediate(flowchartEditor); Rect variableWindowRect = GUILayoutUtility.GetLastRect(); diff --git a/Assets/Fungus/Scripts/Editor/FungusEditorPreferences.cs b/Assets/Fungus/Scripts/Editor/FungusEditorPreferences.cs index 50a0a881..4f8fe4ca 100644 --- a/Assets/Fungus/Scripts/Editor/FungusEditorPreferences.cs +++ b/Assets/Fungus/Scripts/Editor/FungusEditorPreferences.cs @@ -1,5 +1,6 @@ using UnityEngine; using UnityEditor; +using UnityEditor.Callbacks; namespace Fungus { @@ -10,34 +11,48 @@ namespace Fungus /// /// ref https://docs.unity3d.com/ScriptReference/PreferenceItem.html /// - public class FungusEditorPreferences + [InitializeOnLoad] + public static class FungusEditorPreferences { // Have we loaded the prefs yet private static bool prefsLoaded = false; - - public static bool hideMushroomInHierarchy = false; + + public static bool hideMushroomInHierarchy, + hideVariableInFlowchartInspector ; + + static FungusEditorPreferences() + { + LoadOnScriptLoad(); + } // Add preferences section named "My Preferences" to the Preferences Window [PreferenceItem("Fungus")] - public static void PreferencesGUI() { // Load the preferences if (!prefsLoaded) { - hideMushroomInHierarchy = EditorPrefs.GetBool("hideMushroomInHierarchy", false); - prefsLoaded = true; + LoadOnScriptLoad(); } // Preferences GUI hideMushroomInHierarchy = EditorGUILayout.Toggle("Hide Mushroom Flowchart Icon", hideMushroomInHierarchy); + hideVariableInFlowchartInspector = EditorGUILayout.Toggle("Hide Variables in Flowchart Inspector", hideVariableInFlowchartInspector); // Save the preferences if (GUI.changed) { EditorPrefs.SetBool("hideMushroomInHierarchy", hideMushroomInHierarchy); + EditorPrefs.SetBool("hideVariableInFlowchartInspector", hideVariableInFlowchartInspector); } } + + public static void LoadOnScriptLoad() + { + hideMushroomInHierarchy = EditorPrefs.GetBool("hideMushroomInHierarchy", false); + hideVariableInFlowchartInspector = EditorPrefs.GetBool("hideVariableInFlowchartInspector", true); + prefsLoaded = true; + } } } } \ No newline at end of file diff --git a/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs b/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs index 6ba38a3c..cffe8643 100644 --- a/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs +++ b/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs @@ -13,11 +13,15 @@ using Rotorz.ReorderableList; namespace Fungus.EditorUtils { public class VariableListAdaptor : IReorderableListAdaptor { - + + public static readonly int DefaultWidth = 80 + 100 + 140 + 60; + protected SerializedProperty _arrayProperty; public float fixedItemHeight; - + public int widthOfList; + + public SerializedProperty this[int index] { get { return _arrayProperty.GetArrayElementAtIndex(index); } } @@ -26,7 +30,7 @@ namespace Fungus.EditorUtils get { return _arrayProperty; } } - public VariableListAdaptor(SerializedProperty arrayProperty, float fixedItemHeight) { + public VariableListAdaptor(SerializedProperty arrayProperty, float fixedItemHeight, int widthOfList) { if (arrayProperty == null) throw new ArgumentNullException("Array property was null."); if (!arrayProperty.isArray) @@ -34,9 +38,10 @@ namespace Fungus.EditorUtils this._arrayProperty = arrayProperty; this.fixedItemHeight = fixedItemHeight; + this.widthOfList = widthOfList; } - public VariableListAdaptor(SerializedProperty arrayProperty) : this(arrayProperty, 0f) { + public VariableListAdaptor(SerializedProperty arrayProperty) : this(arrayProperty, 0f, DefaultWidth) { } public int Count { @@ -103,7 +108,14 @@ namespace Fungus.EditorUtils return; } - float[] widths = { 80, 100, 140, 60 }; + int width = widthOfList; + int totalRatio = DefaultWidth; + + + float[] widths = { (80.0f/ totalRatio) * width, + (100.0f / totalRatio) * width, + (140.0f/ totalRatio) * width, + (60.0f/ totalRatio) * width }; Rect[] rects = new Rect[4]; for (int i = 0; i < 4; ++i)