using System; using System.Collections.Generic; namespace DCFApixels.DebugXCore.Internal { internal interface IGizmoTypeCodeAddCallback { void OnAddGizmoTypeCode() where T : IGizmo; } internal static class GizmoTypeCode where T : IGizmo { public static readonly int ID = GizmoTypeCode.NewID(); } internal static class GizmoTypeCode { private static int _increment = 0; private static readonly object _lock = new object(); private static List _listeners = new List(); public static int TypesCount { get { return _increment; } } public static int NewID() { lock (_lock) { _increment++; OnAddNewID(_increment); return _increment - 1; } } public static event Action OnAddNewID = delegate { }; public static void AddListener(IGizmoTypeCodeAddCallback listener) { _listeners.Add(listener); } public static void RemoveListener(IGizmoTypeCodeAddCallback listener) { _listeners.Remove(listener); } } }