120 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using UnityEngine;
 | |
| using UnityEditor.IMGUI.Controls;
 | |
| using UnityEngine.Events;
 | |
| using UnityEngine.Timeline;
 | |
| 
 | |
| #if UNITY_6000_2_OR_NEWER
 | |
| using TreeViewState = UnityEditor.IMGUI.Controls.TreeViewState<int>;
 | |
| #endif
 | |
| 
 | |
| namespace UnityEditor.Timeline.Signals
 | |
| {
 | |
|     [CustomEditor(typeof(SignalReceiver))]
 | |
|     class SignalReceiverInspector : Editor
 | |
|     {
 | |
|         SignalReceiver m_Target;
 | |
| 
 | |
|         [SerializeField] TreeViewState m_TreeState;
 | |
|         [SerializeField] MultiColumnHeaderState m_MultiColumnHeaderState;
 | |
|         internal SignalReceiverTreeView m_TreeView;
 | |
| 
 | |
|         SignalEmitter signalEmitterContext
 | |
|         {
 | |
|             get { return m_Context as SignalEmitter; }
 | |
|         }
 | |
| 
 | |
|         void OnEnable()
 | |
|         {
 | |
|             m_Target = target as SignalReceiver;
 | |
|             InitTreeView(serializedObject);
 | |
| 
 | |
|             Undo.undoRedoPerformed += OnUndoRedo;
 | |
|         }
 | |
| 
 | |
|         void OnDisable()
 | |
|         {
 | |
|             Undo.undoRedoPerformed -= OnUndoRedo;
 | |
|         }
 | |
| 
 | |
|         void OnUndoRedo()
 | |
|         {
 | |
|             m_TreeView.dirty = true;
 | |
|         }
 | |
| 
 | |
|         public override void OnInspectorGUI()
 | |
|         {
 | |
|             serializedObject.Update();
 | |
| 
 | |
|             using (var changeCheck = new EditorGUI.ChangeCheckScope())
 | |
|             {
 | |
|                 m_TreeView.RefreshIfDirty();
 | |
|                 DrawEmitterControls(); // Draws buttons coming from the Context (SignalEmitter)
 | |
| 
 | |
|                 EditorGUILayout.Space();
 | |
|                 m_TreeView.Draw();
 | |
| 
 | |
|                 if (signalEmitterContext == null)
 | |
|                     DrawAddRemoveButtons();
 | |
| 
 | |
|                 if (changeCheck.changed)
 | |
|                 {
 | |
|                     serializedObject.ApplyModifiedProperties();
 | |
|                     m_TreeView.dirty = true;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         void DrawEmitterControls()
 | |
|         {
 | |
|             var context = signalEmitterContext;
 | |
|             if (context != null)
 | |
|             {
 | |
|                 var currentSignal = context.asset;
 | |
|                 if (currentSignal != null && !m_Target.IsSignalAssetHandled(currentSignal))
 | |
|                 {
 | |
|                     EditorGUILayout.Separator();
 | |
|                     var message = string.Format(Styles.NoReaction, currentSignal.name);
 | |
|                     SignalUtility.DrawCenteredMessage(message);
 | |
|                     if (SignalUtility.DrawCenteredButton(Styles.AddReactionButton))
 | |
|                         m_Target.AddNewReaction(currentSignal); // Add reaction on the first
 | |
|                     EditorGUILayout.Separator();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         internal void SetAssetContext(SignalAsset asset)
 | |
|         {
 | |
|             m_TreeView.SetSignalContext(asset);
 | |
|         }
 | |
| 
 | |
|         void DrawAddRemoveButtons()
 | |
|         {
 | |
|             using (new GUILayout.HorizontalScope())
 | |
|             {
 | |
|                 GUILayout.FlexibleSpace();
 | |
|                 if (GUILayout.Button(Styles.AddReactionButton))
 | |
|                 {
 | |
|                     Undo.RecordObject(m_Target, Styles.UndoAddReaction);
 | |
|                     m_Target.AddEmptyReaction(new UnityEvent());
 | |
|                     PrefabUtility.RecordPrefabInstancePropertyModifications(m_Target);
 | |
|                 }
 | |
|                 GUILayout.Space(18.0f);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         void InitTreeView(SerializedObject so)
 | |
|         {
 | |
|             m_TreeState = SignalListFactory.CreateViewState();
 | |
|             m_MultiColumnHeaderState = SignalListFactory.CreateHeaderState();
 | |
|             var header = SignalListFactory.CreateHeader(m_MultiColumnHeaderState, SignalReceiverUtility.headerHeight);
 | |
| 
 | |
|             var context = signalEmitterContext;
 | |
|             m_TreeView = SignalListFactory.CreateSignalInspectorList(m_TreeState, header, m_Target, so);
 | |
|             m_TreeView.readonlySignals = context != null;
 | |
| 
 | |
|             if (context != null)
 | |
|                 m_TreeView.SetSignalContext(context.asset);
 | |
|         }
 | |
|     }
 | |
| }
 |