diff options
| author | Emil A. Overbeck <emil.a.overbeck@gmail.com> | 2026-07-17 23:48:17 +0200 |
|---|---|---|
| committer | Emil A. Overbeck <emil.a.overbeck@gmail.com> | 2026-07-17 23:48:17 +0200 |
| commit | 655ec946e63fcf2234f67a837cc7602099b6c301 (patch) | |
| tree | fe017792cb6053b54dad13ea776cc61b193e2bfe /src/engine/renderer.cpp | |
| parent | 716cd9cf495835dc3a1bb0045e64f3f954cf3a62 (diff) | |
| download | forts_clone-655ec946e63fcf2234f67a837cc7602099b6c301.tar.gz forts_clone-655ec946e63fcf2234f67a837cc7602099b6c301.zip | |
Better Steam path detection and build guide
Diffstat (limited to 'src/engine/renderer.cpp')
| -rw-r--r-- | src/engine/renderer.cpp | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/src/engine/renderer.cpp b/src/engine/renderer.cpp index 0be0e53..0ec6371 100644 --- a/src/engine/renderer.cpp +++ b/src/engine/renderer.cpp @@ -10,6 +10,35 @@ #include <cmath> #include <vector> #include <algorithm> +#include <string> +#include <filesystem> + +namespace { + +// Root of a bring-your-own Forts install, used to resolve "forts:REL" texture +// paths. Tries known developer install locations first, then the FORTS_DATA +// override, and returns the first that exists on disk. Resolved once, cached. +const std::string& forts_data_root() { + static const std::string root = [] { + std::vector<std::string> candidates = { + "/opt/steam/steamapps/common/Forts/data", // Emil + "/mnt/games/SteamLibrary/steamapps/common/Forts/data", // Vaino + }; + if (const char* env = std::getenv("FORTS_DATA")) { + candidates.emplace_back(env); + } + for (const auto& c : candidates) { + std::error_code ec; + if (std::filesystem::is_directory(c, ec)) return c; + } + // None present; return the override if set, else the first guess, so the + // failed-load message at least points somewhere meaningful. + return candidates.back(); + }(); + return root; +} + +} // namespace bool Renderer::init(SDL_Window* window, int width, int height) { width_ = width; @@ -140,10 +169,7 @@ SDL_Texture* Renderer::load_texture(const std::string& path) { // files, like a Doom source port + WAD). Nothing is copied into the repo. std::string file = path; if (path.rfind("forts:", 0) == 0) { - const char* env = std::getenv("FORTS_DATA"); - std::string root = env ? env - : "/mnt/games/SteamLibrary/steamapps/common/Forts/data"; - file = root + "/" + path.substr(6); + file = forts_data_root() + "/" + path.substr(6); } int w = 0, h = 0, n = 0; |
