void GameStateManager::push(std::function<StateErasure(std::string)> stateMaker) { std::string suid = PrintStr("%$", next_uid()); stateModules.insert(make_pair(suid, std::vector<std::string>())); engine->ScriptEngine->BeginConfigGroup(suid.c_str()); states.emplace_back(stateMaker(suid)); engine->ScriptEngine->EndConfigGroup(); if (states.back().haltsUpdate()) { bool first = true; for (StateErasure& state : reverse(states)) { if (first) { first = false; continue; } state.onPause(); if (state.haltsUpdate()) break; } } }
User *find_byuid(const char *uid) { User *u, *next; if (!uid) { if (debug) alog("debug: find_byuid() called with NULL-value"); return NULL; } u = first_uid(); while (u) { next = next_uid(); if (u->uid) { if (!stricmp(uid, u->uid)) { return u; } } u = next; } return NULL; }