using System; using System.Collections.Generic; using System.Linq; using UnityEngine.UIElements; namespace StansAssets.SceneManagement.StackVisualizer { public static class StackVisualizer { static readonly Dictionary s_VisualizersMap = new Dictionary(); internal static event Action OnVisualizersCollectionUpdated = delegate { }; internal static IReadOnlyDictionary Visualizers => s_VisualizersMap; internal static List VisualizersRoots => s_VisualizersMap.Values.Select(e => e.ViewRoot).ToList(); public static void Register(ApplicationStateStack stack, string stackName) where T: Enum { int stackId = GetUniqueIdForStack(stack); if (s_VisualizersMap.ContainsKey(stackId)) { throw new ArgumentException($"An attempt to register an already registered stack: {stackName}"); } var view = new StackVisualizerView(); s_VisualizersMap.Add(stackId, new StackVisualizerController(stack, stackName, view)); OnVisualizersCollectionUpdated.Invoke(); } static int GetUniqueIdForStack(ApplicationStateStack stack) where T : Enum { return stack.GetHashCode(); } } }