public void AddTrigger(T forState, float atTime, Action whatToDo) { TimedEventTrigger timedEventTrigger = new TimedEventTrigger { forState = forState, atTime = atTime }; timedEvents.Add(timedEventTrigger, whatToDo); }
public void AddStateTransition(T fromState, T toState, float atTime) { TimedEventTrigger stateTransitionTrigger = new TimedEventTrigger() { forState = fromState, atTime = atTime }; timedEvents.Add(stateTransitionTrigger, () => state = toState); }
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(); } }