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);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |