88 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			88 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System; | ||
|  | using System.Collections.Generic; | ||
|  | using System.IO; | ||
|  | using UnityEngine; | ||
|  | using UnityEngine.Timeline; | ||
|  | using Object = UnityEngine.Object; | ||
|  | 
 | ||
|  | namespace UnityEditor.Timeline.Signals | ||
|  | { | ||
|  |     class SignalManager : IDisposable | ||
|  |     { | ||
|  |         static SignalManager m_Instance; | ||
|  |         readonly List<SignalAsset> m_assets = new List<SignalAsset>(); | ||
|  | 
 | ||
|  |         internal static SignalManager instance | ||
|  |         { | ||
|  |             get | ||
|  |             { | ||
|  |                 if (m_Instance == null) | ||
|  |                 { | ||
|  |                     m_Instance = new SignalManager(); | ||
|  |                     m_Instance.Refresh(); | ||
|  |                 } | ||
|  | 
 | ||
|  |                 return m_Instance; | ||
|  |             } | ||
|  | 
 | ||
|  |             set { m_Instance = value; } | ||
|  |         } | ||
|  | 
 | ||
|  |         internal SignalManager() | ||
|  |         { | ||
|  |             SignalAsset.OnEnableCallback += Register; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static IEnumerable<SignalAsset> assets | ||
|  |         { | ||
|  |             get | ||
|  |             { | ||
|  |                 foreach (var asset in instance.m_assets) | ||
|  |                 { | ||
|  |                     if (asset != null) | ||
|  |                         yield return asset; | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         public static SignalAsset CreateSignalAssetInstance(string path) | ||
|  |         { | ||
|  |             var newSignal = ScriptableObject.CreateInstance<SignalAsset>(); | ||
|  |             newSignal.name = Path.GetFileNameWithoutExtension(path); | ||
|  | 
 | ||
|  |             var asset = AssetDatabase.LoadMainAssetAtPath(path) as SignalAsset; | ||
|  |             if (asset != null) | ||
|  |             { | ||
|  |                 TimelineUndo.PushUndo(asset, Styles.UndoCreateSignalAsset); | ||
|  |                 EditorUtility.CopySerialized(newSignal, asset); | ||
|  |                 Object.DestroyImmediate(newSignal); | ||
|  |                 return asset; | ||
|  |             } | ||
|  | 
 | ||
|  |             AssetDatabase.CreateAsset(newSignal, path); | ||
|  |             return newSignal; | ||
|  |         } | ||
|  | 
 | ||
|  |         public void Dispose() | ||
|  |         { | ||
|  |             SignalAsset.OnEnableCallback -= Register; | ||
|  |         } | ||
|  | 
 | ||
|  |         void Register(SignalAsset a) | ||
|  |         { | ||
|  |             m_assets.Add(a); | ||
|  |         } | ||
|  | 
 | ||
|  |         void Refresh() | ||
|  |         { | ||
|  |             var guids = AssetDatabase.FindAssets("t:SignalAsset"); | ||
|  |             foreach (var g in guids) | ||
|  |             { | ||
|  |                 var path = AssetDatabase.GUIDToAssetPath(g); | ||
|  |                 var asset = AssetDatabase.LoadAssetAtPath<SignalAsset>(path); | ||
|  |                 m_assets.Add(asset); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } |