diff --git a/UnleashedRecomp/locale/locale.cpp b/UnleashedRecomp/locale/locale.cpp index 495ed6c..1da7ca7 100644 --- a/UnleashedRecomp/locale/locale.cpp +++ b/UnleashedRecomp/locale/locale.cpp @@ -41,7 +41,7 @@ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -std::unordered_map> g_locale = +std::unordered_map> g_locale = { { "Options_Header_Name", @@ -777,22 +777,18 @@ std::unordered_map> g_lo } }; -std::string& Localise(const char* key) +std::string& Localise(const std::string_view& key) { - if (!g_locale.count(key)) - return g_localeMissing; - - if (!g_locale[key].count(Config::Language)) + auto localeFindResult = g_locale.find(key); + if (localeFindResult != g_locale.end()) { - if (g_locale[key].count(ELanguage::English)) - { - return g_locale[key][ELanguage::English]; - } - else - { - return g_localeMissing; - } + auto languageFindResult = localeFindResult->second.find(Config::Language); + if (languageFindResult == localeFindResult->second.end()) + languageFindResult = localeFindResult->second.find(ELanguage::English); + + if (languageFindResult != localeFindResult->second.end()) + return languageFindResult->second; } - return g_locale[key][Config::Language]; + return g_localeMissing; } diff --git a/UnleashedRecomp/locale/locale.h b/UnleashedRecomp/locale/locale.h index b7f716c..e0e1d47 100644 --- a/UnleashedRecomp/locale/locale.h +++ b/UnleashedRecomp/locale/locale.h @@ -12,6 +12,6 @@ enum class ELanguage : uint32_t inline std::string g_localeMissing = ""; -extern std::unordered_map> g_locale; +extern std::unordered_map> g_locale; -std::string& Localise(const char* key); +std::string& Localise(const std::string_view& key); diff --git a/UnleashedRecomp/os/win32/registry_win32.inl b/UnleashedRecomp/os/win32/registry_win32.inl index 32d9e9f..e5a2649 100644 --- a/UnleashedRecomp/os/win32/registry_win32.inl +++ b/UnleashedRecomp/os/win32/registry_win32.inl @@ -1,5 +1,4 @@ #include -#include inline const wchar_t* g_registryRoot = L"Software\\UnleashedRecomp"; diff --git a/UnleashedRecomp/ui/button_guide.cpp b/UnleashedRecomp/ui/button_guide.cpp index e5457ed..605b249 100644 --- a/UnleashedRecomp/ui/button_guide.cpp +++ b/UnleashedRecomp/ui/button_guide.cpp @@ -256,7 +256,7 @@ void ButtonGuide::Draw() if (btn.Visibility && !*btn.Visibility) continue; - auto str = Localise(btn.Name.c_str()).c_str(); + auto str = Localise(btn.Name).c_str(); auto iconWidth = Scale(g_iconWidths[btn.Icon]); auto iconHeight = Scale(g_iconHeights[btn.Icon]); auto textWidth = g_fntNewRodin->CalcTextSizeA(fontSize, FLT_MAX, 0, str).x; @@ -283,7 +283,7 @@ void ButtonGuide::Draw() if (btn.Visibility && !*btn.Visibility) continue; - auto str = Localise(btn.Name.c_str()).c_str(); + auto str = Localise(btn.Name).c_str(); auto iconWidth = Scale(g_iconWidths[btn.Icon]); auto iconHeight = Scale(g_iconHeights[btn.Icon]); auto textWidth = g_fntNewRodin->CalcTextSizeA(fontSize, FLT_MAX, 0, str).x; diff --git a/UnleashedRecomp/ui/installer_wizard.cpp b/UnleashedRecomp/ui/installer_wizard.cpp index 7fc70a2..d4af8af 100644 --- a/UnleashedRecomp/ui/installer_wizard.cpp +++ b/UnleashedRecomp/ui/installer_wizard.cpp @@ -1399,7 +1399,7 @@ static void DrawNavigationButton() float squashRatio; constexpr float NAV_BUTTON_MAX_TEXT_WIDTH = 90.0f; - const char *nextButtonKey = "Installer_Button_Next"; + std::string_view nextButtonKey = "Installer_Button_Next"; if (skipButton) { nextButtonKey = "Installer_Button_Skip"; diff --git a/UnleashedRecomp/ui/options_menu_thumbnails.cpp b/UnleashedRecomp/ui/options_menu_thumbnails.cpp index 915eeba..05da0b7 100644 --- a/UnleashedRecomp/ui/options_menu_thumbnails.cpp +++ b/UnleashedRecomp/ui/options_menu_thumbnails.cpp @@ -59,7 +59,11 @@ #define VALUE_THUMBNAIL_MAP(type) std::unordered_map> -static std::unordered_map> g_namedThumbnails; +static std::unique_ptr g_defaultThumbnail; + +static std::unique_ptr g_controlTutorialXBThumbnail; +static std::unique_ptr g_controlTutorialPSThumbnail; + static std::unordered_map> g_configThumbnails; static VALUE_THUMBNAIL_MAP(ETimeOfDayTransition) g_timeOfDayTransitionThumbnails; @@ -76,10 +80,10 @@ static VALUE_THUMBNAIL_MAP(EUIAlignmentMode) g_uiAlignmentThumbnails; void LoadThumbnails() { - g_namedThumbnails["Default"] = LOAD_ZSTD_TEXTURE(g_default); - g_namedThumbnails["WindowSize"] = LOAD_ZSTD_TEXTURE(g_window_size); - g_namedThumbnails["ControlTutorialXB"] = LOAD_ZSTD_TEXTURE(g_control_tutorial_xb); - g_namedThumbnails["ControlTutorialPS"] = LOAD_ZSTD_TEXTURE(g_control_tutorial_ps); + g_defaultThumbnail = LOAD_ZSTD_TEXTURE(g_default); + + g_controlTutorialXBThumbnail = LOAD_ZSTD_TEXTURE(g_control_tutorial_xb); + g_controlTutorialPSThumbnail = LOAD_ZSTD_TEXTURE(g_control_tutorial_ps); g_configThumbnails[&Config::Language] = LOAD_ZSTD_TEXTURE(g_language); g_configThumbnails[&Config::VoiceLanguage] = LOAD_ZSTD_TEXTURE(g_voice_language); @@ -109,6 +113,7 @@ void LoadThumbnails() g_configThumbnails[&Config::AspectRatio] = LOAD_ZSTD_TEXTURE(g_aspect_ratio); g_configThumbnails[&Config::ResolutionScale] = LOAD_ZSTD_TEXTURE(g_resolution_scale); g_configThumbnails[&Config::Fullscreen] = LOAD_ZSTD_TEXTURE(g_fullscreen); + g_configThumbnails[&Config::XboxColorCorrection] = LOAD_ZSTD_TEXTURE(g_xbox_color_correction); g_vsyncThumbnails[false] = LOAD_ZSTD_TEXTURE(g_vsync_off); g_vsyncThumbnails[true] = LOAD_ZSTD_TEXTURE(g_vsync_on); @@ -143,8 +148,6 @@ void LoadThumbnails() g_uiAlignmentThumbnails[EUIAlignmentMode::Centre] = LOAD_ZSTD_TEXTURE(g_ui_alignment_centre); g_uiAlignmentThumbnails[EUIAlignmentMode::Edge] = LOAD_ZSTD_TEXTURE(g_ui_alignment_edge); - - g_configThumbnails[&Config::XboxColorCorrection] = LOAD_ZSTD_TEXTURE(g_xbox_color_correction); } template @@ -156,29 +159,23 @@ bool TryGetValueThumbnail(const IConfigDef* cfg, VALUE_THUMBNAIL_MAP(T)* thumbna if (!cfg->GetValue()) return false; - auto result = thumbnails->at(*(T*)cfg->GetValue()).get(); + auto findResult = thumbnails->find(*(T*)cfg->GetValue()); - if (!result) - return false; + if (findResult != thumbnails->end()) + { + *texture = findResult->second.get(); + return true; + } - *texture = result; - - return true; -} - -GuestTexture* GetThumbnail(const std::string_view name) -{ - if (!g_namedThumbnails.count(name)) - return g_namedThumbnails["Default"].get(); - - return g_namedThumbnails[name].get(); + return false; } GuestTexture* GetThumbnail(const IConfigDef* cfg) { - if (!g_configThumbnails.count(cfg)) + auto findResult = g_configThumbnails.find(cfg); + if (findResult == g_configThumbnails.end()) { - auto texture = g_namedThumbnails["Default"].get(); + auto texture = g_defaultThumbnail.get(); if (cfg == &Config::ControlTutorial) { @@ -187,7 +184,7 @@ GuestTexture* GetThumbnail(const IConfigDef* cfg) if (Config::ControllerIcons == EControllerIcons::Auto) isPlayStation = hid::g_inputDeviceController == hid::EInputDevice::PlayStation; - texture = isPlayStation ? g_namedThumbnails["ControlTutorialPS"].get() : g_namedThumbnails["ControlTutorialXB"].get(); + texture = isPlayStation ? g_controlTutorialPSThumbnail.get() : g_controlTutorialXBThumbnail.get(); } if (cfg == &Config::TimeOfDayTransition) { @@ -237,5 +234,5 @@ GuestTexture* GetThumbnail(const IConfigDef* cfg) return texture; } - return g_configThumbnails[cfg].get(); + return findResult->second.get(); } diff --git a/UnleashedRecomp/ui/options_menu_thumbnails.h b/UnleashedRecomp/ui/options_menu_thumbnails.h index 3b81376..8245815 100644 --- a/UnleashedRecomp/ui/options_menu_thumbnails.h +++ b/UnleashedRecomp/ui/options_menu_thumbnails.h @@ -5,5 +5,4 @@ void LoadThumbnails(); -GuestTexture* GetThumbnail(const std::string_view name); GuestTexture* GetThumbnail(const IConfigDef* cfg); diff --git a/UnleashedRecomp/user/config.cpp b/UnleashedRecomp/user/config.cpp index f9bbf15..dddcf5a 100644 --- a/UnleashedRecomp/user/config.cpp +++ b/UnleashedRecomp/user/config.cpp @@ -511,43 +511,33 @@ std::string_view ConfigDef::GetName() const template std::string ConfigDef::GetNameLocalised(ELanguage language) const { - if (!Locale) - return Name; - - if (!Locale->count(language)) + if (Locale != nullptr) { - if (Locale->count(ELanguage::English)) - { - return std::get<0>(Locale->at(ELanguage::English)); - } - else - { - return Name; - } + auto languageFindResult = Locale->find(language); + if (languageFindResult == Locale->end()) + languageFindResult = Locale->find(ELanguage::English); + + if (languageFindResult != Locale->end()) + return std::get<0>(languageFindResult->second); } - return std::get<0>(Locale->at(language)); + return Name; } template std::string ConfigDef::GetDescription(ELanguage language) const { - if (!Locale) - return ""; - - if (!Locale->count(language)) + if (Locale != nullptr) { - if (Locale->count(ELanguage::English)) - { - return std::get<1>(Locale->at(ELanguage::English)); - } - else - { - return ""; - } + auto languageFindResult = Locale->find(language); + if (languageFindResult == Locale->end()) + languageFindResult = Locale->find(ELanguage::English); + + if (languageFindResult != Locale->end()) + return std::get<1>(languageFindResult->second); } - return std::get<1>(Locale->at(language)); + return ""; } template @@ -578,27 +568,27 @@ std::string ConfigDef::GetValueLocalised(ELanguage language) const : Localise("Common_Off"); } - if (!locale) - return ToString(false); - - if (!locale->count(language)) + if (locale != nullptr) { - if (locale->count(ELanguage::English)) + ELanguage languages[] = { language, ELanguage::English }; + + for (auto languageToFind : languages) { - language = ELanguage::English; - } - else - { - return ToString(false); + auto languageFindResult = locale->find(languageToFind); + + if (languageFindResult != locale->end()) + { + auto valueFindResult = languageFindResult->second.find(Value); + if (valueFindResult != languageFindResult->second.end()) + return std::get<0>(valueFindResult->second); + } + + if (languageToFind == ELanguage::English) + break; } } - auto strings = locale->at(language); - - if (!strings.count(Value)) - return ToString(false); - - return std::get<0>(strings.at(Value)); + return ToString(false); } template @@ -615,27 +605,27 @@ std::string ConfigDef::GetValueDescription(ELanguage language) cons return ""; } - if (!locale) - return ""; - - if (!locale->count(language)) + if (locale != nullptr) { - if (locale->count(ELanguage::English)) + ELanguage languages[] = { language, ELanguage::English }; + + for (auto languageToFind : languages) { - language = ELanguage::English; - } - else - { - return ""; + auto languageFindResult = locale->find(languageToFind); + + if (languageFindResult != locale->end()) + { + auto valueFindResult = languageFindResult->second.find(Value); + if (valueFindResult != languageFindResult->second.end()) + return std::get<1>(valueFindResult->second); + } + + if (languageToFind == ELanguage::English) + break; } } - auto strings = locale->at(language); - - if (!strings.count(Value)) - return ""; - - return std::get<1>(strings.at(Value)); + return ""; } template