示例#1
0
 /// <summary>
 ///     If the proposed value contains this in its MergedStateMachines, it is accepted as the new UnifiedStateMachine
 /// </summary>
 /// <param name="newValue"></param>
 public void ResetUnifiedStateMachine(UnifiedStateMachine newValue)
 {
     if (newValue.MergedStateMachines.Contains(this))
     {
         UnifiedStateMachine = newValue;
     }
 }
示例#2
0
        /// <summary>
        ///     Checks that the unified state machine includes the state machine and, in that case,
        ///     indicates that the types match
        /// </summary>
        /// <param name="stateMachineType"></param>
        /// <param name="unifiedstateMachineType"></param>
        /// <returns></returns>
        private bool MatchStateMachines(StateMachine stateMachineType, UnifiedStateMachine unifiedstateMachineType)
        {
            bool retVal = false;

            if (stateMachineType != null && unifiedstateMachineType != null)
            {
                retVal = unifiedstateMachineType.MergedStateMachines.Contains(stateMachineType);
            }
            return(retVal);
        }
示例#3
0
        /// <summary>
        /// Computes the unified state machine according to the update information
        /// </summary>
        public void ComputeUnifiedStateMachine()
        {
            if (Updates != null || UpdatedBy.Count > 0)
            {
                State        state = null;
                StateMachine source;
                if (EnclosingStateMachine == null)
                {
                    source = (StateMachine)SourceOfUpdateChain;
                }
                else
                {
                    EnclosingStateMachine.ComputeUnifiedStateMachine();
                    StateMachine enclosingUnifiedStateMachine = EnclosingStateMachine.UnifiedStateMachine;
                    state  = enclosingUnifiedStateMachine.FindState(EnclosingState.Name);
                    source = state.StateMachine;
                }

                UnifiedStateMachine stateMachine = source.UnifiedStateMachine as UnifiedStateMachine;
                if (stateMachine == null)
                {
                    // First time the state machine is unified, create the unified state machine
                    source.UnifiedStateMachine = new UnifiedStateMachine(this);
                    if (state != null)
                    {
                        source.UnifiedStateMachine.setFather(state);
                    }
                }
                else
                {
                    if (this == SourceOfUpdateChain)
                    {
                        stateMachine.Rebuild(source);
                    }
                }

                UnifiedStateMachine = source.UnifiedStateMachine;
            }
            else
            {
                UnifiedStateMachine = this;
            }
        }