From 394036d8498b1a1c0201150b1c370a852c745b33 Mon Sep 17 00:00:00 2001 From: Eddoursul Date: Mon, 8 Jul 2024 02:37:53 +0200 Subject: [PATCH] Fallback to default shader when a non-shader form is set in INI --- src/EventListener.cpp | 8 ++++---- src/Util.h | 17 +++++++++-------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/EventListener.cpp b/src/EventListener.cpp index b27d063..06569cc 100644 --- a/src/EventListener.cpp +++ b/src/EventListener.cpp @@ -32,11 +32,11 @@ void EventListener::Install() LoadINI(&settings, std::format("Data/SKSE/Plugins/{}.ini", SKSE::PluginDeclaration::GetSingleton()->GetName()).c_str()); - RE::TESEffectShader* defaultShader = RE::TESForm::LookupByID(0xC5EF7); + RE::TESEffectShader* defaultShader = RE::TESForm::LookupByID(0xB6BF9); - EventListener::regularBookShader = retrieveFormByString(std::any_cast(settings["sRegularBookShader"]), defaultShader)->As(); - EventListener::spellBookShader = retrieveFormByString(std::any_cast(settings["sSpellBookShader"]), defaultShader)->As(); - EventListener::skillBookShader = retrieveFormByString(std::any_cast(settings["sSkillBookShader"]), defaultShader)->As(); + EventListener::regularBookShader = retrieveFormByString(std::any_cast(settings["sRegularBookShader"]), defaultShader); + EventListener::spellBookShader = retrieveFormByString(std::any_cast(settings["sSpellBookShader"]), defaultShader); + EventListener::skillBookShader = retrieveFormByString(std::any_cast(settings["sSkillBookShader"]), defaultShader); if (EventListener::bEnderalMode = RE::TESDataHandler::GetSingleton()->GetModIndex("Enderal - Forgotten Stories.esm") != std::nullopt) { logger::info("Detected Enderal SE, learning books will be highlighted as well"); diff --git a/src/Util.h b/src/Util.h index b98aa6d..cd9719f 100644 --- a/src/Util.h +++ b/src/Util.h @@ -61,7 +61,8 @@ inline void ClearOldShaders() }); } -inline RE::TESForm* retrieveFormByString(std::string a_str, RE::TESForm* a_defaultForm) +template +inline T* retrieveFormByString(std::string a_str, T* defaultForm) { int pos = a_str.find_first_of('@'); std::string sHex = a_str.substr(pos + 1), @@ -72,14 +73,14 @@ inline RE::TESForm* retrieveFormByString(std::string a_str, RE::TESForm* a_defau ss << std::hex << sHex; ss >> id; - RE::TESForm* result = RE::TESDataHandler::GetSingleton()->LookupForm(id, sFilename); + RE::TESForm* form = RE::TESDataHandler::GetSingleton()->LookupForm(id, sFilename); + T* result = form ? form->As() : nullptr; - if (!result) { - logger::error("Unable to retrieve {}, using default value", a_str); - return a_defaultForm; + if (result) { + logger::info("Successfully retrieved {}", a_str); + return result; } - logger::info("Successfully retrieved {}", a_str); - - return result; + logger::error("Unable to retrieve {}, using default value", a_str); + return defaultForm; }