A game about forced loneliness, made by TACStudios
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}