예제 #1
0
 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);
         }
     }
 }
예제 #2
0
    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);
        }
    }