示例#1
0
        public void AddTrigger(T forState, float atTime, Action whatToDo)
        {
            TimedEventTrigger timedEventTrigger = new TimedEventTrigger {
                forState = forState, atTime = atTime
            };

            timedEvents.Add(timedEventTrigger, whatToDo);
        }
示例#2
0
        public void AddStateTransition(T fromState, T toState, float atTime)
        {
            TimedEventTrigger stateTransitionTrigger = new TimedEventTrigger()
            {
                forState = fromState,
                atTime   = atTime
            };

            timedEvents.Add(stateTransitionTrigger, () => state = toState);
        }
示例#3
0
        private void TriggerEvents(float prevTime)
        {
            // Don't trigger events while Time.deltaTime is 0
            if (Math.Abs(prevTime - _timeSinceStateChanged) < float.Epsilon)
            {
                return;
            }

            var eventsToTrigger = timedEvents.Where(triggerAndAction => {
                TimedEventTrigger trigger = triggerAndAction.Key;
                return(trigger.forState.Equals(_state) &&
                       trigger.atTime >= prevTime &&
                       trigger.atTime < _timeSinceStateChanged);
            }).Select(triggerAndAction => triggerAndAction.Value);

            foreach (Action action in eventsToTrigger)
            {
                action.Invoke();
            }
        }