bool CStateManager::beginState(const NLMISC::CSString& stateName) { // make sure the state is valid if (_ValidStates.find(stateName.strip())==_ValidStates.end()) { nlwarning("Cannot start state as it is not in valid state list: %s",stateName.c_str()); return false; } // make sure the state isn't already active for (uint32 i=0;i<_States.size();++i) { if (_States[i]==stateName) { nlwarning("Cannot start state as it is already active: %s",stateName.c_str()); return false; } } // set the state as active _States.push_back(stateName); // write the states to a file NLMISC::CSString stateTxt; stateTxt.join(_States,"\n"); stateTxt.writeToFile(StateFileName); // execute the begin_state script CScriptManager::getInstance()->runScript("begin_"+stateName); return true; }
bool CStateManager::endState(const NLMISC::CSString& stateName) { uint32 i; // make sure the state is already active for (i=0;i<_States.size();++i) { if (_States[i]==stateName) { break; } } if (i==_States.size()) { nlwarning("Cannot end state as it is not already active: %s",stateName.c_str()); return false; } // set the state as inactive _States.erase(_States.begin()+i); // write the states to a file NLMISC::CSString stateTxt; stateTxt.join(_States,"\n"); stateTxt.writeToFile(StateFileName); // execute the end_state script CScriptManager::getInstance()->runScript("end_"+stateName); return true; }