示例#1
0
            /// <summary>
            ///     Creates the unified state machine
            /// </summary>
            /// <param name="obj"></param>
            /// <param name="visitSubNodes"></param>
            public override void visit(Generated.StateMachine obj, bool visitSubNodes)
            {
                StateMachine stateMachine = obj as StateMachine;

                if (stateMachine != null)
                {
                    stateMachine.ComputeUnifiedStateMachine();
                }

                base.visit(obj, visitSubNodes);
            }
示例#2
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;
            }
        }