diff options
| author | Andrew Lee <alee14498@protonmail.com> | 2020-04-19 17:19:32 -0400 |
|---|---|---|
| committer | Andrew Lee <alee14498@protonmail.com> | 2020-04-19 17:19:32 -0400 |
| commit | c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 (patch) | |
| tree | ee4d51c7c1d633e11f46453ef1edd3c77c4ef9f7 /Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalUtility.cs | |
| download | Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.gz Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.bz2 Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.zip | |
Inital commit
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalUtility.cs')
| -rw-r--r-- | Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalUtility.cs | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalUtility.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalUtility.cs new file mode 100644 index 0000000..663e341 --- /dev/null +++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalUtility.cs @@ -0,0 +1,125 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.Timeline; + +namespace UnityEditor.Timeline.Signals +{ + interface ISignalAssetProvider + { + SignalAsset signalAsset { get; set; } + IEnumerable<SignalAsset> AvailableSignalAssets(); + void CreateNewSignalAsset(string path); + } + + static class SignalUtility + { + const string k_SignalExtension = "signal"; + + public static void DrawSignalNames(ISignalAssetProvider assetProvider, Rect position, GUIContent label, bool multipleValues) + { + var assets = assetProvider.AvailableSignalAssets().ToList(); + var index = assets.IndexOf(assetProvider.signalAsset); + + var availableNames = new List<string>(); + using (new GUIMixedValueScope(multipleValues)) + { + availableNames.Add(Styles.EmptySignalList.text); + + availableNames.AddRange(assets.Select(x => x.name)); + availableNames.Add(Styles.CreateNewSignal.text); + + var curValue = index + 1; + var selected = EditorGUI.Popup(position, label, curValue, availableNames.ToArray()); + + if (selected != curValue) + { + var noneEntryIdx = 0; + if (selected == noneEntryIdx) // None + assetProvider.signalAsset = null; + else if (selected == availableNames.Count - 1) // "Create New Asset" + { + var path = GetNewSignalPath(); + if (!string.IsNullOrEmpty(path)) + assetProvider.CreateNewSignalAsset(path); + GUIUtility.ExitGUI(); + } + else + assetProvider.signalAsset = assets[selected - 1]; + } + } + } + + public static string GetNewSignalPath() + { + return EditorUtility.SaveFilePanelInProject( + Styles.NewSignalWindowTitle.text, + Styles.NewSignalDefaultName.text, + k_SignalExtension, + Styles.NewSignalWindowMessage.text); + } + + public static bool IsSignalAssetHandled(this SignalReceiver receiver, SignalAsset asset) + { + return receiver != null && asset != null && receiver.GetRegisteredSignals().Contains(asset); + } + + public static void AddNewReaction(this SignalReceiver receiver, SignalAsset signalAsset) + { + if (signalAsset != null && receiver != null) + { + Undo.RecordObject(receiver, Styles.UndoAddReaction); + var newEvent = new UnityEvent(); + newEvent.AddPersistentListener(); + var evtIndex = newEvent.GetPersistentEventCount() - 1; + newEvent.RegisterVoidPersistentListenerWithoutValidation(evtIndex, receiver.gameObject, string.Empty); + receiver.AddReaction(signalAsset, newEvent); + PrefabUtility.RecordPrefabInstancePropertyModifications(receiver); + } + } + + public static void DrawCenteredMessage(string message) + { + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + GUILayout.Label(message); + GUILayout.FlexibleSpace(); + } + } + + public static bool DrawCenteredButton(GUIContent buttonLabel) + { + bool buttonClicked; + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + buttonClicked = GUILayout.Button(buttonLabel); + GUILayout.FlexibleSpace(); + } + return buttonClicked; + } + } + + static class SignalReceiverUtility + { + const int k_DefaultTreeviewHeaderHeight = 20; + + public static int headerHeight + { + get { return k_DefaultTreeviewHeaderHeight; } + } + + public static SerializedProperty FindSignalsProperty(SerializedObject obj) + { + return obj.FindProperty("m_Events.m_Signals"); + } + + public static SerializedProperty FindEventsProperty(SerializedObject obj) + { + return obj.FindProperty("m_Events.m_Events"); + } + } +} |
