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;
            }
        }
    }
Beispiel #2
0
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;
}