Beispiel #1
0
		public void runStateMachine(StateMachineEnum statemachine)
		{
			if (m_StateMachineImpl == null)
				return;
		
			List<StateData> activeStateArray = new List<StateData>();
			if(m_StateMachineImpl.GetCurrentStates(activeStateArray) > 0)
				return;
			switch (statemachine) 
			{
				case StateMachineEnum.DriveDistance_ENUM_DRIVEDISTANCESM:
					{
						const int nArrayCount = 1;
						EntryEnum[] entryArray = new EntryEnum[] {EntryEnum.DriveDistance_ENUM_DRIVEDISTANCESM_INITIAL_10};
						runStateMachine(statemachine, null, null, entryArray, nArrayCount);	//submachineState is NULL if run standalone statemachine 
					}
					break;
			}
		}
Beispiel #2
0
		private void runStateMachine(StateMachineEnum statemachine, StateData submachineState, Signal signal, EntryEnum[] entryArray, int nEntryCount)
		{
			if (m_StateMachineImpl == null)
				return;
		
			if(submachineState == null)
			{
				StateInitialData initialData = new StateInitialData((int)StateEnum.DriveDistance_VIRTUAL_SUBMACHINESTATE, (int)StateEnum.NOSTATE, 1, false, "DriveDistance_VIRTUAL_SUBMACHINESTATE", ""); 
				submachineState = new StateData(m_StateMachineImpl, initialData);
				submachineState.IncrementActiveCount();
				m_StateMachineImpl.GetStateData().Add(submachineState);
			}
			switch (statemachine) 
			{
				case StateMachineEnum.DriveDistance_ENUM_DRIVEDISTANCESM:
					{
						const int nArrayCount = 2;
						StateInitialData[] initialDataArray = new StateInitialData[nArrayCount]
							{
								new StateInitialData((int)StateEnum.DriveDistance_ENUM_DRIVEDISTANCESM_FORWARDSTATE, (int)StateEnum.NOSTATE, 0, false, "DriveDistance_DriveDistanceSM_ForwardState", "{7C4E3CFB-F8EA-4d72-83D7-1257A76F1FFF}"),
								new StateInitialData((int)StateEnum.DriveDistance_ENUM_DRIVEDISTANCESM_STOPSTATE, (int)StateEnum.NOSTATE, 0, false, "DriveDistance_DriveDistanceSM_StopState", "{EB0BB228-E76D-4701-B2F9-04C5EC06EC50}")
							};
		
						m_StateMachineImpl.CreateStateObjects(initialDataArray, nArrayCount, submachineState);
					}
					for(int i = 0; i < nEntryCount; i++)
					{
						switch(entryArray[i])
						{
						case EntryEnum.DriveDistance_ENUM_DRIVEDISTANCESM_INITIAL_10:
							TransitionProc(TransitionEnum.DriveDistance_ENUM_INITIAL_10__TO__FORWARDSTATE_5, signal, submachineState);
							break;
						}
					}
					if(submachineState.IsActiveState())
						m_StateMachineImpl.deferInternalEvent(EventEnum.COMPLETION, null, submachineState);
					break;
			}
	
		}
Beispiel #3
0
		public bool StateProc(StateEnum state, StateData submachineState, StateBehaviorEnum behavior, Signal signal, EntryTypeEnum enumEntryType, EntryEnum[] entryArray, int nArrayCount)
		{
			switch (state) 
			{
				case StateEnum.DriveDistance_ENUM_DRIVEDISTANCESM_FORWARDSTATE:
					DriveDistanceSM_ForwardState(behavior, submachineState, signal, enumEntryType, entryArray, nArrayCount);
					break;

				case StateEnum.DriveDistance_ENUM_DRIVEDISTANCESM_STOPSTATE:
					DriveDistanceSM_StopState(behavior, submachineState, signal, enumEntryType, entryArray, nArrayCount);
					break;
			}
			return false;
		}
Beispiel #4
0
		public bool DriveDistanceSM_StopState(StateBehaviorEnum behavior, StateData submachineState, Signal signal, EntryTypeEnum enumEntryType, EntryEnum[] entryArray, int nArrayCount) 
		{
			if (m_StateMachineImpl == null)
				return false;
	
			StateData state = m_StateMachineImpl.GetStateObject(submachineState, (int)StateEnum.DriveDistance_ENUM_DRIVEDISTANCESM_STOPSTATE);
			switch (behavior) 
			{
				case StateBehaviorEnum.ENTRY:
					if(state.active_count > 0)
						return false;
					m_drivedistancesm = StateEnum.DriveDistance_ENUM_DRIVEDISTANCESM_STOPSTATE;
					state.IncrementActiveCount();
					DriveDistanceSM_StopState_behavior(StateBehaviorEnum.ENTRY);
			
					if(enumEntryType == EntryTypeEnum.HistoryEntry)
					{
						return true;
					}
			
					DriveDistanceSM_StopState_behavior(StateBehaviorEnum.DO);
					if((enumEntryType == EntryTypeEnum.EntryPointEntry || enumEntryType == EntryTypeEnum.DefaultEntry) && state.IsActiveState())
						m_StateMachineImpl.deferInternalEvent(EventEnum.COMPLETION, null, state);
					break;
				case StateBehaviorEnum.EXIT:
					if(state.active_count == 0)
						return false;
					m_drivedistancesm = StateEnum.NOSTATE;
					state.DecrementActiveCount();
					DriveDistanceSM_StopState_behavior(StateBehaviorEnum.EXIT);
					m_StateMachineImpl.removeInternalEvent(state);
					break;
			}
	
			return true;
		}
Beispiel #5
0
		public bool StateProc(int state, StateData submachineState, StateBehaviorEnum behavior, Signal signal, EntryTypeEnum enumEntryType, int[] entryArray, int nArrayCount)
		{
			EntryEnum[] entryEnumArray = new EntryEnum[nArrayCount];
			for (int i = 0; i < nArrayCount; i++)
			{
				if (entryArray != null && i < entryArray.Length)
					entryEnumArray[i] = (EntryEnum)entryArray[i];
			}      
			return StateProc((StateEnum)state, submachineState, behavior, signal, enumEntryType, entryEnumArray, nArrayCount);
		}