From 265b1b2f83b18911be3d2d24ad337d2374e7123e Mon Sep 17 00:00:00 2001 From: desktop-maesty/steve Date: Tue, 15 May 2018 20:01:29 +1000 Subject: [PATCH 01/12] Isolated rotorz to CommandListAdaptor and VariableListAdaptor -some lists/arrays were reorderable when they did not need to be and thus are removed for right now --- Assets/Fungus/Scripts/Commands/SetCollider.cs | 5 +++ Assets/Fungus/Scripts/Editor/BlockEditor.cs | 16 +------- .../Fungus/Scripts/Editor/CharacterEditor.cs | 4 +- Assets/Fungus/Scripts/Editor/CommandEditor.cs | 33 +++++++++++++-- .../Scripts/Editor/CommandListAdaptor.cs | 18 +++++++++ .../Fungus/Scripts/Editor/FlowchartEditor.cs | 13 ++---- .../Fungus/Scripts/Editor/SaveDataEditor.cs | 34 ---------------- .../Scripts/Editor/SaveDataEditor.cs.meta | 12 ------ .../Fungus/Scripts/Editor/SaveMenuEditor.cs | 1 - .../Scripts/Editor/SavePointLoadedEditor.cs | 30 -------------- .../Editor/SavePointLoadedEditor.cs.meta | 12 ------ .../Scripts/Editor/SetColliderEditor.cs | 40 ------------------- .../Scripts/Editor/SetColliderEditor.cs.meta | 12 ------ .../Scripts/Editor/VariableListAdaptor.cs | 10 +++++ .../Scripts/Editor/WriterAudioEditor.cs | 4 +- 15 files changed, 69 insertions(+), 175 deletions(-) delete mode 100644 Assets/Fungus/Scripts/Editor/SaveDataEditor.cs delete mode 100644 Assets/Fungus/Scripts/Editor/SaveDataEditor.cs.meta delete mode 100644 Assets/Fungus/Scripts/Editor/SavePointLoadedEditor.cs delete mode 100644 Assets/Fungus/Scripts/Editor/SavePointLoadedEditor.cs.meta delete mode 100644 Assets/Fungus/Scripts/Editor/SetColliderEditor.cs delete mode 100644 Assets/Fungus/Scripts/Editor/SetColliderEditor.cs.meta diff --git a/Assets/Fungus/Scripts/Commands/SetCollider.cs b/Assets/Fungus/Scripts/Commands/SetCollider.cs index b56a64f5..ef623040 100644 --- a/Assets/Fungus/Scripts/Commands/SetCollider.cs +++ b/Assets/Fungus/Scripts/Commands/SetCollider.cs @@ -97,6 +97,11 @@ namespace Fungus return new Color32(235, 191, 217, 255); } + public override bool IsReorderableArray(string propertyName) + { + return propertyName == "targetObjects"; + } + #endregion } diff --git a/Assets/Fungus/Scripts/Editor/BlockEditor.cs b/Assets/Fungus/Scripts/Editor/BlockEditor.cs index 055f9a9c..8d404755 100644 --- a/Assets/Fungus/Scripts/Editor/BlockEditor.cs +++ b/Assets/Fungus/Scripts/Editor/BlockEditor.cs @@ -9,7 +9,6 @@ using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; -using Rotorz.ReorderableList; using System.IO; using System.Reflection; @@ -150,20 +149,7 @@ namespace Fungus.EditorUtils command.ParentBlock = block; } - ReorderableListGUI.Title("Commands"); - CommandListAdaptor adaptor = new CommandListAdaptor(commandListProperty, 0); - adaptor.nodeRect = block._NodeRect; - - ReorderableListFlags flags = ReorderableListFlags.HideAddButton | ReorderableListFlags.HideRemoveButtons | ReorderableListFlags.DisableContextMenu; - - if (block.CommandList.Count == 0) - { - EditorGUILayout.HelpBox("Press the + button below to add a command to the list.", MessageType.Info); - } - else - { - ReorderableListControl.DrawControlFromState(adaptor, null, flags); - } + CommandListAdaptor.DrawCommandList(block, commandListProperty); // EventType.contextClick doesn't register since we moved the Block Editor to be inside // a GUI Area, no idea why. As a workaround we just check for right click instead. diff --git a/Assets/Fungus/Scripts/Editor/CharacterEditor.cs b/Assets/Fungus/Scripts/Editor/CharacterEditor.cs index 7bab1484..60c4bbaf 100644 --- a/Assets/Fungus/Scripts/Editor/CharacterEditor.cs +++ b/Assets/Fungus/Scripts/Editor/CharacterEditor.cs @@ -3,7 +3,6 @@ using UnityEditor; using UnityEngine; -using Rotorz.ReorderableList; namespace Fungus.EditorUtils { @@ -60,8 +59,7 @@ namespace Fungus.EditorUtils GUI.DrawTexture(previewRect,characterTexture,ScaleMode.ScaleToFit,true,aspect); } - ReorderableListGUI.Title(new GUIContent("Portraits", "Character image sprites to display in the dialog")); - ReorderableListGUI.ListField(portraitsProp); + EditorGUILayout.PropertyField(portraitsProp, new GUIContent("Portraits", "Character image sprites to display in the dialog"), true); EditorGUILayout.HelpBox("All portrait images should use the exact same resolution to avoid positioning and tiling issues.", MessageType.Info); diff --git a/Assets/Fungus/Scripts/Editor/CommandEditor.cs b/Assets/Fungus/Scripts/Editor/CommandEditor.cs index 05ae1e17..56b50f30 100644 --- a/Assets/Fungus/Scripts/Editor/CommandEditor.cs +++ b/Assets/Fungus/Scripts/Editor/CommandEditor.cs @@ -4,14 +4,14 @@ using UnityEditor; using UnityEngine; using System.Collections.Generic; -using Rotorz.ReorderableList; +using UnityEditorInternal; namespace Fungus.EditorUtils { - [CustomEditor (typeof(Command), true)] public class CommandEditor : Editor { + #region statics public static Command selectedCommand; public static CommandInfoAttribute GetCommandInfo(System.Type commandType) @@ -34,6 +34,15 @@ namespace Fungus.EditorUtils return retval; } + #endregion statics + + private Dictionary reorderableLists; + + public virtual void OnEnable() + { + reorderableLists = new Dictionary(); + } + public virtual void DrawCommandInspectorGUI() { Command t = target as Command; @@ -148,8 +157,24 @@ namespace Fungus.EditorUtils if (iterator.isArray && t.IsReorderableArray(iterator.name)) { - ReorderableListGUI.Title(new GUIContent(iterator.displayName, iterator.tooltip)); - ReorderableListGUI.ListField(iterator); + ReorderableList reordList = null; + reorderableLists.TryGetValue(iterator.displayName, out reordList); + if(reordList == null) + { + var locSerProp = iterator.Copy(); + //create and insert + reordList = new ReorderableList(serializedObject, locSerProp, true, false, true, true) + { + drawHeaderCallback = (Rect rect) => + { + EditorGUI.LabelField(rect, locSerProp.displayName); + } + }; + + reorderableLists.Add(iterator.displayName, reordList); + } + + reordList.DoLayoutList(); } else { diff --git a/Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs b/Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs index 117a7f40..d3c6aa98 100644 --- a/Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs +++ b/Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs @@ -14,6 +14,24 @@ namespace Fungus.EditorUtils { public class CommandListAdaptor : IReorderableListAdaptor { + public static void DrawCommandList(Block block, SerializedProperty commandListProperty) + { + ReorderableListGUI.Title("Commands"); + CommandListAdaptor adaptor = new CommandListAdaptor(commandListProperty, 0); + adaptor.nodeRect = block._NodeRect; + + ReorderableListFlags flags = ReorderableListFlags.HideAddButton | ReorderableListFlags.HideRemoveButtons | ReorderableListFlags.DisableContextMenu; + + if (block.CommandList.Count == 0) + { + EditorGUILayout.HelpBox("Press the + button below to add a command to the list.", MessageType.Info); + } + else + { + ReorderableListControl.DrawControlFromState(adaptor, null, flags); + } + } + protected SerializedProperty _arrayProperty; public float fixedItemHeight; diff --git a/Assets/Fungus/Scripts/Editor/FlowchartEditor.cs b/Assets/Fungus/Scripts/Editor/FlowchartEditor.cs index 52d79d61..fe5a97dd 100644 --- a/Assets/Fungus/Scripts/Editor/FlowchartEditor.cs +++ b/Assets/Fungus/Scripts/Editor/FlowchartEditor.cs @@ -4,7 +4,6 @@ using UnityEditor; using UnityEngine; using System.Collections.Generic; -using Rotorz.ReorderableList; using System.Linq; using System.Reflection; @@ -72,8 +71,9 @@ namespace Fungus.EditorUtils EditorGUILayout.PropertyField(luaBindingNameProp); // Show list of commands to hide in Add Command menu - ReorderableListGUI.Title(new GUIContent(hideCommandsProp.displayName, hideCommandsProp.tooltip)); - ReorderableListGUI.ListField(hideCommandsProp); + //ReorderableListGUI.Title(new GUIContent(hideCommandsProp.displayName, hideCommandsProp.tooltip)); + //ReorderableListGUI.ListField(hideCommandsProp); + EditorGUILayout.PropertyField(hideCommandsProp, new GUIContent(hideCommandsProp.displayName, hideCommandsProp.tooltip), true); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); @@ -134,12 +134,7 @@ namespace Fungus.EditorUtils } } - ReorderableListGUI.Title("Variables"); - VariableListAdaptor adaptor = new VariableListAdaptor(variablesProp, 0, w == 0 ? VariableListAdaptor.DefaultWidth : w); - - ReorderableListFlags flags = ReorderableListFlags.DisableContextMenu | ReorderableListFlags.HideAddButton; - - ReorderableListControl.DrawControlFromState(adaptor, null, flags); + VariableListAdaptor.DrawVarList(w, variablesProp); listRect = GUILayoutUtility.GetLastRect(); diff --git a/Assets/Fungus/Scripts/Editor/SaveDataEditor.cs b/Assets/Fungus/Scripts/Editor/SaveDataEditor.cs deleted file mode 100644 index 4a060e32..00000000 --- a/Assets/Fungus/Scripts/Editor/SaveDataEditor.cs +++ /dev/null @@ -1,34 +0,0 @@ -// This code is part of the Fungus library (http://fungusgames.com) maintained by Chris Gregan (http://twitter.com/gofungus). -// It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE) - -#if UNITY_5_3_OR_NEWER - -using UnityEngine; -using UnityEditor; -using Rotorz.ReorderableList; - -namespace Fungus.EditorUtils -{ - [CustomEditor (typeof(SaveData), true)] - public class SaveDataEditor : Editor - { - protected SerializedProperty flowchartsProp; - - protected virtual void OnEnable() - { - flowchartsProp = serializedObject.FindProperty("flowcharts"); - } - - public override void OnInspectorGUI() - { - serializedObject.Update(); - - ReorderableListGUI.Title("Flowcharts"); - ReorderableListGUI.ListField(flowchartsProp); - - serializedObject.ApplyModifiedProperties(); - } - } -} - -#endif \ No newline at end of file diff --git a/Assets/Fungus/Scripts/Editor/SaveDataEditor.cs.meta b/Assets/Fungus/Scripts/Editor/SaveDataEditor.cs.meta deleted file mode 100644 index 94ccf3b2..00000000 --- a/Assets/Fungus/Scripts/Editor/SaveDataEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 395934d0b0e6a48a396a25348aeaade5 -timeCreated: 1484049679 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Fungus/Scripts/Editor/SaveMenuEditor.cs b/Assets/Fungus/Scripts/Editor/SaveMenuEditor.cs index 78e19a76..6286eab1 100644 --- a/Assets/Fungus/Scripts/Editor/SaveMenuEditor.cs +++ b/Assets/Fungus/Scripts/Editor/SaveMenuEditor.cs @@ -5,7 +5,6 @@ using UnityEngine; using UnityEditor; -using Rotorz.ReorderableList; namespace Fungus.EditorUtils { diff --git a/Assets/Fungus/Scripts/Editor/SavePointLoadedEditor.cs b/Assets/Fungus/Scripts/Editor/SavePointLoadedEditor.cs deleted file mode 100644 index 9ff2532f..00000000 --- a/Assets/Fungus/Scripts/Editor/SavePointLoadedEditor.cs +++ /dev/null @@ -1,30 +0,0 @@ -// This code is part of the Fungus library (http://fungusgames.com) maintained by Chris Gregan (http://twitter.com/gofungus). -// It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE) - -#if UNITY_5_3_OR_NEWER - -using UnityEngine; -using UnityEditor; -using Rotorz.ReorderableList; - -namespace Fungus.EditorUtils -{ - [CustomEditor (typeof(SavePointLoaded), true)] - public class SavePointLoadedEditor : EventHandlerEditor - { - protected SerializedProperty savePointKeysProp; - - protected virtual void OnEnable() - { - savePointKeysProp = serializedObject.FindProperty("savePointKeys"); - } - - protected override void DrawProperties() - { - ReorderableListGUI.Title("Save Point Keys"); - ReorderableListGUI.ListField(savePointKeysProp); - } - } -} - -#endif \ No newline at end of file diff --git a/Assets/Fungus/Scripts/Editor/SavePointLoadedEditor.cs.meta b/Assets/Fungus/Scripts/Editor/SavePointLoadedEditor.cs.meta deleted file mode 100644 index 4e2c4995..00000000 --- a/Assets/Fungus/Scripts/Editor/SavePointLoadedEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 8514e225c506c4938a5da19210cc6217 -timeCreated: 1484049679 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Fungus/Scripts/Editor/SetColliderEditor.cs b/Assets/Fungus/Scripts/Editor/SetColliderEditor.cs deleted file mode 100644 index 6abbf209..00000000 --- a/Assets/Fungus/Scripts/Editor/SetColliderEditor.cs +++ /dev/null @@ -1,40 +0,0 @@ -// This code is part of the Fungus library (http://fungusgames.com) maintained by Chris Gregan (http://twitter.com/gofungus). -// It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE) - -using UnityEditor; -using UnityEngine; -using Rotorz.ReorderableList; - -namespace Fungus.EditorUtils -{ - [CustomEditor (typeof(SetCollider))] - public class SetColliderEditor : CommandEditor - { - protected SerializedProperty targetObjectsProp; - protected SerializedProperty targetTagProp; - protected SerializedProperty activeStateProp; - - protected virtual void OnEnable() - { - if (NullTargetCheck()) // Check for an orphaned editor instance - return; - - targetObjectsProp = serializedObject.FindProperty("targetObjects"); - targetTagProp = serializedObject.FindProperty("targetTag"); - activeStateProp = serializedObject.FindProperty("activeState"); - } - - public override void DrawCommandGUI() - { - serializedObject.Update(); - - ReorderableListGUI.Title(new GUIContent("Target Objects", "Objects containing collider components (2D or 3D)")); - ReorderableListGUI.ListField(targetObjectsProp); - - EditorGUILayout.PropertyField(targetTagProp); - EditorGUILayout.PropertyField(activeStateProp); - - serializedObject.ApplyModifiedProperties(); - } - } -} diff --git a/Assets/Fungus/Scripts/Editor/SetColliderEditor.cs.meta b/Assets/Fungus/Scripts/Editor/SetColliderEditor.cs.meta deleted file mode 100644 index f0f8604f..00000000 --- a/Assets/Fungus/Scripts/Editor/SetColliderEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 672281668cfa249738d9dbc91f96b88e -timeCreated: 1432222536 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs b/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs index 07b161d9..0ec5bb07 100644 --- a/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs +++ b/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs @@ -25,6 +25,16 @@ namespace Fungus.EditorUtils public int widthOfList; + static public void DrawVarList(int w, SerializedProperty variablesProp) + { + ReorderableListGUI.Title("Variables"); + VariableListAdaptor adaptor = new VariableListAdaptor(variablesProp, 0, w == 0 ? VariableListAdaptor.DefaultWidth : w); + + ReorderableListFlags flags = ReorderableListFlags.DisableContextMenu | ReorderableListFlags.HideAddButton; + + ReorderableListControl.DrawControlFromState(adaptor, null, flags); + } + public SerializedProperty this[int index] { get { return _arrayProperty.GetArrayElementAtIndex(index); } diff --git a/Assets/Fungus/Scripts/Editor/WriterAudioEditor.cs b/Assets/Fungus/Scripts/Editor/WriterAudioEditor.cs index 35c31fb7..9a812922 100644 --- a/Assets/Fungus/Scripts/Editor/WriterAudioEditor.cs +++ b/Assets/Fungus/Scripts/Editor/WriterAudioEditor.cs @@ -3,7 +3,6 @@ using UnityEditor; using UnityEngine; -using Rotorz.ReorderableList; namespace Fungus.EditorUtils { @@ -41,8 +40,7 @@ namespace Fungus.EditorUtils EditorGUILayout.PropertyField(audioModeProp); if ((AudioMode)audioModeProp.enumValueIndex == AudioMode.Beeps) { - ReorderableListGUI.Title(new GUIContent("Beep Sounds", "A list of beep sounds to play at random")); - ReorderableListGUI.ListField(beepSoundsProp); + EditorGUILayout.PropertyField(beepSoundsProp, new GUIContent("Beep Sounds", "A list of beep sounds to play at random"),true); } else { From a518dc284f43b5fb736ecd056aa2425a71a43cbe Mon Sep 17 00:00:00 2001 From: desktop-maesty/steve Date: Wed, 16 May 2018 20:54:36 +1000 Subject: [PATCH 02/12] VariableListAdapter no longer Rotorz FlowchartEditor uses an instance of one to handle using UnityEditorInternal ReorderableList FlowchartWindow caches a FlowchartEditor for the current flowchart so it can correctly use the new ReorderableList methods --- .../Fungus/Scripts/Editor/FlowchartEditor.cs | 116 +----------- .../Fungus/Scripts/Editor/FlowchartWindow.cs | 14 +- .../Scripts/Editor/VariableListAdaptor.cs | 169 ++++++++++-------- 3 files changed, 111 insertions(+), 188 deletions(-) diff --git a/Assets/Fungus/Scripts/Editor/FlowchartEditor.cs b/Assets/Fungus/Scripts/Editor/FlowchartEditor.cs index fe5a97dd..af903eb2 100644 --- a/Assets/Fungus/Scripts/Editor/FlowchartEditor.cs +++ b/Assets/Fungus/Scripts/Editor/FlowchartEditor.cs @@ -12,12 +12,6 @@ namespace Fungus.EditorUtils [CustomEditor (typeof(Flowchart))] public class FlowchartEditor : Editor { - protected class AddVariableInfo - { - public Flowchart flowchart; - public System.Type variableType; - } - protected SerializedProperty descriptionProp; protected SerializedProperty colorCommandsProp; protected SerializedProperty hideComponentsProp; @@ -31,6 +25,8 @@ namespace Fungus.EditorUtils protected SerializedProperty luaBindingNameProp; protected Texture2D addTexture; + + protected VariableListAdaptor variableListAdaptor; protected virtual void OnEnable() { @@ -50,6 +46,8 @@ namespace Fungus.EditorUtils luaBindingNameProp = serializedObject.FindProperty("luaBindingName"); addTexture = FungusEditorResources.AddSmall; + + variableListAdaptor = new VariableListAdaptor(variablesProp, 0, 0, target as Flowchart); } public override void OnInspectorGUI() @@ -122,8 +120,6 @@ namespace Fungus.EditorUtils } else { - Rect listRect = new Rect(); - // Remove any null variables from the list // Can sometimes happen when upgrading to a new version of Fungus (if .meta GUID changes for a variable class) for (int i = t.Variables.Count - 1; i >= 0; i--) @@ -134,114 +130,12 @@ namespace Fungus.EditorUtils } } - VariableListAdaptor.DrawVarList(w, variablesProp); - - listRect = GUILayoutUtility.GetLastRect(); - - float plusWidth = 32; - float plusHeight = 24; - - Rect buttonRect = listRect; - float buttonHeight = 24; - buttonRect.x = 4; - buttonRect.y -= buttonHeight - 1; - buttonRect.height = buttonHeight; - if (!Application.isPlaying) - { - buttonRect.width -= 30; - } - - if (showVariableToggleButton && GUI.Button(buttonRect, "Variables")) - { - t.VariablesExpanded = false; - } - - // Draw disclosure triangle - Rect lastRect = buttonRect; - lastRect.x += 5; - lastRect.y += 5; - - //this is not required, seems to be legacy that is hidden in the normal reorderable - if(showVariableToggleButton) - EditorGUI.Foldout(lastRect, true, ""); - - Rect plusRect = listRect; - plusRect.x += plusRect.width - plusWidth; - plusRect.y -= plusHeight - 1; - plusRect.width = plusWidth; - plusRect.height = plusHeight; - - if (!Application.isPlaying && - GUI.Button(plusRect, addTexture)) - { - GenericMenu menu = new GenericMenu (); - List types = FindAllDerivedTypes(); - - // Add variable types without a category - foreach (var type in types) - { - VariableInfoAttribute variableInfo = VariableEditor.GetVariableInfo(type); - if (variableInfo == null || - variableInfo.Category != "") - { - continue; - } - - AddVariableInfo addVariableInfo = new AddVariableInfo(); - addVariableInfo.flowchart = t; - addVariableInfo.variableType = type; - - GUIContent typeName = new GUIContent(variableInfo.VariableType); - - menu.AddItem(typeName, false, AddVariable, addVariableInfo); - } - - // Add types with a category - foreach (var type in types) - { - VariableInfoAttribute variableInfo = VariableEditor.GetVariableInfo(type); - if (variableInfo == null || - variableInfo.Category == "") - { - continue; - } - - AddVariableInfo info = new AddVariableInfo(); - info.flowchart = t; - info.variableType = type; - - GUIContent typeName = new GUIContent(variableInfo.Category + "/" + variableInfo.VariableType); - - menu.AddItem(typeName, false, AddVariable, info); - } - - menu.ShowAsContext (); - } + variableListAdaptor.DrawVarList(w); } serializedObject.ApplyModifiedProperties(); } - protected virtual void AddVariable(object obj) - { - AddVariableInfo addVariableInfo = obj as AddVariableInfo; - if (addVariableInfo == null) - { - return; - } - - var flowchart = addVariableInfo.flowchart; - System.Type variableType = addVariableInfo.variableType; - - Undo.RecordObject(flowchart, "Add Variable"); - Variable newVariable = flowchart.gameObject.AddComponent(variableType) as Variable; - newVariable.Key = flowchart.GetUniqueVariableKey(""); - flowchart.Variables.Add(newVariable); - - // Because this is an async call, we need to force prefab instances to record changes - PrefabUtility.RecordPrefabInstancePropertyModifications(flowchart); - } - public static List FindAllDerivedTypes() { return FindAllDerivedTypes(Assembly.GetAssembly(typeof(T))); diff --git a/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs b/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs index c21e042f..10ad7b85 100644 --- a/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs +++ b/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs @@ -135,6 +135,8 @@ namespace Fungus.EditorUtils protected Block dragBlock; protected static FungusState fungusState; + static FlowchartEditor flowchartEditor; + [MenuItem("Tools/Fungus/Flowchart Window")] static void Init() { @@ -222,7 +224,13 @@ namespace Fungus.EditorUtils var fs = Selection.activeGameObject.GetComponent(); if (fs != null) { - fungusState.SelectedFlowchart = fs; + //make sure we have a valid editor for this flowchart + if (fungusState.SelectedFlowchart != fs || fungusState.SelectedFlowchart == null || flowchartEditor == null) + { + DestroyImmediate(flowchartEditor); + flowchartEditor = Editor.CreateEditor(fs) as FlowchartEditor; + fungusState.SelectedFlowchart = fs; + } } } @@ -495,10 +503,8 @@ namespace Fungus.EditorUtils flowchart.VariablesScrollPos = GUILayout.BeginScrollView(flowchart.VariablesScrollPos); { GUILayout.Space(8); - - FlowchartEditor flowchartEditor = Editor.CreateEditor (flowchart) as FlowchartEditor; + flowchartEditor.DrawVariablesGUI(true, 0); - DestroyImmediate(flowchartEditor); Rect variableWindowRect = GUILayoutUtility.GetLastRect(); if (flowchart.VariablesExpanded && flowchart.Variables.Count > 0) diff --git a/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs b/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs index 0ec5bb07..a711adce 100644 --- a/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs +++ b/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs @@ -8,33 +8,32 @@ using UnityEngine; using UnityEditor; using System; -using Rotorz.ReorderableList; +using UnityEditorInternal; +using System.Collections.Generic; namespace Fungus.EditorUtils { - public class VariableListAdaptor : IReorderableListAdaptor + public class VariableListAdaptor { + protected class AddVariableInfo + { + public Flowchart flowchart; + public System.Type variableType; + } + public static readonly int DefaultWidth = 80 + 100 + 140 + 60; - public static readonly int ScrollSpacer = 8; - public static readonly int ReorderListSkirts = 70; + public static readonly int ScrollSpacer = 0; + public static readonly int ReorderListSkirts = 50; protected SerializedProperty _arrayProperty; public float fixedItemHeight; public int widthOfList; - - static public void DrawVarList(int w, SerializedProperty variablesProp) - { - ReorderableListGUI.Title("Variables"); - VariableListAdaptor adaptor = new VariableListAdaptor(variablesProp, 0, w == 0 ? VariableListAdaptor.DefaultWidth : w); - - ReorderableListFlags flags = ReorderableListFlags.DisableContextMenu | ReorderableListFlags.HideAddButton; - - ReorderableListControl.DrawControlFromState(adaptor, null, flags); - } - + private ReorderableList list; + private Flowchart targetFlowchart; + public SerializedProperty this[int index] { get { return _arrayProperty.GetArrayElementAtIndex(index); } @@ -45,88 +44,120 @@ namespace Fungus.EditorUtils get { return _arrayProperty; } } - public VariableListAdaptor(SerializedProperty arrayProperty, float fixedItemHeight, int widthOfList) + public VariableListAdaptor(SerializedProperty arrayProperty, float fixedItemHeight, int widthOfList, Flowchart _targetFlowchart) { if (arrayProperty == null) throw new ArgumentNullException("Array property was null."); if (!arrayProperty.isArray) throw new InvalidOperationException("Specified serialized propery is not an array."); + this.targetFlowchart = _targetFlowchart; this._arrayProperty = arrayProperty; this.fixedItemHeight = fixedItemHeight; this.widthOfList = widthOfList - ScrollSpacer; + list = new ReorderableList(arrayProperty.serializedObject, arrayProperty, true, false, true, true); + list.drawElementCallback = DrawItem; + list.onRemoveCallback = RemoveItem; + //list.drawHeaderCallback = DrawHeader; + list.onAddCallback = AddButton; + list.onRemoveCallback = RemoveItem; } - public VariableListAdaptor(SerializedProperty arrayProperty) : this(arrayProperty, 0f, DefaultWidth) + private void RemoveItem(ReorderableList list) { + int index = list.index; + // Remove the Fungus Variable component + Variable variable = _arrayProperty.GetArrayElementAtIndex(index).objectReferenceValue as Variable; + Undo.DestroyObjectImmediate(variable); } - public int Count + private void AddButton(ReorderableList list) { - get { return _arrayProperty.arraySize; } - } + GenericMenu menu = new GenericMenu(); + List types = FlowchartEditor.FindAllDerivedTypes(); - public virtual bool CanDrag(int index) - { - return true; - } + // Add variable types without a category + foreach (var type in types) + { + VariableInfoAttribute variableInfo = VariableEditor.GetVariableInfo(type); + if (variableInfo == null || + variableInfo.Category != "") + { + continue; + } - public virtual bool CanRemove(int index) - { - return true; - } + AddVariableInfo addVariableInfo = new AddVariableInfo(); + addVariableInfo.flowchart = targetFlowchart; + addVariableInfo.variableType = type; - public void Add() - { - int newIndex = _arrayProperty.arraySize; - ++_arrayProperty.arraySize; - _arrayProperty.GetArrayElementAtIndex(newIndex).ResetValue(); - } + GUIContent typeName = new GUIContent(variableInfo.VariableType); - public void Insert(int index) - { - _arrayProperty.InsertArrayElementAtIndex(index); - _arrayProperty.GetArrayElementAtIndex(index).ResetValue(); - } + menu.AddItem(typeName, false, AddVariable, addVariableInfo); + } - public void Duplicate(int index) - { - _arrayProperty.InsertArrayElementAtIndex(index); - } + // Add types with a category + foreach (var type in types) + { + VariableInfoAttribute variableInfo = VariableEditor.GetVariableInfo(type); + if (variableInfo == null || + variableInfo.Category == "") + { + continue; + } - public void Remove(int index) - { - // Remove the Fungus Variable component - Variable variable = _arrayProperty.GetArrayElementAtIndex(index).objectReferenceValue as Variable; - Undo.DestroyObjectImmediate(variable); + AddVariableInfo info = new AddVariableInfo(); + info.flowchart = targetFlowchart; + info.variableType = type; - _arrayProperty.GetArrayElementAtIndex(index).objectReferenceValue = null; - _arrayProperty.DeleteArrayElementAtIndex(index); + GUIContent typeName = new GUIContent(variableInfo.Category + "/" + variableInfo.VariableType); + + menu.AddItem(typeName, false, AddVariable, info); + } + + menu.ShowAsContext(); } - public void Move(int sourceIndex, int destIndex) + protected virtual void AddVariable(object obj) { - if (destIndex > sourceIndex) - --destIndex; - _arrayProperty.MoveArrayElement(sourceIndex, destIndex); + AddVariableInfo addVariableInfo = obj as AddVariableInfo; + if (addVariableInfo == null) + { + return; + } + + var flowchart = addVariableInfo.flowchart; + System.Type variableType = addVariableInfo.variableType; + + Undo.RecordObject(flowchart, "Add Variable"); + Variable newVariable = flowchart.gameObject.AddComponent(variableType) as Variable; + newVariable.Key = flowchart.GetUniqueVariableKey(""); + flowchart.Variables.Add(newVariable); + + // Because this is an async call, we need to force prefab instances to record changes + PrefabUtility.RecordPrefabInstancePropertyModifications(flowchart); } - public void Clear() + private void DrawHeader(Rect rect) { - _arrayProperty.ClearArray(); + EditorGUI.PrefixLabel(rect, new GUIContent("Variables")); } + + public void DrawVarList(int w) + { + this.widthOfList = (w == 0 ? VariableListAdaptor.DefaultWidth : w) - ScrollSpacer; - public void BeginGUI() - { } - - public void EndGUI() - { } + if(GUILayout.Button("Variables")) + { + arrayProperty.isExpanded = !arrayProperty.isExpanded; + } - public virtual void DrawItemBackground(Rect position, int index) - { + if (arrayProperty.isExpanded) + { + list.DoLayoutList(); + } } - public void DrawItem(Rect position, int index) + public void DrawItem(Rect position, int index, bool selected, bool focused) { Variable variable = this[index].objectReferenceValue as Variable; @@ -162,7 +193,7 @@ namespace Fungus.EditorUtils return; } - var flowchart = FlowchartWindow.GetFlowchart(); + var flowchart = targetFlowchart; if (flowchart == null) { return; @@ -250,14 +281,6 @@ namespace Fungus.EditorUtils GUI.backgroundColor = Color.white; } - - public virtual float GetItemHeight(int index) - { - return fixedItemHeight != 0f - ? fixedItemHeight - : EditorGUI.GetPropertyHeight(this[index], GUIContent.none, false) - ; - } } } From 5038f8baae3598936b9613c733e6c4e4a9ba58ba Mon Sep 17 00:00:00 2001 From: desktop-maesty/steve Date: Thu, 17 May 2018 21:29:14 +1000 Subject: [PATCH 03/12] FlowchartEditor keeps a VariableListAdapter rather than an entire FlowchartEditor --- .../Fungus/Scripts/Editor/FlowchartEditor.cs | 10 ++++- .../Fungus/Scripts/Editor/FlowchartWindow.cs | 33 +++++++++----- .../Scripts/Editor/VariableListAdaptor.cs | 44 +++++++++++-------- 3 files changed, 56 insertions(+), 31 deletions(-) diff --git a/Assets/Fungus/Scripts/Editor/FlowchartEditor.cs b/Assets/Fungus/Scripts/Editor/FlowchartEditor.cs index af903eb2..ea17042f 100644 --- a/Assets/Fungus/Scripts/Editor/FlowchartEditor.cs +++ b/Assets/Fungus/Scripts/Editor/FlowchartEditor.cs @@ -47,7 +47,7 @@ namespace Fungus.EditorUtils addTexture = FungusEditorResources.AddSmall; - variableListAdaptor = new VariableListAdaptor(variablesProp, 0, 0, target as Flowchart); + variableListAdaptor = new VariableListAdaptor(variablesProp, target as Flowchart); } public override void OnInspectorGUI() @@ -95,9 +95,15 @@ namespace Fungus.EditorUtils public virtual void DrawVariablesGUI(bool showVariableToggleButton, int w) { + var t = target as Flowchart; + + if(t == null) + { + return; + } + serializedObject.Update(); - var t = target as Flowchart; if (t.Variables.Count == 0) { diff --git a/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs b/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs index 10ad7b85..13c3db78 100644 --- a/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs +++ b/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs @@ -135,7 +135,8 @@ namespace Fungus.EditorUtils protected Block dragBlock; protected static FungusState fungusState; - static FlowchartEditor flowchartEditor; + static protected VariableListAdaptor variableListAdaptor; + [MenuItem("Tools/Fungus/Flowchart Window")] static void Init() @@ -145,6 +146,7 @@ namespace Fungus.EditorUtils protected virtual void OnEnable() { + // All block nodes use the same GUIStyle, but with a different background nodeStyle.border = new RectOffset(20, 20, 5, 5); nodeStyle.padding = nodeStyle.border; @@ -224,16 +226,20 @@ namespace Fungus.EditorUtils var fs = Selection.activeGameObject.GetComponent(); if (fs != null) { - //make sure we have a valid editor for this flowchart - if (fungusState.SelectedFlowchart != fs || fungusState.SelectedFlowchart == null || flowchartEditor == null) - { - DestroyImmediate(flowchartEditor); - flowchartEditor = Editor.CreateEditor(fs) as FlowchartEditor; - fungusState.SelectedFlowchart = fs; - } + fungusState.SelectedFlowchart = fs; } } + if (fungusState.SelectedFlowchart == null) + { + variableListAdaptor = null; + } + else if (variableListAdaptor == null || variableListAdaptor.TargetFlowchart != fungusState.SelectedFlowchart) + { + var fsSO = new SerializedObject(fungusState.SelectedFlowchart); + variableListAdaptor = new VariableListAdaptor(fsSO.FindProperty("variables"), fungusState.SelectedFlowchart); + } + return fungusState.SelectedFlowchart; } @@ -503,8 +509,15 @@ namespace Fungus.EditorUtils flowchart.VariablesScrollPos = GUILayout.BeginScrollView(flowchart.VariablesScrollPos); { GUILayout.Space(8); - - flowchartEditor.DrawVariablesGUI(true, 0); + + + if (variableListAdaptor != null) + { + if (variableListAdaptor.TargetFlowchart == null) + variableListAdaptor = null; + else + variableListAdaptor.DrawVarList(0); + } Rect variableWindowRect = GUILayoutUtility.GetLastRect(); if (flowchart.VariablesExpanded && flowchart.Variables.Count > 0) diff --git a/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs b/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs index a711adce..e4b19b3a 100644 --- a/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs +++ b/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs @@ -1,9 +1,6 @@ // This code is part of the Fungus library (http://fungusgames.com) maintained by Chris Gregan (http://twitter.com/gofungus). // It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE) -// Copyright (c) 2012-2013 Rotorz Limited. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. using UnityEngine; using UnityEditor; @@ -15,7 +12,6 @@ namespace Fungus.EditorUtils { public class VariableListAdaptor { - protected class AddVariableInfo { public Flowchart flowchart; @@ -32,28 +28,36 @@ namespace Fungus.EditorUtils public int widthOfList; private ReorderableList list; - private Flowchart targetFlowchart; - + public Flowchart TargetFlowchart { get; private set; } + public SerializedProperty this[int index] { get { return _arrayProperty.GetArrayElementAtIndex(index); } } - public SerializedProperty arrayProperty + public Variable GetVarAt(int index) { - get { return _arrayProperty; } + if (list.list != null) + return list.list[index] as Variable; + else + return this[index].objectReferenceValue as Variable; } - public VariableListAdaptor(SerializedProperty arrayProperty, float fixedItemHeight, int widthOfList, Flowchart _targetFlowchart) + //public SerializedProperty arrayProperty + //{ + // get { return _arrayProperty; } + //} + + public VariableListAdaptor(SerializedProperty arrayProperty, Flowchart _targetFlowchart) { if (arrayProperty == null) throw new ArgumentNullException("Array property was null."); if (!arrayProperty.isArray) throw new InvalidOperationException("Specified serialized propery is not an array."); - this.targetFlowchart = _targetFlowchart; + this.TargetFlowchart = _targetFlowchart; + this.fixedItemHeight = 0; this._arrayProperty = arrayProperty; - this.fixedItemHeight = fixedItemHeight; this.widthOfList = widthOfList - ScrollSpacer; list = new ReorderableList(arrayProperty.serializedObject, arrayProperty, true, false, true, true); list.drawElementCallback = DrawItem; @@ -67,7 +71,7 @@ namespace Fungus.EditorUtils { int index = list.index; // Remove the Fungus Variable component - Variable variable = _arrayProperty.GetArrayElementAtIndex(index).objectReferenceValue as Variable; + Variable variable = this[index].objectReferenceValue as Variable; Undo.DestroyObjectImmediate(variable); } @@ -87,7 +91,7 @@ namespace Fungus.EditorUtils } AddVariableInfo addVariableInfo = new AddVariableInfo(); - addVariableInfo.flowchart = targetFlowchart; + addVariableInfo.flowchart = TargetFlowchart; addVariableInfo.variableType = type; GUIContent typeName = new GUIContent(variableInfo.VariableType); @@ -106,7 +110,7 @@ namespace Fungus.EditorUtils } AddVariableInfo info = new AddVariableInfo(); - info.flowchart = targetFlowchart; + info.flowchart = TargetFlowchart; info.variableType = type; GUIContent typeName = new GUIContent(variableInfo.Category + "/" + variableInfo.VariableType); @@ -144,22 +148,24 @@ namespace Fungus.EditorUtils public void DrawVarList(int w) { + _arrayProperty.serializedObject.Update(); this.widthOfList = (w == 0 ? VariableListAdaptor.DefaultWidth : w) - ScrollSpacer; if(GUILayout.Button("Variables")) { - arrayProperty.isExpanded = !arrayProperty.isExpanded; + _arrayProperty.isExpanded = !_arrayProperty.isExpanded; } - if (arrayProperty.isExpanded) + if (_arrayProperty.isExpanded) { list.DoLayoutList(); } + _arrayProperty.serializedObject.ApplyModifiedProperties(); } public void DrawItem(Rect position, int index, bool selected, bool focused) { - Variable variable = this[index].objectReferenceValue as Variable; + Variable variable = GetVarAt(index);// this[index].objectReferenceValue as Variable; if (variable == null) { @@ -193,7 +199,7 @@ namespace Fungus.EditorUtils return; } - var flowchart = targetFlowchart; + var flowchart = TargetFlowchart; if (flowchart == null) { return; @@ -236,7 +242,7 @@ namespace Fungus.EditorUtils // To access properties in a monobehavior, you have to new a SerializedObject // http://answers.unity3d.com/questions/629803/findrelativeproperty-never-worked-for-me-how-does.html - SerializedObject variableObject = new SerializedObject(this[index].objectReferenceValue); + SerializedObject variableObject = new SerializedObject(variable); variableObject.Update(); From 7749f8b3c80d5213d9db8d868d7633a1863c2a00 Mon Sep 17 00:00:00 2001 From: desktop-maesty/steve Date: Fri, 18 May 2018 08:22:41 +1000 Subject: [PATCH 04/12] When a change is detected in the flowchartwindow var list mark the flowchart dirty so the inspector refreshes. --- Assets/Fungus/Scripts/Editor/FlowchartWindow.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs b/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs index 13c3db78..fcd84cc3 100644 --- a/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs +++ b/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs @@ -510,6 +510,7 @@ namespace Fungus.EditorUtils { GUILayout.Space(8); + EditorGUI.BeginChangeCheck(); if (variableListAdaptor != null) { @@ -519,6 +520,11 @@ namespace Fungus.EditorUtils variableListAdaptor.DrawVarList(0); } + if(EditorGUI.EndChangeCheck()) + { + EditorUtility.SetDirty(flowchart); + } + Rect variableWindowRect = GUILayoutUtility.GetLastRect(); if (flowchart.VariablesExpanded && flowchart.Variables.Count > 0) { From bbf3c06d3c25404a393283f9c2e8c65b084bdb99 Mon Sep 17 00:00:00 2001 From: desktop-maesty/steve Date: Fri, 18 May 2018 08:33:12 +1000 Subject: [PATCH 05/12] CommandListAdapter now uses Unity ReorderableList not Rotorz --- Assets/Fungus/Scripts/Editor/BlockEditor.cs | 25 ++- .../Scripts/Editor/CommandListAdaptor.cs | 150 +++--------------- .../Scripts/Editor/VariableListAdaptor.cs | 14 +- 3 files changed, 43 insertions(+), 146 deletions(-) diff --git a/Assets/Fungus/Scripts/Editor/BlockEditor.cs b/Assets/Fungus/Scripts/Editor/BlockEditor.cs index 8d404755..d18b76d0 100644 --- a/Assets/Fungus/Scripts/Editor/BlockEditor.cs +++ b/Assets/Fungus/Scripts/Editor/BlockEditor.cs @@ -48,6 +48,9 @@ namespace Fungus.EditorUtils static List commandTypes; static List eventHandlerTypes; + private CommandListAdaptor commandListAdaptor; + private SerializedProperty commandListProperty; + static void CacheEventHandlerTypes() { eventHandlerTypes = EditorExtensions.FindDerivedTypes(typeof(EventHandler)).ToList(); @@ -62,12 +65,27 @@ namespace Fungus.EditorUtils protected virtual void OnEnable() { + //this appears to happen when leaving playmode + try + { + if (serializedObject == null) + return; + } + catch (Exception) + { + return; + } + upIcon = FungusEditorResources.Up; downIcon = FungusEditorResources.Down; addIcon = FungusEditorResources.Add; duplicateIcon = FungusEditorResources.Duplicate; deleteIcon = FungusEditorResources.Delete; + commandListProperty = serializedObject.FindProperty("commandList"); + + commandListAdaptor = new CommandListAdaptor(target as Block, commandListProperty); + CacheEventHandlerTypes(); } @@ -96,6 +114,8 @@ namespace Fungus.EditorUtils { serializedObject.Update(); + var block = target as Block; + // Execute any queued cut, copy, paste, etc. operations from the prevous GUI update // We need to defer applying these operations until the following update because // the ReorderableList control emits GUI errors if you clear the list in the same frame @@ -112,9 +132,6 @@ namespace Fungus.EditorUtils actionList.Clear(); } - var block = target as Block; - - SerializedProperty commandListProperty = serializedObject.FindProperty("commandList"); if (block == flowchart.SelectedBlock) { @@ -149,7 +166,7 @@ namespace Fungus.EditorUtils command.ParentBlock = block; } - CommandListAdaptor.DrawCommandList(block, commandListProperty); + commandListAdaptor.DrawCommandList(); // EventType.contextClick doesn't register since we moved the Block Editor to be inside // a GUI Area, no idea why. As a workaround we just check for right click instead. diff --git a/Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs b/Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs index d3c6aa98..9306c4da 100644 --- a/Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs +++ b/Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs @@ -1,42 +1,36 @@ // This code is part of the Fungus library (http://fungusgames.com) maintained by Chris Gregan (http://twitter.com/gofungus). // It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE) -// Copyright (c) 2012-2013 Rotorz Limited. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - using UnityEngine; using UnityEditor; using System; -using Rotorz.ReorderableList; +using UnityEditorInternal; namespace Fungus.EditorUtils { - public class CommandListAdaptor : IReorderableListAdaptor { + public class CommandListAdaptor { - public static void DrawCommandList(Block block, SerializedProperty commandListProperty) + public void DrawCommandList() { - ReorderableListGUI.Title("Commands"); - CommandListAdaptor adaptor = new CommandListAdaptor(commandListProperty, 0); - adaptor.nodeRect = block._NodeRect; - - ReorderableListFlags flags = ReorderableListFlags.HideAddButton | ReorderableListFlags.HideRemoveButtons | ReorderableListFlags.DisableContextMenu; - if (block.CommandList.Count == 0) { EditorGUILayout.HelpBox("Press the + button below to add a command to the list.", MessageType.Info); } else { - ReorderableListControl.DrawControlFromState(adaptor, null, flags); + EditorGUI.indentLevel++; + list.DoLayoutList(); + EditorGUI.indentLevel--; } } protected SerializedProperty _arrayProperty; + + protected ReorderableList list; + + protected Block block; public float fixedItemHeight; - - public Rect nodeRect = new Rect(); public SerializedProperty this[int index] { get { return _arrayProperty.GetArrayElementAtIndex(index); } @@ -46,7 +40,7 @@ namespace Fungus.EditorUtils get { return _arrayProperty; } } - public CommandListAdaptor(SerializedProperty arrayProperty, float fixedItemHeight) { + public CommandListAdaptor(Block _block, SerializedProperty arrayProperty, float fixedItemHeight = 0) { if (arrayProperty == null) throw new ArgumentNullException("Array property was null."); if (!arrayProperty.isArray) @@ -54,123 +48,19 @@ namespace Fungus.EditorUtils this._arrayProperty = arrayProperty; this.fixedItemHeight = fixedItemHeight; - } - - public CommandListAdaptor(SerializedProperty arrayProperty) : this(arrayProperty, 0f) { - } - - public int Count { - get { return _arrayProperty.arraySize; } - } - - public virtual bool CanDrag(int index) { - return true; - } - - public virtual bool CanRemove(int index) { - return true; - } - - public void Add() { - Command newCommand = AddNewCommand(); - if (newCommand == null) - { - return; - } - - int newIndex = _arrayProperty.arraySize; - ++_arrayProperty.arraySize; - _arrayProperty.GetArrayElementAtIndex(newIndex).objectReferenceValue = newCommand; - } - - public void Insert(int index) { - Command newCommand = AddNewCommand(); - if (newCommand == null) - { - return; - } - - _arrayProperty.InsertArrayElementAtIndex(index); - _arrayProperty.GetArrayElementAtIndex(index).objectReferenceValue = newCommand; - } - - Command AddNewCommand() - { - Flowchart flowchart = FlowchartWindow.GetFlowchart(); - if (flowchart == null) - { - return null; - } - - var block = flowchart.SelectedBlock; - if (block == null) - { - return null; - } - - var newCommand = Undo.AddComponent(block.gameObject) as Command; - newCommand.ItemId = flowchart.NextItemId(); - flowchart.ClearSelectedCommands(); - flowchart.AddSelectedCommand(newCommand); - - return newCommand; - } - - public void Duplicate(int index) { - - Command command = _arrayProperty.GetArrayElementAtIndex(index).objectReferenceValue as Command; - - // Add the command as a new component - var parentBlock = command.GetComponent(); - - System.Type type = command.GetType(); - Command newCommand = Undo.AddComponent(parentBlock.gameObject, type) as Command; - newCommand.ItemId = newCommand.GetFlowchart().NextItemId(); - System.Reflection.FieldInfo[] fields = type.GetFields(); - foreach (System.Reflection.FieldInfo field in fields) - { - field.SetValue(newCommand, field.GetValue(command)); - } - - _arrayProperty.InsertArrayElementAtIndex(index); - _arrayProperty.GetArrayElementAtIndex(index).objectReferenceValue = newCommand; - } - - public void Remove(int index) { - // Remove the Fungus Command component - Command command = _arrayProperty.GetArrayElementAtIndex(index).objectReferenceValue as Command; - if (command != null) - { - Undo.DestroyObjectImmediate(command); - } - - _arrayProperty.GetArrayElementAtIndex(index).objectReferenceValue = null; - _arrayProperty.DeleteArrayElementAtIndex(index); - } - - public void Move(int sourceIndex, int destIndex) { - if (destIndex > sourceIndex) - --destIndex; - _arrayProperty.MoveArrayElement(sourceIndex, destIndex); - } - - public void Clear() { - while (Count > 0) - { - Remove(0); - } - } + this.block = _block; - public void BeginGUI() - {} - - public void EndGUI() - {} + list = new ReorderableList(arrayProperty.serializedObject, arrayProperty, true, true, false, false); + list.drawHeaderCallback = DrawHeader; + list.drawElementCallback = DrawItem; + } - public void DrawItemBackground(Rect position, int index) { + private void DrawHeader(Rect rect) + { + EditorGUI.PrefixLabel(rect, new GUIContent("Commands")); } - public void DrawItem(Rect position, int index) + public void DrawItem(Rect position, int index, bool selected, bool focused) { Command command = this[index].objectReferenceValue as Command; diff --git a/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs b/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs index e4b19b3a..0471fd53 100644 --- a/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs +++ b/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs @@ -42,12 +42,7 @@ namespace Fungus.EditorUtils else return this[index].objectReferenceValue as Variable; } - - //public SerializedProperty arrayProperty - //{ - // get { return _arrayProperty; } - //} - + public VariableListAdaptor(SerializedProperty arrayProperty, Flowchart _targetFlowchart) { if (arrayProperty == null) @@ -59,10 +54,10 @@ namespace Fungus.EditorUtils this.fixedItemHeight = 0; this._arrayProperty = arrayProperty; this.widthOfList = widthOfList - ScrollSpacer; + list = new ReorderableList(arrayProperty.serializedObject, arrayProperty, true, false, true, true); list.drawElementCallback = DrawItem; list.onRemoveCallback = RemoveItem; - //list.drawHeaderCallback = DrawHeader; list.onAddCallback = AddButton; list.onRemoveCallback = RemoveItem; } @@ -141,11 +136,6 @@ namespace Fungus.EditorUtils PrefabUtility.RecordPrefabInstancePropertyModifications(flowchart); } - private void DrawHeader(Rect rect) - { - EditorGUI.PrefixLabel(rect, new GUIContent("Variables")); - } - public void DrawVarList(int w) { _arrayProperty.serializedObject.Update(); From a825c9bb69466e2e158e074fc74900aca3562928 Mon Sep 17 00:00:00 2001 From: desktop-maesty/steve Date: Fri, 18 May 2018 08:39:29 +1000 Subject: [PATCH 06/12] Removed Rotorz --- .../Thirdparty/Reorderable List Field.meta | 9 - .../Reorderable List Field/Editor.meta | 9 - .../Editor/Editor.ReorderableList.dll | Bin 66048 -> 0 bytes .../Editor/Editor.ReorderableList.dll.meta | 22 - .../Editor/Editor.ReorderableList.xml | 1811 ----------------- .../Editor/Editor.ReorderableList.xml.meta | 6 - .../Reorderable List Field/LICENSE.txt | 21 - .../Reorderable List Field/LICENSE.txt.meta | 6 - .../Reorderable List Field/README.txt | 139 -- .../Reorderable List Field/README.txt.meta | 6 - 10 files changed, 2029 deletions(-) delete mode 100644 Assets/Fungus/Thirdparty/Reorderable List Field.meta delete mode 100644 Assets/Fungus/Thirdparty/Reorderable List Field/Editor.meta delete mode 100755 Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.dll delete mode 100644 Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.dll.meta delete mode 100755 Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.xml delete mode 100644 Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.xml.meta delete mode 100755 Assets/Fungus/Thirdparty/Reorderable List Field/LICENSE.txt delete mode 100644 Assets/Fungus/Thirdparty/Reorderable List Field/LICENSE.txt.meta delete mode 100755 Assets/Fungus/Thirdparty/Reorderable List Field/README.txt delete mode 100644 Assets/Fungus/Thirdparty/Reorderable List Field/README.txt.meta diff --git a/Assets/Fungus/Thirdparty/Reorderable List Field.meta b/Assets/Fungus/Thirdparty/Reorderable List Field.meta deleted file mode 100644 index 8e58cda1..00000000 --- a/Assets/Fungus/Thirdparty/Reorderable List Field.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: fb90622e4c0c8488e807119925da3a7a -folderAsset: yes -timeCreated: 1434110041 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Fungus/Thirdparty/Reorderable List Field/Editor.meta b/Assets/Fungus/Thirdparty/Reorderable List Field/Editor.meta deleted file mode 100644 index a70a23a1..00000000 --- a/Assets/Fungus/Thirdparty/Reorderable List Field/Editor.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 1351e3cf05fcef04cbafc172b277cd32 -folderAsset: yes -timeCreated: 1434110041 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.dll b/Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.dll deleted file mode 100755 index 4c02b9dc2b84457fbae10a084f9f16c7a65dde7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66048 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 P*z^=|{|@Cd&w>91K@yQd diff --git a/Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.dll.meta b/Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.dll.meta deleted file mode 100644 index 7ce66fc7..00000000 --- a/Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.dll.meta +++ /dev/null @@ -1,22 +0,0 @@ -fileFormatVersion: 2 -guid: 21d076cb9a4ec214a8cb820e69657bc3 -PluginImporter: - serializedVersion: 1 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - platformData: - Any: - enabled: 0 - settings: {} - Editor: - enabled: 1 - settings: - DefaultValueInitialized: true - WindowsStoreApps: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.xml b/Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.xml deleted file mode 100755 index d299d67d..00000000 --- a/Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.xml +++ /dev/null @@ -1,1811 +0,0 @@ - - - - Editor.ReorderableList - - - - - Arguments which are passed to . - - - - - Initializes a new instance of . - - Reorderable list adaptor. - Position of the add menu button. - - - - Gets adaptor to reorderable list container. - - - - - Gets position of the add menu button. - - - - - An event handler which is invoked when the "Add Menu" button is clicked. - - Object which raised event. - Event arguments. - - - - Factory methods that create - instances that can then be used to build element adder menus. - - - - - Gets a to build an element - adder menu for a context object of the type . - - Type of the context object that elements can be added to. - - A new instance. - - - - - Gets a to build an element - adder menu for a context object of the type . - - Contract type of addable elements. - Type of the context object that elements can be added to. - - A new instance. - - - - - Annotate implementations with a - to associate it with the contract - type of addable elements. - - - - - Initializes a new instance of the class. - - Contract type of addable elements. - - - - Gets the contract type of addable elements. - - - - - Provides meta information which is useful when creating new implementations of - the interface. - - - - - Gets an array of all the concrete element types that implement the specified - . - - Contract type of addable elements. - - An array of zero or more concrete element types. - - - If is null. - - - - - Gets a filtered array of the concrete element types that implement the - specified . - - Contract type of addable elements. - An array of zero or more filters. - - An array of zero or more concrete element types. - - - If is null. - - - - - Gets an array of instances - that are associated with the specified . - - Contract type of addable elements. - Type of the context object that elements can be added to. - - An array containing zero or more instances. - - - If is null. - - - - - Gets an array of the types - that are associated with the specified . - - Contract type of addable elements. - Type of the context object that elements can be added to. - - An array containing zero or more . - - - If is null. - - - - - Reorderable list adaptor for generic list. - - Type of list element. - - - - Initializes a new instance of . - - The list which can be reordered. - Callback to draw list item. - Height of list item in pixels. - - - - Add new element at end of list. - - - - - Occurs before any list items are drawn. - - - - - Determines whether an item can be reordered by dragging mouse. - - Zero-based index for list element. - - A value of true if item can be dragged; otherwise false. - - - - - Determines whether an item can be removed from list. - - Zero-based index for list element. - - A value of true if item can be removed; otherwise false. - - - - - Clear all elements from list. - - - - - Gets count of elements in list. - - - - - Draws main interface for a list item. - - Position in GUI. - Zero-based index of array element. - - - - Draws background of a list item. - - Total position of list element in GUI. - Zero-based index of array element. - - - - Duplicate existing element. - - Zero-based index of list element. - - - - Occurs after all list items have been drawn. - - - - - Fixed height of each list item. - - - - - Gets height of list item in pixels. - - Zero-based index of array element. - - Measurement in pixels. - - - - - Insert new element at specified index. - - Zero-based index for list element. - - - - Gets element from list. - - Zero-based index of element. - - The element. - - - - - Gets the underlying list data structure. - - - - - Move element from source index to destination index. - - Zero-based index of source element. - Zero-based index of destination element. - - - - Remove element at specified index. - - Zero-based index of list element. - - - - Interface for an object which adds elements to a context object of the type - . - - Type of the context object that elements can be added to. - - - - Adds an element of the specified to the associated - context object. - - Type of element to add. - - The new element. - - - - - Determines whether a new element of the specified can - be added to the associated context object. - - Type of element to add. - - A value of true if an element of the specified type can be added; - otherwise, a value of false. - - - - - Gets the context object. - - - - - Interface for a menu interface. - - - - - Displays the drop-down menu inside an editor GUI. - - Position of menu button in the GUI. - - - - Gets a value indicating whether the menu contains any items. - - - - - Interface for building an . - - Type of the context object that elements can be added to. - - - - Adds a custom command to the menu. - - The custom command. - - If is null. - - - - - Adds a filter function which determines whether types can be included or - whether they need to be excluded. - - Filter function. - - If is null. - - - - - Builds and returns a new instance. - - - A new instance each time the method is invoked. - - - - - Sets contract type of the elements that can be included in the . - Only non-abstract class types that are assignable from the - will be included in the built menu. - - Contract type of addable elements. - - - - Set the implementation which is used - when adding new elements to the context object. - - Element adder. - - - - Set the function that formats the display of type names in the user interface. - - Function that formats display name of type; or null. - - - - Interface for a menu command that can be included in an - either by annotating an implementation of the - interface with or directly by - calling . - - Type of the context object that elements can be added to. - - - - Determines whether the command can be executed. - - The associated element adder provides access to - the instance. - - A value of true if the command can execute; otherwise, false. - - - - - Gets the content of the menu command. - - - - - Executes the command. - - The associated element adder provides access to - the instance. - - - - Adaptor allowing reorderable list control to interface with list data. - - - - - Add new element at end of list. - - - - - Occurs before any list items are drawn. - - - - - Determines whether an item can be reordered by dragging mouse. - - Zero-based index for list element. - - A value of true if item can be dragged; otherwise false. - - - - - Determines whether an item can be removed from list. - - Zero-based index for list element. - - A value of true if item can be removed; otherwise false. - - - - - Clear all elements from list. - - - - - Gets count of elements in list. - - - - - Draws main interface for a list item. - - Position in GUI. - Zero-based index of array element. - - - - Draws background of a list item. - - Total position of list element in GUI. - Zero-based index of array element. - - - - Duplicate existing element. - - Zero-based index of list element. - - - - Occurs after all list items have been drawn. - - - - - Gets height of list item in pixels. - - Zero-based index of array element. - - Measurement in pixels. - - - - - Insert new element at specified index. - - Zero-based index for list element. - - - - Move element from source index to destination index. - - Zero-based index of source element. - Zero-based index of destination element. - - - - Remove element at specified index. - - Zero-based index of list element. - - - - Can be implemented along with when drop - insertion or ordering is desired. - - - - - Determines whether an item is being dragged and that it can be inserted - or moved by dropping somewhere into the reorderable list control. - - Zero-based index of insertion. - - A value of true if item can be dropped; otherwise false. - - - - - Processes the current drop insertion operation when - returns a value of true to process, accept or cancel. - - Zero-based index of insertion. - - - - Arguments which are passed to . - - - - - Initializes a new instance of . - - Reorderable list adaptor. - Zero-based index of item. - Indicates if inserted item was duplicated from another item. - - - - Gets adaptor to reorderable list container which contains element. - - - - - Gets zero-based index of item which was inserted. - - - - - Indicates if inserted item was duplicated from another item. - - - - - An event handler which is invoked after new list item is inserted. - - Object which raised event. - Event arguments. - - - - Arguments which are passed to . - - - - - Initializes a new instance of . - - Reorderable list adaptor. - Old zero-based index of item. - New zero-based index of item. - - - - Gets adaptor to reorderable list container which contains element. - - - - - Gets new zero-based index of the item which was moved. - - - - - Gets old zero-based index of the item which was moved. - - - - - An event handler which is invoked after a list item is moved. - - Object which raised event. - Event arguments. - - - - Arguments which are passed to . - - - - - Initializes a new instance of . - - Reorderable list adaptor. - Zero-based index of item. - Xero-based index of item destination. - - - - Gets adaptor to reorderable list container which contains element. - - - - - Gets the new candidate zero-based index for the item. - - - - - Gets current zero-based index of item which is going to be moved. - - - - - Gets zero-based index of item after it has been moved. - - - - - An event handler which is invoked before a list item is moved. - - Object which raised event. - Event arguments. - - - - Arguments which are passed to . - - - - - Initializes a new instance of . - - Reorderable list adaptor. - Zero-based index of item. - - - - Gets adaptor to reorderable list container which contains element. - - - - - Gets zero-based index of item which is being removed. - - - - - An event handler which is invoked before a list item is removed. - - Object which raised event. - Event arguments. - - - - Base class for custom reorderable list control. - - - - - Initializes a new instance of . - - - - - Initializes a new instance of . - - Optional flags which affect behavior of control. - - - - Add item at end of list and raises the event . - - Reorderable list adaptor. - - - - Invoked to generate context menu for list item. - - Menu which can be populated. - Zero-based index of item which was right-clicked. - Reorderable list adaptor. - - - - Occurs when add menu button is clicked. - - - - - Background color of anchor list item. - - - - - Calculate height of list control in pixels. - - Reorderable list adaptor. - - Required list height in pixels. - - - - - Calculate height of list control in pixels. - - Count of items in list. - Fixed height of list item. - - Required list height in pixels. - - - - - Remove all items from list. - - Reorderable list adaptor. - - Returns a value of false if operation was cancelled. - - - - - Content for "Clear All" command. - - - - - Content for "Duplicate" command. - - - - - Content for "Insert Above" command. - - - - - Content for "Insert Below" command. - - - - - Content for "Move to Bottom" command. - - - - - Content for "Move to Top" command. - - - - - Content for "Remove" command. - - - - - Gets or sets style used to draw background of list control. - - - - - Gets the total position of the list item that is currently being drawn. - - - - - Gets the control ID of the list that is currently being drawn. - - - - - Gets the position of the list control that is currently being drawn. - - - - - Default functionality to handle context command. - - - - - Call to manually perform command. - - Name of command. This is the text shown in the context menu. - Zero-based index of item which was right-clicked. - Reorderable list adaptor. - - A value of true if command was known; otherwise false. - - - - - Call to manually perform command. - - Content representing command. - Zero-based index of item which was right-clicked. - Reorderable list adaptor. - - A value of true if command was known; otherwise false. - - - - - Draw layout version of list control. - - Unique ID of list control. - Reorderable list adaptor. - Delegate for drawing empty list. - - - - Draw layout version of list control. - - Unique ID of list control. - Reorderable list adaptor. - Delegate for drawing empty list. - - - - Draw list control with absolute positioning. - - Position of list control in GUI. - Reorderable list adaptor. - Delegate for drawing empty list. - - - - Draw list control with absolute positioning. - - Position of list control in GUI. - Reorderable list adaptor. - Delegate for drawing empty list. - - - - Generate and draw control from state object. - - Reorderable list adaptor. - Delegate for drawing empty list. - Optional flags to pass into list field. - - - - Generate and draw control from state object. - - Position of control. - Reorderable list adaptor. - Delegate for drawing empty list. - Optional flags to pass into list field. - - - - Draws drop insertion indicator. - - Position if the drop indicator. - - - - Duplicate specified item and raises the event . - - Reorderable list adaptor. - Zero-based index of item. - - - - Gets or sets flags which affect behavior of control. - - - - - Gets or sets style used to draw footer buttons. - - - - - Invoked to handle context command. - - Name of command. This is the text shown in the context menu. - Zero-based index of item which was right-clicked. - Reorderable list adaptor. - - A value of true if command was known; otherwise false. - - - - - Gets or sets a boolean value indicating whether a horizontal line should be - shown below the last list item at the end of the list control. - - - - - Gets or sets a boolean value indicating whether a horizontal line should be - shown above the first list item at the start of the list control. - - - - - Gets or sets the color of the horizontal lines that appear between list items. - - - - - Insert item at specified index and raises the event . - - Reorderable list adaptor. - Zero-based index of item. - - - - Gets or sets style used to draw list item buttons (like the remove button). - - - - - Occurs after list item is inserted or duplicated. - - - - - Occurs after list item has been moved. - - - - - Occurs immediately before list item is moved allowing for move operation to be cancelled. - - - - - Occurs before list item is removed and allowing for remove operation to be cancelled. - - - - - Move item from source index to destination index. - - Reorderable list adaptor. - Zero-based index of source item. - Zero-based index of destination index. - - - - Raises event when add menu button is clicked. - - Event arguments. - - - - Raises event after list item is inserted or duplicated. - - Event arguments. - - - - Raises event after list item has been moved. - - Event arguments. - - - - Raises event immediately before list item is moved and provides oppertunity to cancel. - - Event arguments. - - - - Raises event before list item is removed and provides oppertunity to cancel. - - Event arguments. - - - - Remove specified item. - - Reorderable list adaptor. - Zero-based index of item. - - Returns a value of false if operation was cancelled. - - - - - Background color of target slot when dragging list item. - - - - - Invoked to draw content for empty list. - - - - - Invoked to draw content for empty list with absolute positioning. - - Position of empty content. - - - - Invoked to draw list item. - - Position of list item. - The list item. - Type of item list. - - The modified value. - - - - - Additional flags which can be passed into reorderable list field. - - - - - Hide grab handles and disable reordering of list items. - - - - - Hide add button at base of control. - - - - - Hide remove buttons from list items. - - - - - Do not display context menu upon right-clicking grab handle. - - - - - Hide "Duplicate" option from context menu. - - - - - Do not automatically focus first control of newly added items. - - - - - Show zero-based index of array elements. - - - - - Do not attempt to clip items which are out of view. - - - - - Utility class for drawing reorderable lists. - - - - - Calculate height of list field for adapted collection. - - Reorderable list adaptor. - Optional flags to pass into list field. - - Required list height in pixels. - - - - - Calculate height of list field for adapted collection. - - Reorderable list adaptor. - Optional flags to pass into list field. - - Required list height in pixels. - - - - - Calculate height of list field for absolute positioning. - - Count of items in list. - Fixed height of list item. - Optional flags to pass into list field. - - Required list height in pixels. - - - - - Calculate height of list field for absolute positioning. - - Count of items in list. - Fixed height of list item. - Optional flags to pass into list field. - - Required list height in pixels. - - - - - Calculate height of list field for absolute positioning. - - Count of items in list. - Fixed height of list item. - Optional flags to pass into list field. - - Required list height in pixels. - - - - - Calculate height of list field for absolute positioning. - - Count of items in list. - Fixed height of list item. - Optional flags to pass into list field. - - Required list height in pixels. - - - - - Calculate height of list field for absolute positioning. - - Serializable property. - Optional flags to pass into list field. - - Required list height in pixels. - - - - - Calculate height of list field for absolute positioning. - - Serializable property. - Optional flags to pass into list field. - - Required list height in pixels. - - - - - Gets the zero-based index of the list item that is currently being drawn; - or a value of -1 if no item is currently being drawn. - - - - - Gets the total position of the list item that is currently being drawn. - - - - - Gets the control ID of the list that is currently being drawn. - - - - - Gets the position of the list control that is currently being drawn. - - - - - Default list item drawer implementation. - - Position to draw list item control(s). - Value of list item. - Type of list item. - - Unmodified value of list item. - - - - - Default list item height is 18 pixels. - - - - - Gets or sets the zero-based index of the last item that was changed. A value of -1 - indicates that no item was changed by list. - - - - - Draw list field control for adapted collection. - - Reorderable list adaptor. - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for adapted collection. - - Reorderable list adaptor. - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for adapted collection. - - Reorderable list adaptor. - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for adapted collection. - - Reorderable list adaptor. - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control. - - The list which can be reordered. - Callback to draw list item. - Callback to draw custom content for empty list (optional). - Height of a single list item. - Optional flags to pass into list field. - Type of list item. - - - - Draw list field control. - - The list which can be reordered. - Callback to draw list item. - Callback to draw custom content for empty list (optional). - Height of a single list item. - Optional flags to pass into list field. - Type of list item. - - - - Draw list field control. - - The list which can be reordered. - Callback to draw list item. - Callback to draw custom content for empty list (optional). - Height of a single list item. - Optional flags to pass into list field. - Type of list item. - - - - Draw list field control. - - The list which can be reordered. - Callback to draw list item. - Callback to draw custom content for empty list (optional). - Height of a single list item. - Optional flags to pass into list field. - Type of list item. - - - - Draw list field control. - - The list which can be reordered. - Callback to draw list item. - Callback to draw custom content for empty list (optional). - Height of a single list item. - Optional flags to pass into list field. - Type of list item. - - - - Draw list field control. - - The list which can be reordered. - Callback to draw list item. - Callback to draw custom content for empty list (optional). - Height of a single list item. - Optional flags to pass into list field. - Type of list item. - - - - Draw list field control. - - The list which can be reordered. - Callback to draw list item. - Callback to draw custom content for empty list (optional). - Height of a single list item. - Optional flags to pass into list field. - Type of list item. - - - - Draw list field control. - - The list which can be reordered. - Callback to draw list item. - Callback to draw custom content for empty list (optional). - Height of a single list item. - Optional flags to pass into list field. - Type of list item. - - - - Draw list field control for serializable property array. - - Serializable property. - Use fixed height for items rather than . - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for serializable property array. - - Serializable property. - Use fixed height for items rather than . - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for serializable property array. - - Serializable property. - Use fixed height for items rather than . - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for serializable property array. - - Serializable property. - Use fixed height for items rather than . - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for serializable property array. - - Serializable property. - Use fixed height for items rather than . - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for serializable property array. - - Serializable property. - Use fixed height for items rather than . - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for serializable property array. - - Serializable property. - Use fixed height for items rather than . - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for serializable property array. - - Serializable property. - Use fixed height for items rather than . - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for adapted collection. - - Position of control. - Reorderable list adaptor. - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for adapted collection. - - Position of control. - Reorderable list adaptor. - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for adapted collection. - - Position of control. - Reorderable list adaptor. - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for adapted collection. - - Position of control. - Reorderable list adaptor. - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control with absolute positioning. - - Position of control. - The list which can be reordered. - Callback to draw list item. - Callback to draw custom content for empty list (optional). - Height of a single list item. - Optional flags to pass into list field. - Type of list item. - - - - Draw list field control with absolute positioning. - - Position of control. - The list which can be reordered. - Callback to draw list item. - Callback to draw custom content for empty list (optional). - Height of a single list item. - Optional flags to pass into list field. - Type of list item. - - - - Draw list field control with absolute positioning. - - Position of control. - The list which can be reordered. - Callback to draw list item. - Callback to draw custom content for empty list (optional). - Height of a single list item. - Optional flags to pass into list field. - Type of list item. - - - - Draw list field control with absolute positioning. - - Position of control. - The list which can be reordered. - Callback to draw list item. - Callback to draw custom content for empty list (optional). - Height of a single list item. - Optional flags to pass into list field. - Type of list item. - - - - Draw list field control with absolute positioning. - - Position of control. - The list which can be reordered. - Callback to draw list item. - Callback to draw custom content for empty list (optional). - Height of a single list item. - Optional flags to pass into list field. - Type of list item. - - - - Draw list field control with absolute positioning. - - Position of control. - The list which can be reordered. - Callback to draw list item. - Callback to draw custom content for empty list (optional). - Height of a single list item. - Optional flags to pass into list field. - Type of list item. - - - - Draw list field control with absolute positioning. - - Position of control. - The list which can be reordered. - Callback to draw list item. - Callback to draw custom content for empty list (optional). - Height of a single list item. - Optional flags to pass into list field. - Type of list item. - - - - Draw list field control with absolute positioning. - - Position of control. - The list which can be reordered. - Callback to draw list item. - Callback to draw custom content for empty list (optional). - Height of a single list item. - Optional flags to pass into list field. - Type of list item. - - - - Draw list field control for serializable property array. - - Position of control. - Serializable property. - Use fixed height for items rather than . - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for serializable property array. - - Position of control. - Serializable property. - Use fixed height for items rather than . - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for serializable property array. - - Position of control. - Serializable property. - Use fixed height for items rather than . - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for serializable property array. - - Position of control. - Serializable property. - Use fixed height for items rather than . - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for serializable property array. - - Position of control. - Serializable property. - Use fixed height for items rather than . - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for serializable property array. - - Position of control. - Serializable property. - Use fixed height for items rather than . - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for serializable property array. - - Position of control. - Serializable property. - Use fixed height for items rather than . - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draw list field control for serializable property array. - - Position of control. - Serializable property. - Use fixed height for items rather than . - Callback to draw custom content for empty list (optional). - Optional flags to pass into list field. - - - - Draws text field allowing list items to be edited. - - Position to draw list item control(s). - Value of list item. - - Modified value of list item. - - - - - Draw title control for list field. - - Text for title control. - - - - Draw title control for list field. - - Content for title control. - - - - Draw title control for list field with absolute positioning. - - Position of control. - Text for title control. - - - - Draw title control for list field with absolute positioning. - - Position of control. - Content for title control. - - - - Styles for the . - - - - - Gets style for the background of list control. - - - - - Gets an alternative style for the background of list control. - - - - - Gets style for footer button. - - - - - Gets an alternative style for footer button. - - - - - Gets color for the horizontal lines that appear between list items. - - - - - Gets style for remove item button. - - - - - Gets style for the background of a selected item. - - - - - Gets color of background for a selected list item. - - - - - Gets style for title header. - - - - - Reorderable list adaptor for serialized array property. - - - - - Initializes a new instance of . - - Serialized property for entire array. - - - - Initializes a new instance of . - - Serialized property for entire array. - Non-zero height overrides property drawer height calculation. - - - - Add new element at end of list. - - - - - Gets the underlying serialized array property. - - - - - Occurs before any list items are drawn. - - - - - Determines whether an item can be reordered by dragging mouse. - - Zero-based index for list element. - - A value of true if item can be dragged; otherwise false. - - - - - Determines whether an item can be removed from list. - - Zero-based index for list element. - - A value of true if item can be removed; otherwise false. - - - - - Clear all elements from list. - - - - - Gets count of elements in list. - - - - - Draws main interface for a list item. - - Position in GUI. - Zero-based index of array element. - - - - Draws background of a list item. - - Total position of list element in GUI. - Zero-based index of array element. - - - - Duplicate existing element. - - Zero-based index of list element. - - - - Occurs after all list items have been drawn. - - - - - Fixed height of each list item. - - - - - Gets height of list item in pixels. - - Zero-based index of array element. - - Measurement in pixels. - - - - - Insert new element at specified index. - - Zero-based index for list element. - - - - Gets element from list. - - Zero-based index of element. - - Serialized property wrapper for array element. - - - - - Move element from source index to destination index. - - Zero-based index of source element. - Zero-based index of destination element. - - - - Remove element at specified index. - - Zero-based index of list element. - - - \ No newline at end of file diff --git a/Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.xml.meta b/Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.xml.meta deleted file mode 100644 index a9d60fc3..00000000 --- a/Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.xml.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: 087430efbff5ee54a8c8273aee1508fc -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Fungus/Thirdparty/Reorderable List Field/LICENSE.txt b/Assets/Fungus/Thirdparty/Reorderable List Field/LICENSE.txt deleted file mode 100755 index 68f7deeb..00000000 --- a/Assets/Fungus/Thirdparty/Reorderable List Field/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2015 Rotorz Limited - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/Assets/Fungus/Thirdparty/Reorderable List Field/LICENSE.txt.meta b/Assets/Fungus/Thirdparty/Reorderable List Field/LICENSE.txt.meta deleted file mode 100644 index 9f94a2ba..00000000 --- a/Assets/Fungus/Thirdparty/Reorderable List Field/LICENSE.txt.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: 8fc66c8c3ee484548a40e9b4cb50f206 -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Fungus/Thirdparty/Reorderable List Field/README.txt b/Assets/Fungus/Thirdparty/Reorderable List Field/README.txt deleted file mode 100755 index 6ca1fd5e..00000000 --- a/Assets/Fungus/Thirdparty/Reorderable List Field/README.txt +++ /dev/null @@ -1,139 +0,0 @@ -README -====== - -List control for Unity allowing editor developers to add reorderable list controls to -their GUIs. Supports generic lists and serialized property arrays, though additional -collection types can be supported by implementing `Rotorz.ReorderableList.IReorderableListAdaptor`. - -Licensed under the MIT license. See LICENSE file in the project root for full license -information. DO NOT contribute to this project unless you accept the terms of the -contribution agreement. - -![screenshot](https://bitbucket.org/rotorz/reorderable-list-editor-field-for-unity/raw/master/screenshot.png) - -Features --------- - -- Drag and drop reordering! -- Automatically scrolls if inside a scroll view whilst reordering. -- Easily customized using flags. -- Adaptors for `IList` and `SerializedProperty`. -- Subscribe to add/remove item events. -- Supports mixed item heights. -- Disable drag and/or removal on per-item basis. -- [Drop insertion]() (for use with `UnityEditor.DragAndDrop`). -- Styles can be overridden on per-list basis if desired. -- Subclass list control to override context menu. -- Add drop-down to add menu (or instead of add menu). -- Helper functionality to build element adder menus. -- User guide (Asset Path/Support/User Guide.pdf). -- API reference documentation (Asset Path/Support/API Reference.chm). - -Installing scripts ------------------- - -This control can be added to your project by importing the Unity package which -contains a compiled class library (DLL). This can be used by C# and UnityScript -developers. - -- [Download RotorzReorderableList_v0.4.3 Package (requires Unity 4.5.5+)]() - -If you would prefer to use the non-compiled source code version in your project, -copy the contents of this repository somewhere into your project. - -**Note to UnityScript (*.js) developers:** - -UnityScript will not work with the source code version of this project unless -the contents of this repository is placed at the path "Assets/Plugins/ReorderableList" -due to compilation ordering. - -Example 1: Serialized array of strings (C#) -------------------------------------------- - - :::csharp - SerializedProperty _wishlistProperty; - SerializedProperty _pointsProperty; - - void OnEnable() { - _wishlistProperty = serializedObject.FindProperty("wishlist"); - _pointsProperty = serializedObject.FindProperty("points"); - } - - public override void OnInspectorGUI() { - serializedObject.Update(); - - ReorderableListGUI.Title("Wishlist"); - ReorderableListGUI.ListField(_wishlistProperty); - - ReorderableListGUI.Title("Points"); - ReorderableListGUI.ListField(_pointsProperty, ReorderableListFlags.ShowIndices); - - serializedObject.ApplyModifiedProperties(); - } - -Example 2: List of strings (UnityScript) ----------------------------------------- - - :::javascript - var yourList:List. = new List.(); - - function OnGUI() { - ReorderableListGUI.ListField(yourList, CustomListItem, DrawEmpty); - } - - function CustomListItem(position:Rect, itemValue:String):String { - // Text fields do not like null values! - if (itemValue == null) - itemValue = ''; - return EditorGUI.TextField(position, itemValue); - } - - function DrawEmpty() { - GUILayout.Label('No items in list.', EditorStyles.miniLabel); - } - -Refer to API reference for further examples! - -Submission to the Unity Asset Store ------------------------------------ - -If you wish to include this asset as part of a package for the asset store, please -include the latest package version as-is to avoid conflict issues in user projects. -It is important that license and documentation files are included and remain intact. - -**To include a modified version within your package:** - -- Ensure that license and documentation files are included and remain intact. It should - be clear that these relate to the reorderable list field library. - -- Copyright and license information must remain intact in source files. - -- Change the namespace `Rotorz.ReorderableList` to something unique and DO NOT use the - name "Rotorz". For example, `YourName.ReorderableList` or `YourName.Internal.ReorderableList`. - -- Place files somewhere within your own asset folder to avoid causing conflicts with - other assets which make use of this project. - -Useful links ------------- - -- [Rotorz Website]() - -Contribution Agreement ----------------------- - -This project is licensed under the MIT license (see LICENSE). To be in the best -position to enforce these licenses the copyright status of this project needs to -be as simple as possible. To achieve this the following terms and conditions -must be met: - -- All contributed content (including but not limited to source code, text, - image, videos, bug reports, suggestions, ideas, etc.) must be the - contributors own work. - -- The contributor disclaims all copyright and accepts that their contributed - content will be released to the public domain. - -- The act of submitting a contribution indicates that the contributor agrees - with this agreement. This includes (but is not limited to) pull requests, issues, - tickets, e-mails, newsgroups, blogs, forums, etc. \ No newline at end of file diff --git a/Assets/Fungus/Thirdparty/Reorderable List Field/README.txt.meta b/Assets/Fungus/Thirdparty/Reorderable List Field/README.txt.meta deleted file mode 100644 index a01f2b7c..00000000 --- a/Assets/Fungus/Thirdparty/Reorderable List Field/README.txt.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: d5735c08f13f43a44be11da81110e424 -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: From 17cd4cde4efb90aaa908284085eb9fd9b2431cd7 Mon Sep 17 00:00:00 2001 From: desktop-maesty/steve Date: Sun, 20 May 2018 21:13:27 +1000 Subject: [PATCH 07/12] Try Catch around VarListLayout so we can eat the error that occurs when moving from play back to edit --- .../Fungus/Scripts/Editor/FlowchartWindow.cs | 12 +++++--- .../Scripts/Editor/VariableListAdaptor.cs | 30 ++++++++++++------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs b/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs index fcd84cc3..1006ffa7 100644 --- a/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs +++ b/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs @@ -347,7 +347,7 @@ namespace Fungus.EditorUtils GUILayout.Label("No Flowchart scene object selected"); return; } - + //target has changed, so clear the blockinspector if (flowchart != prevFlowchart) { @@ -514,10 +514,14 @@ namespace Fungus.EditorUtils if (variableListAdaptor != null) { - if (variableListAdaptor.TargetFlowchart == null) - variableListAdaptor = null; - else + if (variableListAdaptor.TargetFlowchart != null) + { variableListAdaptor.DrawVarList(0); + } + else + { + variableListAdaptor = null; + } } if(EditorGUI.EndChangeCheck()) diff --git a/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs b/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs index 0471fd53..8af7048c 100644 --- a/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs +++ b/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs @@ -42,7 +42,7 @@ namespace Fungus.EditorUtils else return this[index].objectReferenceValue as Variable; } - + public VariableListAdaptor(SerializedProperty arrayProperty, Flowchart _targetFlowchart) { if (arrayProperty == null) @@ -138,19 +138,29 @@ namespace Fungus.EditorUtils public void DrawVarList(int w) { - _arrayProperty.serializedObject.Update(); - this.widthOfList = (w == 0 ? VariableListAdaptor.DefaultWidth : w) - ScrollSpacer; - - if(GUILayout.Button("Variables")) + //we want to eat the throw that occurs when switching back to editor from play + try { - _arrayProperty.isExpanded = !_arrayProperty.isExpanded; - } + if (_arrayProperty == null || _arrayProperty.serializedObject == null) + return; + + _arrayProperty.serializedObject.Update(); + this.widthOfList = (w == 0 ? VariableListAdaptor.DefaultWidth : w) - ScrollSpacer; + + if (GUILayout.Button("Variables")) + { + _arrayProperty.isExpanded = !_arrayProperty.isExpanded; + } - if (_arrayProperty.isExpanded) + if (_arrayProperty.isExpanded) + { + list.DoLayoutList(); + } + _arrayProperty.serializedObject.ApplyModifiedProperties(); + } + catch (Exception) { - list.DoLayoutList(); } - _arrayProperty.serializedObject.ApplyModifiedProperties(); } public void DrawItem(Rect position, int index, bool selected, bool focused) From 985eae41999d43bb1eb29a1f48e6dd23c95e444d Mon Sep 17 00:00:00 2001 From: desktop-maesty/steve Date: Sat, 26 May 2018 07:41:07 +1000 Subject: [PATCH 08/12] Specialised Editors correctly call base OnEnable --- Assets/Fungus/Scripts/Editor/CallEditor.cs | 5 ++--- Assets/Fungus/Scripts/Editor/CommandEditor.cs | 3 +++ Assets/Fungus/Scripts/Editor/ControlAudioEditor.cs | 5 ++--- Assets/Fungus/Scripts/Editor/InvokeEventEditor.cs | 5 ++--- Assets/Fungus/Scripts/Editor/LabelEditor.cs | 5 ++--- Assets/Fungus/Scripts/Editor/MenuEditor.cs | 5 ++--- Assets/Fungus/Scripts/Editor/MenuTimerEditor.cs | 5 ++--- Assets/Fungus/Scripts/Editor/PortraitEditor.cs | 7 +++---- Assets/Fungus/Scripts/Editor/SayEditor.cs | 5 ++--- Assets/Fungus/Scripts/Editor/SetVariableEditor.cs | 5 ++--- Assets/Fungus/Scripts/Editor/StageEditor.cs | 7 +++---- Assets/Fungus/Scripts/Editor/VariableConditionEditor.cs | 5 ++--- Assets/Fungus/Scripts/Editor/VariableEditor.cs | 4 +++- Assets/Fungus/Scripts/Editor/WriteEditor.cs | 5 ++--- 14 files changed, 32 insertions(+), 39 deletions(-) diff --git a/Assets/Fungus/Scripts/Editor/CallEditor.cs b/Assets/Fungus/Scripts/Editor/CallEditor.cs index 2397ff19..c4e0ca8f 100644 --- a/Assets/Fungus/Scripts/Editor/CallEditor.cs +++ b/Assets/Fungus/Scripts/Editor/CallEditor.cs @@ -15,10 +15,9 @@ namespace Fungus.EditorUtils protected SerializedProperty startIndexProp; protected SerializedProperty callModeProp; - protected virtual void OnEnable() + public override void OnEnable() { - if (NullTargetCheck()) // Check for an orphaned editor instance - return; + base.OnEnable(); targetFlowchartProp = serializedObject.FindProperty("targetFlowchart"); targetBlockProp = serializedObject.FindProperty("targetBlock"); diff --git a/Assets/Fungus/Scripts/Editor/CommandEditor.cs b/Assets/Fungus/Scripts/Editor/CommandEditor.cs index 56b50f30..656a068c 100644 --- a/Assets/Fungus/Scripts/Editor/CommandEditor.cs +++ b/Assets/Fungus/Scripts/Editor/CommandEditor.cs @@ -40,6 +40,9 @@ namespace Fungus.EditorUtils public virtual void OnEnable() { + if (NullTargetCheck()) // Check for an orphaned editor instance + return; + reorderableLists = new Dictionary(); } diff --git a/Assets/Fungus/Scripts/Editor/ControlAudioEditor.cs b/Assets/Fungus/Scripts/Editor/ControlAudioEditor.cs index 597cf62c..489bc86b 100644 --- a/Assets/Fungus/Scripts/Editor/ControlAudioEditor.cs +++ b/Assets/Fungus/Scripts/Editor/ControlAudioEditor.cs @@ -17,10 +17,9 @@ namespace Fungus.EditorUtils protected SerializedProperty fadeDurationProp; protected SerializedProperty waitUntilFinishedProp; - protected virtual void OnEnable() + public override void OnEnable() { - if (NullTargetCheck()) // Check for an orphaned editor instance - return; + base.OnEnable(); controlProp = serializedObject.FindProperty("control"); audioSourceProp = serializedObject.FindProperty("_audioSource"); diff --git a/Assets/Fungus/Scripts/Editor/InvokeEventEditor.cs b/Assets/Fungus/Scripts/Editor/InvokeEventEditor.cs index 9e990846..978d1ec3 100644 --- a/Assets/Fungus/Scripts/Editor/InvokeEventEditor.cs +++ b/Assets/Fungus/Scripts/Editor/InvokeEventEditor.cs @@ -21,10 +21,9 @@ namespace Fungus.EditorUtils protected SerializedProperty stringParameterProp; protected SerializedProperty stringEventProp; - protected virtual void OnEnable() + public override void OnEnable() { - if (NullTargetCheck()) // Check for an orphaned editor instance - return; + base.OnEnable(); descriptionProp = serializedObject.FindProperty("description"); delayProp = serializedObject.FindProperty("delay"); diff --git a/Assets/Fungus/Scripts/Editor/LabelEditor.cs b/Assets/Fungus/Scripts/Editor/LabelEditor.cs index a025c73c..68ca46c8 100644 --- a/Assets/Fungus/Scripts/Editor/LabelEditor.cs +++ b/Assets/Fungus/Scripts/Editor/LabelEditor.cs @@ -51,10 +51,9 @@ namespace Fungus.EditorUtils property.objectReferenceValue = labelObjects[selectedIndex]; } - protected virtual void OnEnable() + public override void OnEnable() { - if (NullTargetCheck()) // Check for an orphaned editor instance - return; + base.OnEnable(); keyProp = serializedObject.FindProperty("key"); } diff --git a/Assets/Fungus/Scripts/Editor/MenuEditor.cs b/Assets/Fungus/Scripts/Editor/MenuEditor.cs index be94ce28..25f3cb87 100644 --- a/Assets/Fungus/Scripts/Editor/MenuEditor.cs +++ b/Assets/Fungus/Scripts/Editor/MenuEditor.cs @@ -17,10 +17,9 @@ namespace Fungus.EditorUtils protected SerializedProperty setMenuDialogProp; protected SerializedProperty hideThisOptionProp; - protected virtual void OnEnable() + public override void OnEnable() { - if (NullTargetCheck()) // Check for an orphaned editor instance - return; + base.OnEnable(); textProp = serializedObject.FindProperty("text"); descriptionProp = serializedObject.FindProperty("description"); diff --git a/Assets/Fungus/Scripts/Editor/MenuTimerEditor.cs b/Assets/Fungus/Scripts/Editor/MenuTimerEditor.cs index ab9ab970..4607af78 100644 --- a/Assets/Fungus/Scripts/Editor/MenuTimerEditor.cs +++ b/Assets/Fungus/Scripts/Editor/MenuTimerEditor.cs @@ -12,10 +12,9 @@ namespace Fungus.EditorUtils protected SerializedProperty durationProp; protected SerializedProperty targetBlockProp; - protected virtual void OnEnable() + public override void OnEnable() { - if (NullTargetCheck()) // Check for an orphaned editor instance - return; + base.OnEnable(); durationProp = serializedObject.FindProperty("_duration"); targetBlockProp = serializedObject.FindProperty("targetBlock"); diff --git a/Assets/Fungus/Scripts/Editor/PortraitEditor.cs b/Assets/Fungus/Scripts/Editor/PortraitEditor.cs index 24c8111e..eec0d740 100644 --- a/Assets/Fungus/Scripts/Editor/PortraitEditor.cs +++ b/Assets/Fungus/Scripts/Editor/PortraitEditor.cs @@ -25,11 +25,10 @@ namespace Fungus.EditorUtils protected SerializedProperty waitUntilFinishedProp; protected SerializedProperty moveProp; protected SerializedProperty shiftIntoPlaceProp; - - protected virtual void OnEnable() + + public override void OnEnable() { - if (NullTargetCheck()) // Check for an orphaned editor instance - return; + base.OnEnable(); stageProp = serializedObject.FindProperty("stage"); displayProp = serializedObject.FindProperty("display"); diff --git a/Assets/Fungus/Scripts/Editor/SayEditor.cs b/Assets/Fungus/Scripts/Editor/SayEditor.cs index 35794701..a6ace53f 100644 --- a/Assets/Fungus/Scripts/Editor/SayEditor.cs +++ b/Assets/Fungus/Scripts/Editor/SayEditor.cs @@ -83,10 +83,9 @@ namespace Fungus.EditorUtils protected SerializedProperty setSayDialogProp; protected SerializedProperty waitForVOProp; - protected virtual void OnEnable() + public override void OnEnable() { - if (NullTargetCheck()) // Check for an orphaned editor instance - return; + base.OnEnable(); characterProp = serializedObject.FindProperty("character"); portraitProp = serializedObject.FindProperty("portrait"); diff --git a/Assets/Fungus/Scripts/Editor/SetVariableEditor.cs b/Assets/Fungus/Scripts/Editor/SetVariableEditor.cs index dfb18d87..847560f8 100644 --- a/Assets/Fungus/Scripts/Editor/SetVariableEditor.cs +++ b/Assets/Fungus/Scripts/Editor/SetVariableEditor.cs @@ -30,10 +30,9 @@ namespace Fungus.EditorUtils protected List variableDataProps; - protected virtual void OnEnable() + public override void OnEnable() { - if (NullTargetCheck()) // Check for an orphaned editor instance - return; + base.OnEnable(); variableProp = serializedObject.FindProperty("variable"); setOperatorProp = serializedObject.FindProperty("setOperator"); diff --git a/Assets/Fungus/Scripts/Editor/StageEditor.cs b/Assets/Fungus/Scripts/Editor/StageEditor.cs index 0cbaf179..71cc27f1 100644 --- a/Assets/Fungus/Scripts/Editor/StageEditor.cs +++ b/Assets/Fungus/Scripts/Editor/StageEditor.cs @@ -15,11 +15,10 @@ namespace Fungus.EditorUtils protected SerializedProperty useDefaultSettingsProp; protected SerializedProperty fadeDurationProp; protected SerializedProperty waitUntilFinishedProp; - - protected virtual void OnEnable() + + public override void OnEnable() { - if (NullTargetCheck()) // Check for an orphaned editor instance - return; + base.OnEnable(); displayProp = serializedObject.FindProperty("display"); stageProp = serializedObject.FindProperty("stage"); diff --git a/Assets/Fungus/Scripts/Editor/VariableConditionEditor.cs b/Assets/Fungus/Scripts/Editor/VariableConditionEditor.cs index 46001119..cc5c1515 100644 --- a/Assets/Fungus/Scripts/Editor/VariableConditionEditor.cs +++ b/Assets/Fungus/Scripts/Editor/VariableConditionEditor.cs @@ -15,10 +15,9 @@ namespace Fungus.EditorUtils protected Dictionary propByVariableType; - protected virtual void OnEnable() + public override void OnEnable() { - if (NullTargetCheck()) // Check for an orphaned editor instance - return; + base.OnEnable(); variableProp = serializedObject.FindProperty("variable"); compareOperatorProp = serializedObject.FindProperty("compareOperator"); diff --git a/Assets/Fungus/Scripts/Editor/VariableEditor.cs b/Assets/Fungus/Scripts/Editor/VariableEditor.cs index 09a23582..ffb55317 100644 --- a/Assets/Fungus/Scripts/Editor/VariableEditor.cs +++ b/Assets/Fungus/Scripts/Editor/VariableEditor.cs @@ -12,8 +12,10 @@ namespace Fungus.EditorUtils [CustomEditor (typeof(Variable), true)] public class VariableEditor : CommandEditor { - protected virtual void OnEnable() + public override void OnEnable() { + base.OnEnable(); + Variable t = target as Variable; t.hideFlags = HideFlags.HideInInspector; } diff --git a/Assets/Fungus/Scripts/Editor/WriteEditor.cs b/Assets/Fungus/Scripts/Editor/WriteEditor.cs index 354a28d3..eaf4870a 100644 --- a/Assets/Fungus/Scripts/Editor/WriteEditor.cs +++ b/Assets/Fungus/Scripts/Editor/WriteEditor.cs @@ -30,10 +30,9 @@ namespace Fungus.EditorUtils EditorGUILayout.SelectableLabel(tagsText, GUI.skin.GetStyle("HelpBox"), GUILayout.MinHeight(pixelHeight)); } - protected virtual void OnEnable() + public override void OnEnable() { - if (NullTargetCheck()) // Check for an orphaned editor instance - return; + base.OnEnable(); textObjectProp = serializedObject.FindProperty("textObject"); textProp = serializedObject.FindProperty("text"); From ff5c46195fca94d2ab20da1999e6d85ab5b68ed9 Mon Sep 17 00:00:00 2001 From: desktop-maesty/steve Date: Mon, 28 May 2018 18:11:25 +1000 Subject: [PATCH 09/12] Remove manual left offseting in ReorderableList CommandListAdapter --- Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs b/Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs index 9306c4da..20b9200b 100644 --- a/Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs +++ b/Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs @@ -57,7 +57,7 @@ namespace Fungus.EditorUtils private void DrawHeader(Rect rect) { - EditorGUI.PrefixLabel(rect, new GUIContent("Commands")); + EditorGUI.LabelField(rect, new GUIContent("Commands")); } public void DrawItem(Rect position, int index, bool selected, bool focused) @@ -136,7 +136,7 @@ namespace Fungus.EditorUtils for (int i = 0; i < command.IndentLevel; ++i) { Rect indentRect = position; - indentRect.x += i * indentSize - 21; + indentRect.x += i * indentSize;// - 21; indentRect.width = indentSize + 1; indentRect.y -= 2; indentRect.height += 5; @@ -148,9 +148,9 @@ namespace Fungus.EditorUtils float indentWidth = command.IndentLevel * indentSize; Rect commandLabelRect = position; - commandLabelRect.x += indentWidth - 21; + commandLabelRect.x += indentWidth;// - 21; commandLabelRect.y -= 2; - commandLabelRect.width -= (indentSize * command.IndentLevel - 22); + commandLabelRect.width -= (indentSize * command.IndentLevel);// - 22); commandLabelRect.height += 5; // There's a weird incompatibility between the Reorderable list control used for the command list and @@ -159,8 +159,8 @@ namespace Fungus.EditorUtils // The workaround for now is to hide the reordering grabber from mouse clicks by extending the command // selection rectangle to cover it. We are planning to totally replace the command list display system. Rect clickRect = position; - clickRect.x -= 20; - clickRect.width += 20; + //clickRect.x -= 20; + //clickRect.width += 20; // Select command via left click if (Event.current.type == EventType.MouseDown && From c2e317ea5ac70269cf9117e9199c0eb1aefc06aa Mon Sep 17 00:00:00 2001 From: desktop-maesty/steve Date: Sun, 24 Jun 2018 20:58:59 +1000 Subject: [PATCH 10/12] Reorderable lists for commands and variables now use EditorGUI determined LineHeight --- Assets/Fungus/Scripts/Editor/CommandEditor.cs | 10 +- .../Scripts/Editor/CommandListAdaptor.cs | 110 +++++++++--------- .../Scripts/Editor/VariableListAdaptor.cs | 6 + 3 files changed, 73 insertions(+), 53 deletions(-) diff --git a/Assets/Fungus/Scripts/Editor/CommandEditor.cs b/Assets/Fungus/Scripts/Editor/CommandEditor.cs index 656a068c..faca613f 100644 --- a/Assets/Fungus/Scripts/Editor/CommandEditor.cs +++ b/Assets/Fungus/Scripts/Editor/CommandEditor.cs @@ -171,8 +171,16 @@ namespace Fungus.EditorUtils drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, locSerProp.displayName); + }, + drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => + { + EditorGUI.PropertyField(rect, locSerProp.GetArrayElementAtIndex(index)); + }, + elementHeightCallback = (int index) => + { + return EditorGUI.GetPropertyHeight(locSerProp.GetArrayElementAtIndex(index), null, true);// + EditorGUIUtility.singleLineHeight; } - }; + }; reorderableLists.Add(iterator.displayName, reordList); } diff --git a/Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs b/Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs index 20b9200b..ab9dab10 100644 --- a/Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs +++ b/Assets/Fungus/Scripts/Editor/CommandListAdaptor.cs @@ -8,8 +8,9 @@ using UnityEditorInternal; namespace Fungus.EditorUtils { - public class CommandListAdaptor { - + public class CommandListAdaptor + { + public void DrawCommandList() { if (block.CommandList.Count == 0) @@ -29,61 +30,69 @@ namespace Fungus.EditorUtils protected ReorderableList list; protected Block block; - + public float fixedItemHeight; - public SerializedProperty this[int index] { + public SerializedProperty this[int index] + { get { return _arrayProperty.GetArrayElementAtIndex(index); } } - - public SerializedProperty arrayProperty { + + public SerializedProperty arrayProperty + { get { return _arrayProperty; } } - - public CommandListAdaptor(Block _block, SerializedProperty arrayProperty, float fixedItemHeight = 0) { + + public CommandListAdaptor(Block _block, SerializedProperty arrayProperty) + { if (arrayProperty == null) throw new ArgumentNullException("Array property was null."); if (!arrayProperty.isArray) throw new InvalidOperationException("Specified serialized propery is not an array."); - + this._arrayProperty = arrayProperty; - this.fixedItemHeight = fixedItemHeight; this.block = _block; list = new ReorderableList(arrayProperty.serializedObject, arrayProperty, true, true, false, false); list.drawHeaderCallback = DrawHeader; list.drawElementCallback = DrawItem; + //list.elementHeightCallback = GetElementHeight; } + //private float GetElementHeight(int index) + //{ + // return EditorGUI.GetPropertyHeight(this[index], null, true);// + EditorGUIUtility.singleLineHeight; + //} + private void DrawHeader(Rect rect) { EditorGUI.LabelField(rect, new GUIContent("Commands")); } - public void DrawItem(Rect position, int index, bool selected, bool focused) + public void DrawItem(Rect position, int index, bool selected, bool focused) { Command command = this[index].objectReferenceValue as Command; - + if (command == null) { return; } - + CommandInfoAttribute commandInfoAttr = CommandEditor.GetCommandInfo(command.GetType()); if (commandInfoAttr == null) { return; } - + var flowchart = (Flowchart)command.GetFlowchart(); if (flowchart == null) { return; } - + bool isComment = command.GetType() == typeof(Comment); bool isLabel = (command.GetType() == typeof(Label)); - + bool error = false; string summary = command.GetSummary(); if (summary == null) @@ -117,9 +126,9 @@ namespace Fungus.EditorUtils break; } } - + string commandName = commandInfoAttr.CommandName; - + GUIStyle commandLabelStyle = new GUIStyle(GUI.skin.box); commandLabelStyle.normal.background = FungusEditorResources.CommandBackground; int borderSize = 5; @@ -131,8 +140,8 @@ namespace Fungus.EditorUtils commandLabelStyle.richText = true; commandLabelStyle.fontSize = 11; commandLabelStyle.padding.top -= 1; - - float indentSize = 20; + + float indentSize = 20; for (int i = 0; i < command.IndentLevel; ++i) { Rect indentRect = position; @@ -143,10 +152,10 @@ namespace Fungus.EditorUtils GUI.backgroundColor = new Color(0.5f, 0.5f, 0.5f, 1f); GUI.Box(indentRect, "", commandLabelStyle); } - + float commandNameWidth = Mathf.Max(commandLabelStyle.CalcSize(new GUIContent(commandName)).x, 90f); float indentWidth = command.IndentLevel * indentSize; - + Rect commandLabelRect = position; commandLabelRect.x += indentWidth;// - 21; commandLabelRect.y -= 2; @@ -173,7 +182,8 @@ namespace Fungus.EditorUtils // Command key and shift key is not pressed if (!EditorGUI.actionKey && !Event.current.shift) { - BlockEditor.actionList.Add ( delegate { + BlockEditor.actionList.Add(delegate + { flowchart.SelectedCommands.Remove(command); flowchart.ClearSelectedCommands(); }); @@ -182,7 +192,8 @@ namespace Fungus.EditorUtils // Command key pressed if (EditorGUI.actionKey) { - BlockEditor.actionList.Add ( delegate { + BlockEditor.actionList.Add(delegate + { flowchart.SelectedCommands.Remove(command); }); Event.current.Use(); @@ -195,13 +206,15 @@ namespace Fungus.EditorUtils // Left click and no command key if (!shift && !EditorGUI.actionKey && Event.current.button == 0) { - BlockEditor.actionList.Add ( delegate { + BlockEditor.actionList.Add(delegate + { flowchart.ClearSelectedCommands(); }); Event.current.Use(); } - BlockEditor.actionList.Add ( delegate { + BlockEditor.actionList.Add(delegate + { flowchart.AddSelectedCommand(command); }); @@ -209,12 +222,12 @@ namespace Fungus.EditorUtils int firstSelectedIndex = -1; int lastSelectedIndex = -1; if (flowchart.SelectedCommands.Count > 0) - { - if ( flowchart.SelectedBlock != null) + { + if (flowchart.SelectedBlock != null) { for (int i = 0; i < flowchart.SelectedBlock.CommandList.Count; i++) { - Command commandInBlock = flowchart.SelectedBlock.CommandList[i]; + Command commandInBlock = flowchart.SelectedBlock.CommandList[i]; foreach (Command selectedCommand in flowchart.SelectedCommands) { if (commandInBlock == selectedCommand) @@ -224,9 +237,9 @@ namespace Fungus.EditorUtils } } } - for (int i = flowchart.SelectedBlock.CommandList.Count - 1; i >=0; i--) + for (int i = flowchart.SelectedBlock.CommandList.Count - 1; i >= 0; i--) { - Command commandInBlock = flowchart.SelectedBlock.CommandList[i]; + Command commandInBlock = flowchart.SelectedBlock.CommandList[i]; foreach (Command selectedCommand in flowchart.SelectedCommands) { if (commandInBlock == selectedCommand) @@ -239,7 +252,7 @@ namespace Fungus.EditorUtils } } - if (shift) + if (shift) { int currentIndex = command.CommandIndex; if (firstSelectedIndex == -1 || @@ -264,7 +277,8 @@ namespace Fungus.EditorUtils for (int i = Math.Min(firstSelectedIndex, lastSelectedIndex); i < Math.Max(firstSelectedIndex, lastSelectedIndex); ++i) { var selectedCommand = flowchart.SelectedBlock.CommandList[i]; - BlockEditor.actionList.Add ( delegate { + BlockEditor.actionList.Add(delegate + { flowchart.AddSelectedCommand(selectedCommand); }); } @@ -274,13 +288,13 @@ namespace Fungus.EditorUtils } GUIUtility.keyboardControl = 0; // Fix for textarea not refeshing (change focus) } - + Color commandLabelColor = Color.white; if (flowchart.ColorCommands) { commandLabelColor = command.GetButtonColor(); } - + if (commandIsSelected) { commandLabelColor = Color.green; @@ -293,9 +307,9 @@ namespace Fungus.EditorUtils { // TODO: Show warning icon } - + GUI.backgroundColor = commandLabelColor; - + if (isComment) { GUI.Label(commandLabelRect, "", commandLabelStyle); @@ -314,7 +328,7 @@ namespace Fungus.EditorUtils GUI.Label(commandLabelRect, commandNameLabel, commandLabelStyle); } - + if (command.ExecutingIconTimer > Time.realtimeSinceStartup) { Rect iconRect = new Rect(commandLabelRect); @@ -332,7 +346,7 @@ namespace Fungus.EditorUtils GUI.color = storeColor; } - + Rect summaryRect = new Rect(commandLabelRect); if (isComment) { @@ -343,16 +357,16 @@ namespace Fungus.EditorUtils summaryRect.x += commandNameWidth + 5; summaryRect.width -= commandNameWidth + 5; } - + GUIStyle summaryStyle = new GUIStyle(); - summaryStyle.fontSize = 10; + summaryStyle.fontSize = 10; summaryStyle.padding.top += 5; summaryStyle.richText = true; summaryStyle.wordWrap = false; summaryStyle.clipping = TextClipping.Clip; commandLabelStyle.alignment = TextAnchor.MiddleLeft; GUI.Label(summaryRect, summary, summaryStyle); - + if (error) { GUISkin editorSkin = EditorGUIUtility.GetBuiltinSkin(EditorSkin.Inspector); @@ -363,17 +377,9 @@ namespace Fungus.EditorUtils GUI.Label(errorRect, editorSkin.GetStyle("CN EntryError").normal.background); summaryRect.width -= 20; } - + GUI.backgroundColor = Color.white; } - - public virtual float GetItemHeight(int index) { - return fixedItemHeight != 0f - ? fixedItemHeight - : EditorGUI.GetPropertyHeight(this[index], GUIContent.none, false) - ; - } - - + } } diff --git a/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs b/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs index 8af7048c..252d7206 100644 --- a/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs +++ b/Assets/Fungus/Scripts/Editor/VariableListAdaptor.cs @@ -60,6 +60,12 @@ namespace Fungus.EditorUtils list.onRemoveCallback = RemoveItem; list.onAddCallback = AddButton; list.onRemoveCallback = RemoveItem; + list.elementHeightCallback = GetElementHeight; + } + + private float GetElementHeight(int index) + { + return /*EditorGUI.GetPropertyHeight(this[index], null, true) +*/ EditorGUIUtility.singleLineHeight; } private void RemoveItem(ReorderableList list) From a7aac4291a52b0218fc332a7b3f711680218dc66 Mon Sep 17 00:00:00 2001 From: desktop-maesty/steve Date: Sun, 29 Jul 2018 13:21:26 +1000 Subject: [PATCH 11/12] Correct variable list in flowchart window width --- Assets/Fungus/Scripts/Editor/FlowchartWindow.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs b/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs index 1006ffa7..42f86b27 100644 --- a/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs +++ b/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs @@ -516,7 +516,8 @@ namespace Fungus.EditorUtils { if (variableListAdaptor.TargetFlowchart != null) { - variableListAdaptor.DrawVarList(0); + //440 - space for scrollbar + variableListAdaptor.DrawVarList(400); } else { From 0387e8e79257f06e654393af3d3e4eeeeccbacaf Mon Sep 17 00:00:00 2001 From: desktop-maesty/steve Date: Sat, 4 Aug 2018 16:53:26 +1000 Subject: [PATCH 12/12] Remove Rotorz from ThirdPartyNotices --- .../Fungus/Thirdparty/ThirdPartyNotices.txt | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/Assets/Fungus/Thirdparty/ThirdPartyNotices.txt b/Assets/Fungus/Thirdparty/ThirdPartyNotices.txt index 04c20498..c5c97112 100644 --- a/Assets/Fungus/Thirdparty/ThirdPartyNotices.txt +++ b/Assets/Fungus/Thirdparty/ThirdPartyNotices.txt @@ -174,33 +174,6 @@ THE SOFTWARE. ================= -ReorderableListField -MIT License - -The MIT License (MIT) - -Copyright (c) 2013-2015 Rotorz Limited - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -================= - Usfxr Apache License