public virtual void SetSubState(
OperationContext context,
QualifiedName stateName,
QualifiedName substateMachine,
QualifiedName substateName)
{
lock (DataLock)
{
Transition transition = BeginTransitionToState(context, stateName);
OnBeforeTransition(context, transition, null);
UpdateState(transition.ToState, transition);
// update submachine before reporting effect.
foreach (StateMachine submachine in m_substateMachines)
{
// check for match.
if (substateMachine != submachine.BrowseName)
{
continue;
}
// update state.
State substate = null;
if (submachine.m_states.TryGetValue(substateName, out substate))
{
submachine.UpdateState(substate, transition);
}
}
EndTransition(context, transition, null);
OnAfterTransition(context, transition, null);
}
}