/// <summary>
        /// Generates a transition with an extra check-delegate!
        /// </summary>
        /// <param name="states"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <param name="inverted"></param>
        /// <param name="eventType"></param>
        /// <param name="checkDelegate"></param>
        /// <param name="finishedDelegate"></param>
        /// <returns></returns>
        public static FiniteStateMachineTransition <EventType> Generate(
            List <FiniteStateMachineState <EventType> > states, int start, int end, bool inverted, Type eventType,
            OsmSharp.Math.StateMachines.FiniteStateMachineTransitionCondition <EventType> .FiniteStateMachineTransitionConditionDelegate checkDelegate,
            TransitionFinishedDelegate finishedDelegate)
        {
            var conditions = new List <FiniteStateMachineTransitionCondition <EventType> >();

            conditions.Add(new FiniteStateMachineTransitionCondition <EventType>()
            {
                EventTypeObject = eventType,
                CheckDelegate   = checkDelegate
            });

            var trans = new FiniteStateMachineTransition <EventType>()
            {
                SourceState          = states[start],
                TargetState          = states[end],
                TransitionConditions = conditions,
                Finished             = finishedDelegate,
                Inverted             = inverted
            };

            states[start].Outgoing.Add(trans);
            return(trans);
        }
 /// <summary>
 /// Generates a non-inverted transition with an extra check-delegate!
 /// </summary>
 /// <param name="states"></param>
 /// <param name="start"></param>
 /// <param name="end"></param>
 /// <param name="eventType"></param>
 /// <param name="checkDelegate"></param>
 /// <param name="finishedDelegate"></param>
 /// <returns></returns>
 public static FiniteStateMachineTransition <EventType> Generate(
     List <FiniteStateMachineState <EventType> > states, int start, int end, Type eventType,
     OsmSharp.Math.StateMachines.FiniteStateMachineTransitionCondition <EventType> .FiniteStateMachineTransitionConditionDelegate checkDelegate,
     TransitionFinishedDelegate finishedDelegate)
 {
     return(FiniteStateMachineTransition <EventType> .Generate(states, start, end, false, eventType, checkDelegate, finishedDelegate));
 }