public bool TryFindHandler(TTrigger trigger, out ATriggerBehaviour handler)
 {
     return(
         TryFindLocalHandler(trigger, out handler) ||
         (Superstate != null && Superstate.TryFindHandler(trigger, out handler))
         );
 }
            public void AddTriggerBehaviour(ATriggerBehaviour aTriggerBehaviour)
            {
                ICollection <ATriggerBehaviour> allowed;

                if (_triggerBehaviours.TryGetValue(aTriggerBehaviour.Trigger, out allowed))
                {
                    allowed = new List <ATriggerBehaviour>();
                    _triggerBehaviours.Add(aTriggerBehaviour.Trigger, allowed);
                }
                allowed.Add(aTriggerBehaviour);
            }
            bool TryFindLocalHandler(TTrigger trigger, out ATriggerBehaviour handler)
            {
                ICollection <ATriggerBehaviour> possible;

                if (!_triggerBehaviours.TryGetValue(trigger, out possible))
                {
                    handler = null;
                    return(false);
                }

                var actual = possible.Where(at => at.IsGuardConditionMet).ToArray();

                if (actual.Count() > 1)
                {
                    throw new InvalidOperationException(
                              string.Format(RStateRepresentationResources.MultipleTransitionsPermitted, trigger, _state));
                }

                handler = actual.FirstOrDefault();
                return(handler != null);
            }