From 93cd5bc5207cf6c22f455bb0a79221430daf9cef Mon Sep 17 00:00:00 2001 From: chrisgregan Date: Mon, 28 Jul 2014 12:44:35 +0100 Subject: [PATCH] Custom SequenceField property drop down menu --- .../Fungus/Editor/SequenceControllerEditor.cs | 14 ++++++- Assets/Fungus/Editor/SequenceEditor.cs | 38 +++++++++++++++++++ Assets/Fungus/VisualScripting/Sequence.cs | 12 ++++-- 3 files changed, 60 insertions(+), 4 deletions(-) diff --git a/Assets/Fungus/Editor/SequenceControllerEditor.cs b/Assets/Fungus/Editor/SequenceControllerEditor.cs index a14f9efe..0cd412dc 100644 --- a/Assets/Fungus/Editor/SequenceControllerEditor.cs +++ b/Assets/Fungus/Editor/SequenceControllerEditor.cs @@ -9,7 +9,19 @@ public class SequenceControllerEditor : Editor { public override void OnInspectorGUI() { - DrawDefaultInspector(); + SequenceController t = target as SequenceController; + + t.stepTime = EditorGUILayout.FloatField("Step Time", t.stepTime); + + t.startSequence = SequenceEditor.SequenceField("Start Sequence", 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")) diff --git a/Assets/Fungus/Editor/SequenceEditor.cs b/Assets/Fungus/Editor/SequenceEditor.cs index 5803a38d..48d589c2 100644 --- a/Assets/Fungus/Editor/SequenceEditor.cs +++ b/Assets/Fungus/Editor/SequenceEditor.cs @@ -7,4 +7,42 @@ using Fungus; [CustomEditor (typeof(Sequence))] public class SequenceEditor : Editor { + + static public Sequence SequenceField(string label, SequenceController sequenceController, Sequence sequence) + { + if (sequenceController == null) + { + return null; + } + + Sequence result = sequence; + + // Build dictionary of child sequences + List sequenceNames = new List(); + + int selectedIndex = 0; + sequenceNames.Add("None"); + Sequence[] sequences = sequenceController.GetComponentsInChildren(); + for (int i = 0; i < sequences.Length; ++i) + { + sequenceNames.Add(sequences[i].name); + + if (sequence == sequences[i]) + { + selectedIndex = i + 1; + } + } + + selectedIndex = EditorGUILayout.Popup("Start Sequence", selectedIndex, sequenceNames.ToArray()); + if (selectedIndex == 0) + { + result = null; // Option 'None' + } + else + { + result = sequences[selectedIndex - 1]; + } + + return result; + } } \ No newline at end of file diff --git a/Assets/Fungus/VisualScripting/Sequence.cs b/Assets/Fungus/VisualScripting/Sequence.cs index 8e9e7660..b52f8cc0 100644 --- a/Assets/Fungus/VisualScripting/Sequence.cs +++ b/Assets/Fungus/VisualScripting/Sequence.cs @@ -24,16 +24,22 @@ namespace Fungus public virtual void Start() { - // Populate sequenceController reference + sequenceController = GetSequenceController(); + } + + public SequenceController GetSequenceController() + { + SequenceController sc = null; Transform parent = transform.parent; while (parent != null) { - sequenceController = parent.gameObject.GetComponent(); - if (sequenceController != null) + sc = parent.gameObject.GetComponent(); + if (sc != null) { break; } } + return sc; } public bool HasError()