public static void RemoveListener(OnEventHandlerDelegate listener)
        {
            if (!Listeners.ContainsKey(typeof(T)))
            {
                return;
            }

            Listeners[typeof(T)].Remove(listener);
        }
        public static void RegisterListener(OnEventHandlerDelegate listener)
        {
            if (!Listeners.ContainsKey(typeof(T)))
            {
                Listeners[typeof(T)] = new List <OnEventHandlerDelegate>();
            }

            Listeners[typeof(T)].Add(listener);
        }
        public static void DispatchEvent(T evt)
        {
            if (!Listeners.ContainsKey(typeof(T)))
            {
                return;
            }

            for (int i = 0; i < Listeners[typeof(T)].Count; i++)
            {
                OnEventHandlerDelegate listener = Listeners[typeof(T)][i];
                listener.Invoke(evt);
            }
        }