diff --git a/rwengine/src/engine/GameData.cpp b/rwengine/src/engine/GameData.cpp index dd6083e8..07d16910 100644 --- a/rwengine/src/engine/GameData.cpp +++ b/rwengine/src/engine/GameData.cpp @@ -41,7 +41,11 @@ GameData::GameData(Logger* log, const rwfs::path& path) }); } -void GameData::load() { +bool GameData::load() { + if (!isValidGameDirectory()) { + return false; + } + index.indexTree(datpath); loadIMG("models/gta3.img"); @@ -78,6 +82,8 @@ void GameData::load() { // Load ped groups after IDEs so they can resolve loadPedGroups("data/pedgrp.dat"); + + return true; } void GameData::loadLevelFile(const std::string& path) { @@ -759,13 +765,11 @@ float GameData::getWaveHeightAt(const glm::vec3& ws) const { WATER_HEIGHT; } -bool GameData::isValidGameDirectory(const rwfs::path& path) { +bool GameData::isValidGameDirectory() const { rwfs::error_code ec; - if (!rwfs::is_directory(path, ec)) { - std::cerr << "first test failed\n"; + if (!rwfs::is_directory(datpath, ec)) { return false; } - LoaderIMG i; - return i.load(path / "models/gta3.img"); + return !ec; } diff --git a/rwengine/src/engine/GameData.hpp b/rwengine/src/engine/GameData.hpp index aa819f85..e6148e8f 100644 --- a/rwengine/src/engine/GameData.hpp +++ b/rwengine/src/engine/GameData.hpp @@ -112,7 +112,7 @@ public: void loadWaterpro(const std::string& path); void loadWater(const std::string& path); - void load(); + bool load(); /** * Loads model, placement, models and textures from a level file @@ -359,10 +359,11 @@ public: GameTexts texts; +private: /** * Determines whether the given path is a valid game directory. */ - static bool isValidGameDirectory(const rwfs::path& path); + bool isValidGameDirectory() const; }; #endif diff --git a/rwgame/RWGame.cpp b/rwgame/RWGame.cpp index 4d8a1947..36250c1d 100644 --- a/rwgame/RWGame.cpp +++ b/rwgame/RWGame.cpp @@ -72,17 +72,14 @@ RWGame::RWGame(Logger& log, const std::optional &args) benchFile = args->benchmarkPath; } - log.info("Game", "Game directory: " + config.gamedataPath()); + imgui.init(); - if (!GameData::isValidGameDirectory(config.gamedataPath())) { + log.info("Game", "Game directory: " + config.gamedataPath()); + if (!data.load()) { throw std::runtime_error("Invalid game directory path: " + config.gamedataPath()); } - imgui.init(); - - data.load(); - for (const auto& [specialModel, fileName, name] : kSpecialModels) { auto model = data.loadClump(fileName, name); renderer.setSpecialModel(specialModel, model);