using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; using static KCM.StateManagement.Observers.Observer; namespace KCM.StateManagement.Observers { public class StateObserver { public static Dictionary observers = new Dictionary(); public static void ClearAll() { foreach (var observer in observers.Values) { try { var component = observer as Component; if (component != null) UnityEngine.Object.Destroy(component.gameObject); } catch { } } observers.Clear(); } public static void RegisterObserver(T instance, string[] monitoredFields, EventHandler eventHandler = null, EventHandler sendUpdateHandler = null) { if (observers.ContainsKey(instance.GetHashCode())) return; var observerObject = new GameObject($"{instance.GetHashCode()} {instance.GetType().Name} State Observer"); var observer = observerObject.AddComponent(); observer.Initialise(instance, monitoredFields, observerObject); if (eventHandler != null) observer.StateUpdated += eventHandler; if (sendUpdateHandler != null) observer.SendUpdate += sendUpdateHandler; observers.Add(instance.GetHashCode(), observer); } } }