diff --git a/Runtime/ConsoleVariables/CVarManager.hpp b/Runtime/ConsoleVariables/CVarManager.hpp index e17645fed..de049d2aa 100644 --- a/Runtime/ConsoleVariables/CVarManager.hpp +++ b/Runtime/ConsoleVariables/CVarManager.hpp @@ -102,6 +102,8 @@ public: void parseCommandLine(const std::vector& args); + FileStoreManager& fileStoreManager() { return m_store; } + private: bool suppressDeveloper(); void restoreDeveloper(bool oldDeveloper); diff --git a/Runtime/ConsoleVariables/FileStoreManager.cpp b/Runtime/ConsoleVariables/FileStoreManager.cpp index 98dc08da2..0989e6d95 100644 --- a/Runtime/ConsoleVariables/FileStoreManager.cpp +++ b/Runtime/ConsoleVariables/FileStoreManager.cpp @@ -17,9 +17,17 @@ using namespace Windows::Storage; #endif namespace metaforce { +namespace { static logvisor::Module Log("FileStoreManager"); +FileStoreManager* g_instance = nullptr; +} FileStoreManager::FileStoreManager(std::string_view org, std::string_view domain) : m_org(org), m_domain(domain) { + if (g_instance == this) { + Log.report(logvisor::Fatal, FMT_STRING("Attempting to build another FileStoreManager!!")); + return; + } + auto prefPath = SDL_GetPrefPath(org.data(), domain.data()); if (prefPath == nullptr) { #if _WIN32 @@ -64,6 +72,14 @@ FileStoreManager::FileStoreManager(std::string_view org, std::string_view domain } else { m_storeRoot = std::string(prefPath); } + g_instance = this; } +FileStoreManager* FileStoreManager::instance() { + if (g_instance == nullptr) { + Log.report(logvisor::Fatal, FMT_STRING("Requested FileStoreManager instance before it's built!")); + return nullptr; + } + return g_instance; +} } // namespace hecl::Runtime diff --git a/Runtime/ConsoleVariables/FileStoreManager.hpp b/Runtime/ConsoleVariables/FileStoreManager.hpp index d0e710b21..143138cbf 100644 --- a/Runtime/ConsoleVariables/FileStoreManager.hpp +++ b/Runtime/ConsoleVariables/FileStoreManager.hpp @@ -12,6 +12,10 @@ class FileStoreManager { std::string m_storeRoot; public: + FileStoreManager(FileStoreManager&) = delete; + FileStoreManager(FileStoreManager&&) = delete; + void operator=(FileStoreManager&) = delete; + void operator=(FileStoreManager&&) = delete; FileStoreManager(std::string_view org, std::string_view domain); std::string_view getOrg() const { return m_org; } std::string_view getDomain() const { return m_domain; } @@ -20,5 +24,6 @@ public: * @return Full path to store e.g /home/foo/.hecl/bar */ std::string_view getStoreRoot() const { return m_storeRoot; } + static FileStoreManager* instance(); }; } \ No newline at end of file diff --git a/aurora/CMakeLists.txt b/aurora/CMakeLists.txt index c4243dcfc..35abd4bd3 100644 --- a/aurora/CMakeLists.txt +++ b/aurora/CMakeLists.txt @@ -29,7 +29,7 @@ add_library(aurora STATIC lib/gfx/colored_quad/shader.cpp ) target_compile_definitions(aurora PRIVATE IMGUI_USER_CONFIG="imconfig_user.h") # IMGUI_USE_WCHAR32 -target_include_directories(aurora PUBLIC include ../Runtime) +target_include_directories(aurora PUBLIC include ../ ) target_include_directories(aurora PRIVATE ../imgui ../extern/imgui) target_include_directories(aurora PRIVATE ../extern/dawn/src diff --git a/aurora/include/aurora/common.hpp b/aurora/include/aurora/common.hpp index cee65b348..b2b779a66 100644 --- a/aurora/include/aurora/common.hpp +++ b/aurora/include/aurora/common.hpp @@ -4,7 +4,7 @@ #include #include -#include "RetroTypes.hpp" +#include "Runtime/RetroTypes.hpp" namespace aurora { template diff --git a/aurora/lib/imgui.cpp b/aurora/lib/imgui.cpp index 3174992bb..c294fc980 100644 --- a/aurora/lib/imgui.cpp +++ b/aurora/lib/imgui.cpp @@ -16,11 +16,16 @@ using gpu::g_queue; static float g_scale; +static std::string g_imguiSettings{}; +static std::string g_imguiLog{}; void create_context() noexcept { IMGUI_CHECKVERSION(); ImGui::CreateContext(); ImGuiIO& io = ImGui::GetIO(); - io.IniFilename = nullptr; + g_imguiSettings = std::string(metaforce::FileStoreManager::instance()->getStoreRoot()) + "/imgui.ini"; + g_imguiLog = std::string(metaforce::FileStoreManager::instance()->getStoreRoot()) + "/imgui.log"; + io.IniFilename = g_imguiSettings.c_str(); + io.LogFilename = g_imguiLog.c_str(); } void initialize(SDL_Window* window) noexcept {