diff --git a/extern/aurora b/extern/aurora index cb2c340d6c..7dd107e1a4 160000 --- a/extern/aurora +++ b/extern/aurora @@ -1 +1 @@ -Subproject commit cb2c340d6cde6827387f14c31ce19e5f28a40e09 +Subproject commit 7dd107e1a4b7ce07abbe11568f9f8c3031b4df0a diff --git a/files.cmake b/files.cmake index ebfa843b24..fe558ba41f 100644 --- a/files.cmake +++ b/files.cmake @@ -1442,6 +1442,8 @@ set(DUSK_FILES src/dusk/speedrun.cpp src/dusk/string.cpp src/dusk/stubs.cpp + include/dusk/texture_replacements.hpp + src/dusk/texture_replacements.cpp src/dusk/update_check.cpp src/dusk/update_check.hpp #src/dusk/m_Do_ext_dusk.cpp diff --git a/include/dusk/texture_replacements.hpp b/include/dusk/texture_replacements.hpp new file mode 100644 index 0000000000..ffb3fe8d62 --- /dev/null +++ b/include/dusk/texture_replacements.hpp @@ -0,0 +1,12 @@ +#ifndef DUSK_TEXTURE_REPLACEMENTS_HPP +#define DUSK_TEXTURE_REPLACEMENTS_HPP + +namespace dusk::texture_replacements { + +void reload(); +void set_enabled(bool enabled); +void shutdown(); + +} + +#endif diff --git a/src/dusk/texture_replacements.cpp b/src/dusk/texture_replacements.cpp new file mode 100644 index 0000000000..5477a38dd9 --- /dev/null +++ b/src/dusk/texture_replacements.cpp @@ -0,0 +1,38 @@ +#include "dusk/texture_replacements.hpp" + +#include + +#include "dusk/logging.h" +#include "dusk/main.h" +#include "dusk/settings.h" + +namespace dusk::texture_replacements { +namespace { +aurora::texture::ReplacementGroup s_directoryGroup; +} + +void reload() { + aurora::texture::unregister_replacements(s_directoryGroup); + s_directoryGroup.registrations.clear(); + + if (!getSettings().game.enableTextureReplacements) { + return; + } + + const auto root = ConfigPath / "texture_replacements"; + s_directoryGroup = aurora::texture::load_replacement_directory(root); + DuskLog.info("Texture replacement directory loaded: {} registration(s)", + s_directoryGroup.registrations.size()); +} + +void set_enabled(bool enabled) { + getSettings().game.enableTextureReplacements.setValue(enabled); + reload(); +} + +void shutdown() { + aurora::texture::unregister_replacements(s_directoryGroup); + s_directoryGroup.registrations.clear(); +} + +} diff --git a/src/dusk/ui/graphics_tuner.cpp b/src/dusk/ui/graphics_tuner.cpp index 22f0013a49..57fa3ee329 100644 --- a/src/dusk/ui/graphics_tuner.cpp +++ b/src/dusk/ui/graphics_tuner.cpp @@ -11,6 +11,7 @@ #include "dusk/config.hpp" #include "dusk/settings.h" +#include "dusk/texture_replacements.hpp" #include #include @@ -98,8 +99,7 @@ void set_value(GraphicsOption option, int value) { getSettings().game.bloomMultiplier.setValue(std::clamp(value, 0, 100) / 100.0f); break; case GraphicsOption::TextureReplacements: - getSettings().game.enableTextureReplacements.setValue(static_cast(value)); - aurora_set_texture_replacements_enabled(static_cast(value)); + texture_replacements::set_enabled(static_cast(value)); break; } } diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index fbd872efc4..bf37f964e6 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -84,6 +84,7 @@ #include "dusk/config.hpp" #include "dusk/speedrun.h" #include "dusk/settings.h" +#include "dusk/texture_replacements.hpp" #include "dusk/io.hpp" #include "dusk/version.hpp" #include "dusk/discord_presence.hpp" @@ -585,7 +586,6 @@ int game_main(int argc, char* argv[]) { config.allowJoystickBackgroundEvents = dusk::getSettings().game.allowBackgroundInput; config.pauseOnFocusLost = dusk::getSettings().game.pauseOnFocusLost; config.imGuiInitCallback = &aurora_imgui_init_callback; - config.allowTextureReplacements = dusk::getSettings().game.enableTextureReplacements; config.allowTextureDumps = false; auroraInfo = aurora_initialize(argc, argv, &config); } @@ -635,6 +635,7 @@ int game_main(int argc, char* argv[]) { return 0; } + dusk::texture_replacements::reload(); dusk::ui::initialize(); dusk::ui::push_document(std::make_unique(), true, true); dusk::ui::push_document(std::make_unique(), false); @@ -783,6 +784,7 @@ int game_main(int argc, char* argv[]) { dusk::discord::shutdown(); #endif dusk::ui::shutdown(); + dusk::texture_replacements::shutdown(); aurora_shutdown(); return 0;