From 994f62799c8f19ab5db42353a19c5a8a848791fe Mon Sep 17 00:00:00 2001 From: StackZ <47382115+SuperSaiyajinStackZ@users.noreply.github.com> Date: Thu, 9 Apr 2020 04:06:02 +0200 Subject: [PATCH] WIP: Credits & Language Screen Rewrite. --- include/lang/lang.hpp | 2 +- include/screens/credits.hpp | 5 +- include/utils/config.hpp | 4 +- source/lang/lang.cpp | 36 +++++++-- source/screens/credits.cpp | 141 ++++++++++++++++++++++++++++-------- source/screens/settings.cpp | 112 ++++++++++++++-------------- source/utils/config.cpp | 19 +++-- 7 files changed, 213 insertions(+), 106 deletions(-) diff --git a/include/lang/lang.hpp b/include/lang/lang.hpp index 2f6c705..c64a923 100644 --- a/include/lang/lang.hpp +++ b/include/lang/lang.hpp @@ -7,7 +7,7 @@ namespace Lang { std::string get(const std::string &key); - void load(int lang); + void load(const std::string lang); } #endif \ No newline at end of file diff --git a/include/screens/credits.hpp b/include/screens/credits.hpp index dfa5c58..59b0f8e 100644 --- a/include/screens/credits.hpp +++ b/include/screens/credits.hpp @@ -38,7 +38,10 @@ public: void Draw(void) const override; void Logic(u32 hDown, u32 hHeld, touchPosition touch) override; private: - int creditsPage = 1; + void DrawBottom(void) const; + int creditsPage = 0; + int screenPos = 0; + int Selection = 0; std::vector arrowPos = { {0, 215, 25, 25}, // Back Arrow. diff --git a/include/utils/config.hpp b/include/utils/config.hpp index a446bce..3b25516 100644 --- a/include/utils/config.hpp +++ b/include/utils/config.hpp @@ -30,8 +30,8 @@ #include namespace Config { - extern int LangPath, lang, Color1, Color2, Color3, TxtColor, SelectedColor, UnselectedColor, viewMode, progressbarColor, autoboot, outdated, uptodate, notFound, future, Button; - extern std::string ScriptPath, MusicPath, StorePath, AutobootFile; + extern int LangPath, Color1, Color2, Color3, TxtColor, SelectedColor, UnselectedColor, viewMode, progressbarColor, autoboot, outdated, uptodate, notFound, future, Button; + extern std::string lang, ScriptPath, MusicPath, StorePath, AutobootFile; extern bool Logging, UseBars, GodMode; void load(); diff --git a/source/lang/lang.cpp b/source/lang/lang.cpp index bd9b1b9..59280a9 100644 --- a/source/lang/lang.cpp +++ b/source/lang/lang.cpp @@ -2,6 +2,7 @@ #include "lang.hpp" #include +#include nlohmann::json appJson; @@ -12,15 +13,38 @@ std::string Lang::get(const std::string &key) { return appJson.at(key).get_ref(); } -std::string langs[] = {"br", "de", "en", "es", "fr", "it", "lt", "pt", "ru", "jp"}; +std::string langs[] = {"br", "da", "de", "en", "es", "fr", "it", "lt", "pt", "ru", "jp"}; -void Lang::load(int lang) { +void Lang::load(const std::string lang) { FILE* values; if (Config::LangPath == 1) { - values = fopen(("sdmc:/3ds/Universal-Updater/app.json"), "rt"); + // Check if exist. + if(access("sdmc:/3ds/Universal-Updater/app.json", F_OK) == 0 ) { + values = fopen(("sdmc:/3ds/Universal-Updater/app.json"), "rt"); + appJson = nlohmann::json::parse(values, nullptr, false); + fclose(values); + return; + + } else { + values = fopen(("romfs:/lang/en/app.json"), "rt"); + appJson = nlohmann::json::parse(values, nullptr, false); + fclose(values); + return; + } + } else { - values = fopen(("romfs:/lang/"+langs[lang]+"/app.json").c_str(), "rt"); + // Check if exist. + if(access(("romfs:/lang/" + lang + "/app.json").c_str(), F_OK) == 0 ) { + values = fopen(std::string(("romfs:/lang/" + lang + "/app.json")).c_str(), "rt"); + appJson = nlohmann::json::parse(values, nullptr, false); + fclose(values); + return; + + } else { + values = fopen(("romfs:/lang/en/app.json"), "rt"); + appJson = nlohmann::json::parse(values, nullptr, false); + fclose(values); + return; + } } - if(values) appJson = nlohmann::json::parse(values, nullptr, false); - fclose(values); } \ No newline at end of file diff --git a/source/screens/credits.cpp b/source/screens/credits.cpp index b6b2031..f9ecda8 100644 --- a/source/screens/credits.cpp +++ b/source/screens/credits.cpp @@ -27,12 +27,55 @@ #include "credits.hpp" extern bool touching(touchPosition touch, Structs::ButtonPos button); +// Language Page 1. +const std::vector Translators = { + "_mapple²", + "AlbertCoolGuy", + "antoine62", + "Chips", + "cooolgamer", + "David Pires", + "FlameKat53", + "lemonnade0", + "Pk11", + "Roby Spia", + "StackZ", + "YoSoy" +}; +const std::vector Languages = { + "Русский", + "Dansk", + "Français", + "Português", + "Français", + "Português", + "Bruh", + "Lietuvių", + "日本語", + "Italiano", + "deutsch, English", + "Español" +}; +// Universal-Team Page 2. +const std::vector UniversalTeam = { + "DeadPhoenix", + "FlameKat53", + "Pk11", + "RocketRobz", + "StackZ", + "TotallyNotGuy" +}; +// Script Page 3. +const std::vector ScriptCreators = { + "DualBladedKirito", "Glazed_Belmont", "Pk11", "StackZ", "The Conceptionist", "YoSoy" +}; +const std::vector ScriptAmount = {"1", "1", "1", "5", "10", "1 | 2"}; void Credits::Draw(void) const { std::string title = "Universal-Updater - "; title += Lang::get("CREDITS"); GFX::DrawTop(); - if (creditsPage != 4) { + if (creditsPage != 3) { if (Config::UseBars == true) { Gui::DrawStringCentered(0, 0, 0.7f, Config::TxtColor, title, 400); } else { @@ -49,53 +92,89 @@ void Credits::Draw(void) const { Gui::Draw_Rect(0, 0, 400, 240, C2D_Color32(0, 0, 0, 190)); GFX::DrawSprite(sprites_discord_idx, 115, 35); } + DrawBottom(); +} + +void Credits::DrawBottom(void) const { + std::string line1; + std::string line2; GFX::DrawBottom(); - - if (creditsPage != 4) { - GFX::DrawArrow(0, 218, 0, 1); - GFX::DrawArrow(318, 240, 180.0, 1); - } - - if (creditsPage == 1) { + if (creditsPage == 0) { Gui::DrawStringCentered(0, -2, 0.7f, Config::TxtColor, Lang::get("TRANSLATORS"), 320); - Gui::DrawString(5, 21, 0.6f, Config::TxtColor, "- _mapple²\n- antoine62\n- Chips\n- cooolgamer\n- David Pires\n- FlameKat53\n- lemonnade0\n- Pk11\n- Roby Spia\n- StackZ\n- YoSoy"); - Gui::DrawString(180, 21, 0.6f, Config::TxtColor, "Русский\nFrançais\nPortuguês\nFrançais\nPortuguês\nBruh\nLietuvių\n日本語\nItaliano\nDeutsch, English\nEspañol"); - } else if (creditsPage == 2) { + for(int i=0;i 1) { + // KEY_DOWN Logic. (SIZE) + if (creditsPage == 0) { + if (hDown & KEY_DOWN) { if (Selection < (int)Translators.size()-1) Selection++; } + } else if (creditsPage == 1) { + if (hDown & KEY_DOWN) { if (Selection < (int)UniversalTeam.size()-1) Selection++; } + } else if (creditsPage == 2) { + if (hDown & KEY_DOWN) { if (Selection < (int)ScriptCreators.size()-1) Selection++; } + } + + if (hDown & KEY_UP) { if (Selection > 0) Selection--; } + + + if ((hDown & KEY_L || hDown & KEY_LEFT)) { + if (creditsPage > 0) { + Selection = 0; creditsPage--; } } - - if ((hDown & KEY_R || hDown & KEY_RIGHT) || (hDown & KEY_TOUCH && touching(touch, arrowPos[1]))) { - if (creditsPage < 4) creditsPage++; + + if ((hDown & KEY_R || hDown & KEY_RIGHT)) { + if (creditsPage < 3) { + Selection = 0; + creditsPage++; + } } if (hDown & KEY_B) { Gui::screenBack(); return; } + + if (Selection < screenPos) { + screenPos = Selection; + } else if (Selection > screenPos + ENTRIES_PER_SCREEN - 1) { + screenPos = Selection - ENTRIES_PER_SCREEN + 1; + } } \ No newline at end of file diff --git a/source/screens/settings.cpp b/source/screens/settings.cpp index 2fd9672..658c8df 100644 --- a/source/screens/settings.cpp +++ b/source/screens/settings.cpp @@ -34,7 +34,7 @@ int selectedLang; extern bool changesMade; Settings::Settings() { - selectedLang = Config::lang; + selectedLang = 0; } void Settings::Draw(void) const { @@ -68,7 +68,21 @@ void Settings::DrawSubMenu(void) const { Animation::Button(mainButtons[Selection].x, mainButtons[Selection].y, .060); } +const std::vector languages = { + "Bruh", + "Dansk", + "Deutsch", + "English", + "Español", + "Français", + "Italiano", + "Lietuvių", + "Português", + "Русский", + "日本語" +}; void Settings::DrawLanguageSelection(void) const { + std::string line1; GFX::DrawTop(); if (Config::UseBars == true) { Gui::DrawStringCentered(0, 0, 0.7f, Config::TxtColor, Lang::get("SELECT_LANG"), 400); @@ -76,26 +90,15 @@ void Settings::DrawLanguageSelection(void) const { Gui::DrawStringCentered(0, 2, 0.7f, Config::TxtColor, Lang::get("SELECT_LANG"), 400); } GFX::DrawBottom(); - GFX::DrawArrow(0, 218, 0, 1); - for (int language = 0; language < 10; language++) { - Gui::Draw_Rect(langBlocks[language].x, langBlocks[language].y, langBlocks[language].w, langBlocks[language].h, Config::UnselectedColor); - if (Config::lang == language) { - Gui::drawAnimatedSelector(langBlocks[language].x, langBlocks[language].y, langBlocks[language].w, langBlocks[language].h, .060, TRANSPARENT, Config::SelectedColor); + for(int i=0;i colorList = { @@ -290,14 +293,29 @@ void Settings::SubMenuLogic(u32 hDown, u32 hHeld, touchPosition touch) { } if (hDown & KEY_A) { - if (Selection + 1 == 3) Gui::setScreen(std::make_unique()); - else mode = Selection+1; + switch (Selection) { + case 0: + screenPos = 0; + selectedLang = 0; + mode = 1; + break; + case 1: + screenPos = 0; + mode = 2; + break; + case 2: + Gui::setScreen(std::make_unique()); + break; + } } if (hDown & KEY_TOUCH) { if (touching(touch, mainButtons[0])) { + screenPos = 0; + selectedLang = 0; mode = 1; } else if (touching(touch, mainButtons[1])) { + screenPos = 0; mode = 2; } else if (touching(touch, mainButtons[2])) { Gui::setScreen(std::make_unique()); @@ -315,59 +333,35 @@ void Settings::SubMenuLogic(u32 hDown, u32 hHeld, touchPosition touch) { } } +std::string langsTemp[] = {"br", "da", "de", "en", "es", "fr", "it", "lt", "pt", "ru", "jp"}; void Settings::LanguageSelection(u32 hDown, touchPosition touch) { - - if (hDown & KEY_TOUCH) { - for (int language = 0; language < 10; language++) { - if (touching(touch, langBlocks[language])) { - selectedLang = language; - Config::lang = language; - Lang::load(Config::lang); - changesMade = true; - } - } - } - if (hDown & KEY_UP) { if(selectedLang > 0) { selectedLang--; - Config::lang = selectedLang; - Lang::load(Config::lang); - changesMade = true; } } + if (hDown & KEY_A) { + Config::lang = langsTemp[selectedLang]; + Lang::load(Config::lang); + changesMade = true; + mode = 0; + } + if (hDown & KEY_DOWN) { - if(selectedLang < 9) { + if(selectedLang < (int)languages.size()-1) { selectedLang++; - Config::lang = selectedLang; - Lang::load(Config::lang); - changesMade = true; } } - - if (hDown & KEY_LEFT) { - if (selectedLang > 4) { - selectedLang -= 5; - Config::lang = selectedLang; - Lang::load(Config::lang); - changesMade = true; - } - } - - if (hDown & KEY_RIGHT) { - if (selectedLang < 5) { - selectedLang += 5; - Config::lang = selectedLang; - Lang::load(Config::lang); - changesMade = true; - } - } - - if ((hDown & KEY_B) || (hDown & KEY_TOUCH && touching(touch, arrowPos[2]))) { + if ((hDown & KEY_B)) { mode = 0; } + if (selectedLang < screenPos) { + screenPos = selectedLang; + } else if (selectedLang > screenPos + ENTRIES_PER_SCREEN - 1) { + screenPos = selectedLang - ENTRIES_PER_SCREEN + 1; + } } diff --git a/source/utils/config.cpp b/source/utils/config.cpp index 35d8515..2e7f6cb 100644 --- a/source/utils/config.cpp +++ b/source/utils/config.cpp @@ -32,7 +32,7 @@ #include #include -int Config::lang; // Current Language. +std::string Config::lang; // Current Language. int Config::Color1; int Config::Color2; int Config::Color3; @@ -56,6 +56,7 @@ int Config::notFound; int Config::future; int Config::Button; nlohmann::json configJson; +extern bool changesMade; void Config::load() { FILE* file = fopen("sdmc:/3ds/Universal-Updater/Settings.json", "r"); @@ -110,10 +111,16 @@ void Config::load() { LangPath = getInt("LANGPATH"); } + // Conversion to string. + if (configJson.contains("LANGUAGE") && configJson.at("LANGUAGE").is_number()) { + setString("LANGUAGE", "en"); + changesMade = true; + } + if(!configJson.contains("LANGUAGE")) { - lang = 2; + lang = "en"; } else { - lang = getInt("LANGUAGE"); + lang = getString("LANGUAGE"); } if(!configJson.contains("VIEWMODE")) { @@ -204,7 +211,7 @@ void Config::load() { UnselectedColor = UnselectedColordefault; ScriptPath = SCRIPTS_PATH; LangPath = 0; - lang = 2; + lang = "en"; viewMode = 0; progressbarColor = WHITE; MusicPath = MUSIC_PATH; @@ -230,7 +237,7 @@ void Config::save() { setInt("UNSELECTEDCOLOR", UnselectedColor); setString("SCRIPTPATH", ScriptPath); setInt("LANGPATH", LangPath); - setInt("LANGUAGE", lang); + setString("LANGUAGE", lang); setInt("VIEWMODE", viewMode); setInt("PROGRESSBARCOLOR", progressbarColor); setString("MUSICPATH", MusicPath); @@ -262,7 +269,7 @@ void Config::initializeNewConfig() { setInt("UNSELECTEDCOLOR", UnselectedColordefault); setString("SCRIPTPATH", SCRIPTS_PATH); setInt("LANGPATH", 0); - setInt("LANGUAGE", 2); + setString("LANGUAGE", "en"); setInt("VIEWMODE", 0); setInt("PROGRESSBARCOLOR", WHITE); setString("MUSICPATH", MUSIC_PATH);