Example #1
0
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)});
}
Example #2
0
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;
	}
}