void StateManager::onUpdate(float dt) { std::stack<StateData*>copy; copy = states; while (!copy.empty()) { if (stateObjects[copy.top()->name]) stateObjects[copy.top()->name]->update(dt); copy.pop(); } if (canChangeState() && !enqueuedJumpState.empty()) { if (enqueuedStateStage == 0) { enqueuedStateStage = -1; popAllStates(); } else if (enqueuedStateStage == -1) { std::string copy = enqueuedJumpState; enqueuedJumpState = ""; jumpState(copy); } } }
void StateManager::popAllStates() { if (!states.empty()) { popState(); popAllStates(); } }
void StateManager::jumpState (const std::string &state) { if (canChangeState()) { popAllStates(); pushState(state); } }
void StateManager::onUpdate(float dt) { for (int i = 0; i <= statesTopIndex; i++) { StateObject *obj = stateObjects[states[i]->name]; if (obj) obj->update(dt); } if (canChangeState() && !enqueuedJumpState.empty()) { if (enqueuedStateStage == 0) { enqueuedStateStage = -1; popAllStates(); } else if (enqueuedStateStage == -1) { std::string copy = enqueuedJumpState; enqueuedJumpState = ""; jumpState(copy); } } }