A game about forced loneliness, made by TACStudios
at master 87 lines 2.3 kB view raw
1using System; 2using System.Collections.Generic; 3using System.IO; 4using UnityEngine; 5using UnityEngine.Timeline; 6using Object = UnityEngine.Object; 7 8namespace UnityEditor.Timeline.Signals 9{ 10 class SignalManager : IDisposable 11 { 12 static SignalManager m_Instance; 13 readonly List<SignalAsset> m_assets = new List<SignalAsset>(); 14 15 internal static SignalManager instance 16 { 17 get 18 { 19 if (m_Instance == null) 20 { 21 m_Instance = new SignalManager(); 22 m_Instance.Refresh(); 23 } 24 25 return m_Instance; 26 } 27 28 set { m_Instance = value; } 29 } 30 31 internal SignalManager() 32 { 33 SignalAsset.OnEnableCallback += Register; 34 } 35 36 public static IEnumerable<SignalAsset> assets 37 { 38 get 39 { 40 foreach (var asset in instance.m_assets) 41 { 42 if (asset != null) 43 yield return asset; 44 } 45 } 46 } 47 48 public static SignalAsset CreateSignalAssetInstance(string path) 49 { 50 var newSignal = ScriptableObject.CreateInstance<SignalAsset>(); 51 newSignal.name = Path.GetFileNameWithoutExtension(path); 52 53 var asset = AssetDatabase.LoadMainAssetAtPath(path) as SignalAsset; 54 if (asset != null) 55 { 56 TimelineUndo.PushUndo(asset, Styles.UndoCreateSignalAsset); 57 EditorUtility.CopySerialized(newSignal, asset); 58 Object.DestroyImmediate(newSignal); 59 return asset; 60 } 61 62 AssetDatabase.CreateAsset(newSignal, path); 63 return newSignal; 64 } 65 66 public void Dispose() 67 { 68 SignalAsset.OnEnableCallback -= Register; 69 } 70 71 void Register(SignalAsset a) 72 { 73 m_assets.Add(a); 74 } 75 76 void Refresh() 77 { 78 var guids = AssetDatabase.FindAssets("t:SignalAsset"); 79 foreach (var g in guids) 80 { 81 var path = AssetDatabase.GUIDToAssetPath(g); 82 var asset = AssetDatabase.LoadAssetAtPath<SignalAsset>(path); 83 m_assets.Add(asset); 84 } 85 } 86 } 87}