private void CheckPairAndTriggerListener(GameEvent gameEvent, EventListenerPair listenerPair) { if ((listenerPair.EventEnum == gameEvent.eventType || listenerPair.EventEnum == GameEvent.EventEnum.None) && (listenerPair.Id == gameEvent.id || string.IsNullOrWhiteSpace(listenerPair.Id))) { listenerPair.Listener?.Invoke(gameEvent); if (listenerPair.OneShot) { RemoveListener(listenerPair.Listener); } } }
public void RegisterListener(Action <GameEvent> listener, GameEvent gameEvent, bool persistant = false, bool oneShot = true) { EventListenerPair pair = new EventListenerPair { EventEnum = gameEvent.eventType, Id = gameEvent.id, Listener = listener, Persists = persistant, OneShot = !persistant && oneShot, }; eventListenerPairs.Add(pair); UpdateEventStorage(); foreach (GameEvent storedEvent in EventStorage.ToList()) { CheckPairAndTriggerListener(storedEvent, pair); } }