void AppStage_ComputeTrackerPoses::setState(eMenuState newState) { if (newState != m_menuState) { onExitState(m_menuState); onEnterState(newState); m_menuState = newState; } }
//-- private methods ----- void AppStage_GyroscopeCalibration::setState(eCalibrationMenuState newState) { if (newState != m_menuState) { onExitState(m_menuState); onEnterState(newState); m_menuState = newState; } }
void StateMachine::perform(int state, float time) { //debugLog("in perform"); stateExtraDT = 0; prevState = currentState; nextState = state; //debugLog("onExitState"); // do this to prevent scripts from repeating endlessly when running main loops enqueuedState = STATE_NONE; onExitState(currentState); stateCounter = 0; stateTime = time; currentState = state; nextState = STATE_NONE; //debugLog("onActionInit"); onEnterState(currentState); //debugLog("done"); }
void StateMachine::onUpdate (float dt) { if (currentState != STATE_NONE) { if (stateTime != -1) { stateCounter += dt; if (stateCounter >= stateTime) { stateExtraDT = stateCounter - stateTime; stateCounter = stateTime; onExitState (currentState); currentState = -1; stateExtraDT = 0; } } } if (enqueuedState != STATE_NONE) { perform(enqueuedState, enqueuedTime); enqueuedState = STATE_NONE; enqueuedTime = -1; } }
void StateMachine::stopState(int state) { onExitState(state); currentState = STATE_NONE; }