public Signal <TState, TTransition, TSignal> TransitionWhen <T>(
     Transition <TState, TTransition, TSignal> transition) where T : ISignalCondition, new()
 {
     this.Machine.CreateTransitionCondition(this, transition, new T());
     return(this);
 }
 public Signal <TState, TTransition, TSignal> TransitionWhen(
     Transition <TState, TTransition, TSignal> transition, ISignalCondition condition)
 {
     this.Machine.CreateTransitionCondition(this, transition, condition);
     return(this);
 }
 public Signal <TState, TTransition, TSignal> TransitionWhen(
     Transition <TState, TTransition, TSignal> transition, Predicate <ISignal> condition)
 {
     this.Machine.CreateTransitionCondition(this, transition, new ParamSignalCondition(condition));
     return(this);
 }
 public Signal <TState, TTransition, TSignal> TransitionWhen(
     Transition <TState, TTransition, TSignal> transition, params State <TState, TTransition, TSignal>[] conditionalStates)
 {
     this.Machine.CreateTransitionCondition(this, transition, conditionalStates);
     return(this);
 }
 public Signal <TState, TTransition, TSignal> TransitionWhen(
     Transition <TState, TTransition, TSignal> transition, Func <bool> condition)
 {
     this.Machine.CreateTransitionCondition(this, transition, new SignalCondition(condition));
     return(this);
 }