Fixing localization bugs, working with graphics settings

This commit is contained in:
Vladislav Khorev committed 2026-07-12 16:02:09 +03:00
1 parent d4365728fe
commit 9d03b52c2a
14 files changed
+354 -44

No files matched your search

+84 -25
View File
@@ -12,7 +12,8 @@
namespace ZL {
static const std::string EMPTY_LANGUAGE_RU = "(пусто)";
// Localization
static const std::string EMPTY_LANGUAGE_RU = u8"(пусто)";
static const std::string EMPTY_LANGUAGE_EN = "(empty)";
@@ -91,12 +92,12 @@ namespace ZL {
if (negative) result = "-" + result;
//Localization
if (g_currentLanguage == Language::English)
{
return result + " som";
}
return result + " сом";
return result + u8" сом";
}
static std::array<float, 4> questStatusColor(Quest::QuestStatus status) {
@@ -113,13 +114,14 @@ namespace ZL {
gameState_(gameState),
audioPlayer_(audioPlayer)
{
localizedLocationName["uni_interior"][Language::Russian] = "Университет, 3 этаж";
//Localization
localizedLocationName["uni_interior"][Language::Russian] = u8"Университет, 3 этаж";
localizedLocationName["uni_interior"][Language::English] = "University, 3rd floor";
localizedLocationName["uni_exterior"][Language::Russian] = "Университет, двор";
localizedLocationName["uni_exterior"][Language::Russian] = u8"Университет, двор";
localizedLocationName["uni_exterior"][Language::English] = "University, exterior";
localizedLocationName["location_dorm"][Language::Russian] = "Общежитие, 1 этаж";
localizedLocationName["location_dorm"][Language::Russian] = u8"Общежитие, 1 этаж";
localizedLocationName["location_dorm"][Language::English] = "Dormitory, 1st floor";
}
@@ -214,6 +216,7 @@ namespace ZL {
mainMenuRoot = loadLocalizedUi("resources/w/ui/screen_main_menu.json", zipFile);
aboutScreenRoot = loadLocalizedUi("resources/w/ui/screen_about.json", zipFile);
settingsScreenRoot = loadLocalizedUi("resources/w/ui/screen_settings.json", zipFile);
settingsGraphicsScreenRoot = loadLocalizedUi("resources/w/ui/screen_settings_graphics.json", zipFile);
languageScreenRoot = loadLocalizedUi("resources/w/ui/screen_language.json", zipFile);
loadSavedGameScreenRoot = loadLocalizedUi("resources/w/ui/screen_load.json", zipFile);
saveGameScreenRoot = loadLocalizedUi("resources/w/ui/screen_save.json", zipFile);
@@ -393,6 +396,11 @@ namespace ZL {
audioPlayer_.playSoundAsync("audio/751089__smallconfusion__mechanical-plastic-click-11.ogg");
});
uiManager.setTextButtonCallback("graphicsButton", [this](const std::string&) {
showSettingsGraphicsScreen();
audioPlayer_.playSoundAsync("audio/751089__smallconfusion__mechanical-plastic-click-11.ogg");
});
// Set initial slider positions before registering callbacks so
// setSliderValue does not fire an unregistered callback.
const float musicFrac = audioPlayer_.getMusicVolume() / 128.0f;
@@ -400,6 +408,7 @@ namespace ZL {
uiManager.setSliderValue("musicVolumeSlider", musicFrac);
uiManager.setSliderValue("soundVolumeSlider", soundFrac);
// Localization
if (g_currentLanguage == Language::English)
{
musicVolumePrefix = "Music volume: ";
@@ -408,19 +417,15 @@ namespace ZL {
musicToggleOff = "Music: OFF";
soundToggleOn = "Sound: ON";
soundToggleOff = "Sound: OFF";
fullScreenToggleOn = "Full Screen: ON";
fullScreenToggleOff = "Full Screen: OFF";
}
else if (g_currentLanguage == Language::Russian)
{
musicVolumePrefix = "Громкость музыки: ";
soundVolumePrefix = "Громкость звука: ";
musicToggleOn = "Музыка: ВКЛ";
musicToggleOff = "Музыка: ВЫКЛ";
soundToggleOn = "Звук: ВКЛ";
soundToggleOff = "Звук: ВЫКЛ";
fullScreenToggleOn = "Полноэкранный режим: ВКЛ";
fullScreenToggleOff = "Полноэкранный режим: ВЫКЛ";
musicVolumePrefix = u8"Громкость музыки: ";
soundVolumePrefix = u8"Громкость звука: ";
musicToggleOn = u8"Музыка: ВКЛ";
musicToggleOff = u8"Музыка: ВЫКЛ";
soundToggleOn = u8"Звук: ВКЛ";
soundToggleOff = u8"Звук: ВЫКЛ";
}
uiManager.setText("musicVolumeText",
@@ -458,17 +463,9 @@ namespace ZL {
? std::array<float, 4>{ 0.2f, 0.9f, 0.2f, 1.0f }
: std::array<float, 4>{ 0.9f, 0.2f, 0.2f, 1.0f });*/
};
auto refreshFullscreenToggle = [this]() {
const bool on = Environment::isFullscreen;
uiManager.setTextButtonText("fullScreenToggleButton", on ? fullScreenToggleOn : fullScreenToggleOff);
/*uiManager.setTextButtonColor("fullScreenToggleButton", on
? std::array<float, 4>{ 0.2f, 0.9f, 0.2f, 1.0f }
: std::array<float, 4>{ 0.9f, 0.2f, 0.2f, 1.0f });*/
};
refreshMusicToggle();
refreshSoundToggle();
refreshFullscreenToggle();
uiManager.setTextButtonCallback("musicToggleButton", [this](const std::string&) {
audioPlayer_.setMusicEnabled(!audioPlayer_.isMusicEnabled());
@@ -488,11 +485,59 @@ namespace ZL {
: std::array<float, 4>{ 0.9f, 0.2f, 0.2f, 1.0f });*/
audioPlayer_.playSoundAsync("audio/751089__smallconfusion__mechanical-plastic-click-11.ogg");
});
}
void MenuManager::showSettingsGraphicsScreen() {
uiManager.pushMenuFromSavedRoot(settingsGraphicsScreenRoot);
uiManager.setTextButtonCallback("settingsBackButton", [this](const std::string&) {
//saveSettings();
uiManager.popMenu();
audioPlayer_.playSoundAsync("audio/751089__smallconfusion__mechanical-plastic-click-11.ogg");
});
// Localization
if (g_currentLanguage == Language::English)
{
fullScreenToggleOn = "Full Screen: ON";
fullScreenToggleOff = "Full Screen: OFF";
shadowToggleOn = "Shadows: ON";
shadowToggleOff = "Shadows: OFF";
}
else if (g_currentLanguage == Language::Russian)
{
fullScreenToggleOn = u8"Полноэкранный режим: ВКЛ";
fullScreenToggleOff = u8"Полноэкранный режим: ВЫКЛ";
shadowToggleOn = u8"Тени: ВКЛ";
shadowToggleOff = u8"Тени: ВЫКЛ";
}
auto refreshFullscreenToggle = [this]() {
const bool on = Environment::isFullscreen;
uiManager.setTextButtonText("fullScreenToggleButton", on ? fullScreenToggleOn : fullScreenToggleOff);
};
auto refreshShadowToggle = [this]() {
const bool on = this->shadowsEnabled;
uiManager.setTextButtonText("shadowToggleButton", on ? shadowToggleOn : shadowToggleOff);
};
refreshFullscreenToggle();
refreshShadowToggle();
uiManager.setTextButtonCallback("fullScreenToggleButton", [this, refreshFullscreenToggle](const std::string&) {
Environment::setFullscreen(!Environment::isFullscreen);
refreshFullscreenToggle();
audioPlayer_.playSoundAsync("audio/751089__smallconfusion__mechanical-plastic-click-11.ogg");
});
});
uiManager.setTextButtonCallback("shadowToggleButton", [this, refreshShadowToggle](const std::string&) {
bool newValue = !this->shadowsEnabled;
shadowMapSettingsChangedFunc(newValue);
refreshShadowToggle();
audioPlayer_.playSoundAsync("audio/751089__smallconfusion__mechanical-plastic-click-11.ogg");
});
}
void MenuManager::showLanguageScreen() {
@@ -2099,6 +2144,7 @@ namespace ZL {
root["soundEnabled"] = audioPlayer_.isSoundEnabled();
root["fullscreen"] = Environment::isFullscreen;
root["language"] = ZL::languageToCode(ZL::g_currentLanguage);
root["shadow"] = shadowsEnabled;
saveJsonToFile(root, "settings.json");
}
@@ -2130,6 +2176,19 @@ namespace ZL {
Environment::setFullscreen(root["fullscreen"].get<bool>());
#endif
}
if (root.contains("shadow")) {
if (shadowMapSettingsChangedFunc)
{
shadowMapSettingsChangedFunc(root["shadow"].get<bool>());
}
}
else
{
if (shadowMapSettingsChangedFunc)
{
shadowMapSettingsChangedFunc(shadowsEnabled);
}
}
} catch (const std::exception& e) {
std::cerr << "[settings] Failed to parse settings.json: " << e.what() << std::endl;
}