void BootUp::update() { bool skipIntro = skipIntroOption.get(); // The first forms instance causes it to get loaded sp<GameState> loadedState; std::future<void> loadTask; bool loadGame = false; if (loadGameOption.get().empty()) { loadTask = fw().threadPoolEnqueue([]() { auto &ui_instance = ui(); std::ignore = ui_instance; }); } else { loadGame = true; auto path = loadGameOption.get(); loadedState = mksp<GameState>(); loadTask = fw().threadPoolEnqueue([loadedState, path]() { auto &ui_instance = ui(); std::ignore = ui_instance; LogWarning("Loading save \"%s\"", path); if (!loadedState->loadGame(path)) { LogError("Failed to load supplied game \"%s\"", path); } loadedState->initState(); }); } sp<Stage> nextScreen; if (loadGame == true) { nextScreen = mksp<LoadingScreen>(std::move(loadTask), [loadedState]() -> sp<Stage> { if (loadedState->current_battle) { return mksp<BattleView>(loadedState); } else { return mksp<CityView>(loadedState); } }); } else { nextScreen = mksp<LoadingScreen>(std::move(loadTask), []() -> sp<Stage> { return mksp<MainMenu>(); }); } fw().stageQueueCommand( {StageCmd::Command::REPLACE, mksp<VideoScreen>(skipIntro ? "" : "SMK:xcom3/smk/intro1.smk", nextScreen)}); }
static void initLogger() { outFile = NULL; // Handle Log calls befoore the settings are read, just output everything to stdout if (!ConfigFile::getInstance().loaded()) { stderrLogLevel = LogLevel::Debug; fileLogLevel = LogLevel::Nothing; backtraceLogLevel = LogLevel::Nothing; showDialogOnError = false; // Returning withoput setting loggerInited causes this to be called evey Log call until the // config is parsed return; } loggerInited = true; stderrLogLevel = (LogLevel)stderrLogLevelOption.get(); fileLogLevel = (LogLevel)fileLogLevelOption.get(); backtraceLogLevel = (LogLevel)backtraceLogLevelOption.get(); showDialogOnError = showDialogOnErrorOption.get(); auto logFilePath = logFileOption.get(); if (logFilePath.empty()) { // No log file set, disabling logging to file fileLogLevel = LogLevel::Nothing; return; } outFile = fopen(logFilePath.cStr(), "w"); if (!outFile) { // Failed to open log file, disabling logging to file fileLogLevel = LogLevel::Nothing; return; } }