From 40537cb019020b2ed207586c704e7e99d0a455e7 Mon Sep 17 00:00:00 2001 From: chrisgregan Date: Mon, 28 Jul 2014 21:21:52 +0100 Subject: [PATCH] Added reorderable list of global and local variables --- .../Fungus/Editor/SequenceControllerEditor.cs | 84 +- Assets/Fungus/Scripts/Variables.cs | 32 + .../Fungus/Tests/Sequence/SequenceTest.unity | Bin 67932 -> 68620 bytes Assets/Fungus/Thirdparty.meta | 5 + .../Thirdparty/Reorderable List Field.meta | 5 + .../Reorderable List Field/Editor.meta | 5 + .../Editor/Editor.ReorderableList.dll | Bin 0 -> 39936 bytes .../Editor/Editor.ReorderableList.dll.meta | 7 + .../Editor/Editor.ReorderableList.xml | 1277 +++++++++++++++++ .../Editor/Editor.ReorderableList.xml.meta | 4 + .../Reorderable List Field/LICENSE.txt | 26 + .../Reorderable List Field/LICENSE.txt.meta | 4 + .../Reorderable List Field/README.txt | 141 ++ .../Reorderable List Field/README.txt.meta | 4 + .../VisualScripting/SequenceController.cs | 19 + 15 files changed, 1598 insertions(+), 15 deletions(-) create mode 100644 Assets/Fungus/Thirdparty.meta create mode 100644 Assets/Fungus/Thirdparty/Reorderable List Field.meta create mode 100644 Assets/Fungus/Thirdparty/Reorderable List Field/Editor.meta create mode 100755 Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.dll create mode 100644 Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.dll.meta create mode 100755 Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.xml create mode 100644 Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.xml.meta create mode 100755 Assets/Fungus/Thirdparty/Reorderable List Field/LICENSE.txt create mode 100644 Assets/Fungus/Thirdparty/Reorderable List Field/LICENSE.txt.meta create mode 100755 Assets/Fungus/Thirdparty/Reorderable List Field/README.txt create mode 100644 Assets/Fungus/Thirdparty/Reorderable List Field/README.txt.meta diff --git a/Assets/Fungus/Editor/SequenceControllerEditor.cs b/Assets/Fungus/Editor/SequenceControllerEditor.cs index 2e1c85a9..1962526d 100644 --- a/Assets/Fungus/Editor/SequenceControllerEditor.cs +++ b/Assets/Fungus/Editor/SequenceControllerEditor.cs @@ -3,34 +3,67 @@ using UnityEngine; using System.Collections; using System.Collections.Generic; using Fungus; +using Rotorz.ReorderableList; +using System.Linq; + +[CustomPropertyDrawer (typeof(SequenceController.Variable))] +public class VariableDrawer : PropertyDrawer +{ + public override void OnGUI (Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty keyProp = property.FindPropertyRelative("key"); + SerializedProperty typeProp = property.FindPropertyRelative("type"); + + // Draw the text field control GUI. + EditorGUI.BeginChangeCheck(); + + Rect keyRect = position; + keyRect.width *= 0.5f; + + Rect typeRect = position; + typeRect.x += keyRect.width; + typeRect.width -= keyRect.width; + + string keyValue = EditorGUI.TextField(keyRect, label, keyProp.stringValue); + int selectedEnum = (int)(SequenceController.VariableType)EditorGUI.EnumPopup(typeRect, (SequenceController.VariableType)typeProp.enumValueIndex); + + if (EditorGUI.EndChangeCheck ()) + { + char[] arr = keyValue.Where(c => (char.IsLetterOrDigit(c) || c == '_')).ToArray(); + + keyValue = new string(arr); + + keyProp.stringValue = keyValue; + typeProp.enumValueIndex = selectedEnum; + } + } +} [CustomEditor (typeof(SequenceController))] public class SequenceControllerEditor : Editor { + SerializedProperty globalVariablesProperty; + SerializedProperty localVariablesProperty; + + void OnEnable() + { + globalVariablesProperty = serializedObject.FindProperty("globalVariables"); + localVariablesProperty = serializedObject.FindProperty("localVariables"); + } + public override void OnInspectorGUI() { + serializedObject.Update(); + SequenceController t = target as SequenceController; - GUIContent stepTimeLabel = new GUIContent("Step Time", "Minimum time to execute each step"); - t.stepTime = EditorGUILayout.FloatField(stepTimeLabel, t.stepTime); - - GUIContent startSequenceLabel = new GUIContent("Start Sequence", "Sequence to be executed when controller starts."); - t.startSequence = SequenceEditor.SequenceField(startSequenceLabel, t, t.startSequence); - - if (t.startSequence == null) - { - GUIStyle style = new GUIStyle(GUI.skin.label); - style.normal.textColor = new Color(1,0,0); - EditorGUILayout.LabelField(new GUIContent("Error: Please select a Start Sequence"), style); - } - GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Open Fungus Editor")) { EditorWindow.GetWindow(typeof(FungusEditorWindow), false, "Fungus Editor"); } - + if (GUILayout.Button("New Sequence")) { GameObject go = new GameObject("Sequence"); @@ -42,8 +75,29 @@ public class SequenceControllerEditor : Editor Undo.RegisterCreatedObjectUndo(go, "Sequence"); Selection.activeGameObject = go; } - + GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); + + GUIContent stepTimeLabel = new GUIContent("Step Time", "Minimum time to execute each step"); + t.stepTime = EditorGUILayout.FloatField(stepTimeLabel, t.stepTime); + + GUIContent startSequenceLabel = new GUIContent("Start Sequence", "Sequence to be executed when controller starts."); + t.startSequence = SequenceEditor.SequenceField(startSequenceLabel, t, t.startSequence); + + if (t.startSequence == null) + { + GUIStyle style = new GUIStyle(GUI.skin.label); + style.normal.textColor = new Color(1,0,0); + EditorGUILayout.LabelField(new GUIContent("Error: Please select a Start Sequence"), style); + } + + ReorderableListGUI.Title("Local Variables"); + ReorderableListGUI.ListField(localVariablesProperty); + + ReorderableListGUI.Title("Global Variables"); + ReorderableListGUI.ListField(globalVariablesProperty); + + serializedObject.ApplyModifiedProperties(); } } \ No newline at end of file diff --git a/Assets/Fungus/Scripts/Variables.cs b/Assets/Fungus/Scripts/Variables.cs index 466f64ad..19dfc959 100644 --- a/Assets/Fungus/Scripts/Variables.cs +++ b/Assets/Fungus/Scripts/Variables.cs @@ -178,6 +178,14 @@ namespace Fungus */ public static void SetFloat(string key, float value) { + if (stringDict.ContainsKey(key) || + intDict.ContainsKey(key) || + boolDict.ContainsKey(key)) + { + Debug.LogError("Key already in use with a string, integer or boolean variable"); + return; + } + floatDict[key] = value; } @@ -186,6 +194,14 @@ namespace Fungus */ public static void SetInteger(string key, int value) { + if (stringDict.ContainsKey(key) || + floatDict.ContainsKey(key) || + boolDict.ContainsKey(key)) + { + Debug.LogError("Key already in use with a string, float or boolean variable"); + return; + } + intDict[key] = value; } @@ -194,6 +210,14 @@ namespace Fungus */ public static void SetBoolean(string key, bool value) { + if (stringDict.ContainsKey(key) || + floatDict.ContainsKey(key) || + intDict.ContainsKey(key)) + { + Debug.LogError("Key already in use with a string, float or integer variable"); + return; + } + boolDict[key] = value; } @@ -202,6 +226,14 @@ namespace Fungus */ public static void SetString(string key, string value) { + if (boolDict.ContainsKey(key) || + floatDict.ContainsKey(key) || + intDict.ContainsKey(key)) + { + Debug.LogError("Key already in use with a boolean, float or integer variable"); + return; + } + stringDict[key] = value; } diff --git a/Assets/Fungus/Tests/Sequence/SequenceTest.unity b/Assets/Fungus/Tests/Sequence/SequenceTest.unity index bee63194cc23e7ca567101a9763e94dfa1747d4d..1f2021cc0b81b35678878e747c953b07c8f1ae8a 100644 GIT binary patch delta 981 zcmaKqPiPZC7{$LaOOr|op)pBYZ5nIUR9mDV5+!Jimk3%S78}7sle#p)(3B)mEBs29PCQ2ZOLqHoe&yY%3|?0);3H}88hY^5Mw zD@qokPX=NQ4MbFr+BI!?ZdTs7<_&zZakBMPI2j8^;xfe(gWN zWa^|be%)bZPTnI~x#O_CqYVpU2my@|ZNMv)PR53Z=$xFXxwwQ2+sfYsT&$h<9I$e) z-^|nLH=@yRcyK-f`YT)^OMy1!W_eJ)!>MY!CZ^w_i8;LHX7Wu`rgO$LdsK4Rzl6V)> z=3^EsQ3kaZ`zBZ(%nSBa)!hOsgL%NdsO&bFX%o>X*aA^jJm?N!4)6?Wt?|o3b8rz% zAMh2J&qmaz(=C7%!3MxSt4%ulebFjd3``5y1s1gv1;Bo)y6*n0FFFONH{1iE$+4R7 zhblbyq%@oZJFhc51XcwLf>l+W4=m6`6bIAx`oSK9=^Gybqh|EYLa3d1#&-Nd2(W_4 z9}KIrRQY((vzcg4$EI3ZE)jlTeVA#mQLwYR#tPUXSO`oz@dGfAbM3(OqWMF>ymIxu zT~h8ZEnDiOS)zIW#61&p@qrbIKV2!Cgsx9crFpsP;rS(rzy4Kni@P;q_9jk_ga>6p s=-Pb?7D)6(<)n;?NXh*!80vyEILBLZ~L@rPQ5*(jYFfD0OHz5mFj3kP0rwM<9ZP^bw6zNdEu} zA+t!TB57CI6cVOE5QU_;aU(vuD3V3MO`-;Z4-`emZ*T_3#htnHoA2Cn&)urjElVEY zeHMcA5&$RnrKab(TYD0DA*yTbF?D-J@E{{?e-->#pJj01Q0Et$(lYtUqV zf7Nw;iSO!)J3gY_=H9B^pydt$Q?xH;?jEf{i_$)ucAwU#6=-`v(RkniQ8^44m$e$d zE(a2A+C`exPNw9{KJB`#_7pAV17frvX6|&VC}&DU`+<`T z_G!iqznQ`5$Mvjo1jySCJV)E7C1~HxoJ>362X5GEXJ}QLz40uqM@tqNv?lI&=Wa#= zK$qhV#J{WF{cy`40-o8d5e%;O!v9~UNn1DyT(dRSXl>d8&6;?J=0EmtV5iZ%Ma*g8 zflpFvLx*-|IPy3i?gF98yh}K)j($mM{P#=GK}M75<&_KR#e6z@HLWT?qb!hAMX$Fa fLRlP>JHXa%CE*e#Dm77%9(@#rD+h$Uan92}RoAiq diff --git a/Assets/Fungus/Thirdparty.meta b/Assets/Fungus/Thirdparty.meta new file mode 100644 index 00000000..a728c87b --- /dev/null +++ b/Assets/Fungus/Thirdparty.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 480b070201a224941aa71ed609c4a6b6 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Fungus/Thirdparty/Reorderable List Field.meta b/Assets/Fungus/Thirdparty/Reorderable List Field.meta new file mode 100644 index 00000000..85469070 --- /dev/null +++ b/Assets/Fungus/Thirdparty/Reorderable List Field.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 97161408484da49bc8a4fb5f4b4c2f5a +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Fungus/Thirdparty/Reorderable List Field/Editor.meta b/Assets/Fungus/Thirdparty/Reorderable List Field/Editor.meta new file mode 100644 index 00000000..93c1d116 --- /dev/null +++ b/Assets/Fungus/Thirdparty/Reorderable List Field/Editor.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 1351e3cf05fcef04cbafc172b277cd32 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.dll b/Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.dll new file mode 100755 index 0000000000000000000000000000000000000000..ba067b1a08320c0c37d77d82e37d6b93f901b080 GIT binary patch literal 39936 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
|3)!&n~^zN;o1XgtFRl6 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 NW6}RL + + + Editor.ReorderableList + + + + + 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. + + + + + 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. + + + + + Draw interface for list element. + + Position in GUI. + Zero-based index of array element. + + + + Duplicate existing element. + + Zero-based index of list element. + + + + 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. + + + + Adaptor allowing reorderable list control to interface with list data. + + + + + Add new element at end of list. + + + + + 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. + + + + + Draw interface for list element. + + Position in GUI. + Zero-based index of array element. + + + + Duplicate existing element. + + Zero-based index of list element. + + + + 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. + + + + 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. + Zero-based index of item. + + + + Gets adaptor to reorderable list container which contains element. + + + + + Gets zero-based index of item which was inserted. + + + + + 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. + + + + Gets or sets style used to draw add button. + + + + + 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. + + + + 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. + + + + + 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. + + + + Duplicate specified item and raises the event . + + Reorderable list adaptor. + Zero-based index of item. + + + + Gets or sets flags which affect behavior of control. + + + + + 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. + + + + + Insert item at specified index and raises the event . + + Reorderable list adaptor. + Zero-based index of item. + + + + Occurs after list item is inserted or duplicated. + + + + + Occurs before list item is removed and allows removal 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 after list item is inserted or duplicated. + + Event arguments. + + + + Raises event before list item is removed and provides oppertunity to cancel. + + Event arguments. + + + + Gets or sets style used to draw remove button. + + + + + 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 zero-based index of list item which is currently being drawn; + or a value of -1 if no item is currently being drawn. + + + + + Gets default style for add item button. + + + + + Gets default style for background of list control. + + + + + 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 default style for remove item button. + + + + + Gets default style for title header. + + + + + Gets or sets zero-based index of last item which 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. + + + + 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. + + + + + 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. + + + + + Draw interface for list element. + + Position in GUI. + Zero-based index of array element. + + + + Duplicate existing element. + + Zero-based index of list element. + + + + 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 new file mode 100644 index 00000000..27df1eee --- /dev/null +++ b/Assets/Fungus/Thirdparty/Reorderable List Field/Editor/Editor.ReorderableList.xml.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 087430efbff5ee54a8c8273aee1508fc +TextScriptImporter: + userData: diff --git a/Assets/Fungus/Thirdparty/Reorderable List Field/LICENSE.txt b/Assets/Fungus/Thirdparty/Reorderable List Field/LICENSE.txt new file mode 100755 index 00000000..0f8f365c --- /dev/null +++ b/Assets/Fungus/Thirdparty/Reorderable List Field/LICENSE.txt @@ -0,0 +1,26 @@ +Copyright (c) 2013, Rotorz Limited +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those +of the authors and should not be interpreted as representing official policies, +either expressed or implied, of the FreeBSD Project. \ 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 new file mode 100644 index 00000000..b4c16cf8 --- /dev/null +++ b/Assets/Fungus/Thirdparty/Reorderable List Field/LICENSE.txt.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 8fc66c8c3ee484548a40e9b4cb50f206 +TextScriptImporter: + userData: diff --git a/Assets/Fungus/Thirdparty/Reorderable List Field/README.txt b/Assets/Fungus/Thirdparty/Reorderable List Field/README.txt new file mode 100755 index 00000000..6aaa9c22 --- /dev/null +++ b/Assets/Fungus/Thirdparty/Reorderable List Field/README.txt @@ -0,0 +1,141 @@ +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`. + +Use of this source code is governed by a BSD-style license that can be found in +the LICENSE file. 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! +- 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. +- Styles can be overriden on per-list basis if desired. +- Subclass list control to override context menu. +- 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.2.4 Package (requires Unity 4.2.1+)]() + +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 BSD 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. + +### Disclaimer + +External content linked in the above text are for convienence purposes only and +do not contribute to the agreement in any way. Linked content should be digested +under the readers discretion. diff --git a/Assets/Fungus/Thirdparty/Reorderable List Field/README.txt.meta b/Assets/Fungus/Thirdparty/Reorderable List Field/README.txt.meta new file mode 100644 index 00000000..2e70c7f5 --- /dev/null +++ b/Assets/Fungus/Thirdparty/Reorderable List Field/README.txt.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: d5735c08f13f43a44be11da81110e424 +TextScriptImporter: + userData: diff --git a/Assets/Fungus/VisualScripting/SequenceController.cs b/Assets/Fungus/VisualScripting/SequenceController.cs index 9cb06253..e1af17c9 100644 --- a/Assets/Fungus/VisualScripting/SequenceController.cs +++ b/Assets/Fungus/VisualScripting/SequenceController.cs @@ -4,6 +4,7 @@ using UnityEditor; using UnityEngine; using System; using System.Collections; +using System.Collections.Generic; using Fungus; public class SequenceController : MonoBehaviour @@ -15,6 +16,24 @@ public class SequenceController : MonoBehaviour [System.NonSerialized] public Sequence activeSequence; + public enum VariableType + { + String, + Integer, + Float, + Boolean + }; + + [Serializable] + public class Variable + { + public string key; + public VariableType type; + } + + public List localVariables = new List(); + public List globalVariables = new List(); + public void Execute() { if (startSequence == null)