From 984d3635335085b170c51cf85963fa64c86544b0 Mon Sep 17 00:00:00 2001 From: StackZ <47382115+SuperSaiyajinStackZ@users.noreply.github.com> Date: Sun, 21 Jun 2020 12:46:32 +0200 Subject: [PATCH] Add startup splash on first boot of U-U. --- assets/gfx/sprites.t3s | 2 + assets/gfx/sprites/dev_by.png | Bin 0 -> 23923 bytes assets/gfx/sprites/universal-updater.png | Bin 0 -> 29423 bytes include/screens/startup.hpp | 42 +++++++++++++ include/utils/config.hpp | 5 +- source/init.cpp | 39 +++++++----- source/screens/mainMenu.cpp | 1 + source/screens/startup.cpp | 74 +++++++++++++++++++++++ source/utils/config.cpp | 10 ++- 9 files changed, 155 insertions(+), 18 deletions(-) create mode 100644 assets/gfx/sprites/dev_by.png create mode 100644 assets/gfx/sprites/universal-updater.png create mode 100644 include/screens/startup.hpp create mode 100644 source/screens/startup.cpp diff --git a/assets/gfx/sprites.t3s b/assets/gfx/sprites.t3s index b5f7abc..6a21ec8 100644 --- a/assets/gfx/sprites.t3s +++ b/assets/gfx/sprites.t3s @@ -5,6 +5,7 @@ sprites/bottom_screen_bot.png sprites/bottom_screen_top.png sprites/button.png sprites/delete.png +sprites/dev_by.png sprites/download_all.png sprites/dropdown.png sprites/noIcon.png @@ -15,6 +16,7 @@ sprites/selector.png sprites/side_arrow.png sprites/uniStore.png sprites/uniStore_HD.png +sprites/universal-updater.png sprites/update.png sprites/updateStore.png sprites/view.png diff --git a/assets/gfx/sprites/dev_by.png b/assets/gfx/sprites/dev_by.png new file mode 100644 index 0000000000000000000000000000000000000000..ace84f2a3308b1fa48e13e27aea3edc8ccaced93 GIT binary patch literal 23923 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 literal 0 HcmV?d00001 diff --git a/assets/gfx/sprites/universal-updater.png b/assets/gfx/sprites/universal-updater.png new file mode 100644 index 0000000000000000000000000000000000000000..d7f565e0be9c52d188b252bf73debeb787f29e69 GIT binary patch literal 29423 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. +* +* Additional Terms 7.b and 7.c of GPLv3 apply to this file: +* * Requiring preservation of specified reasonable legal notices or +* author attributions in that material or in the Appropriate Legal +* Notices displayed by works containing it. +* * Prohibiting misrepresentation of the origin of that material, +* or requiring that modified versions of such material be marked in +* reasonable ways as different from the original version. +*/ + +#ifndef STARTUP_HPP +#define STARTUP_HPP + +#include "common.hpp" + +class Startup : public Screen { +public: + void Draw(void) const override; + void Logic(u32 hDown, u32 hHeld, touchPosition touch) override; + Startup(int mode = 0, std::string file = "NOT_USED"); +private: + int mode = 0, delay = 150; + std::string file = "NOT_USED"; +}; + +#endif \ No newline at end of file diff --git a/include/utils/config.hpp b/include/utils/config.hpp index bea04d2..f865582 100644 --- a/include/utils/config.hpp +++ b/include/utils/config.hpp @@ -113,6 +113,9 @@ public: // Language. std::string language() { return this->v_language; } void language(std::string v) { this->v_language = v; if (!this->changesMade) this->changesMade = true; } + // First startup. + bool firstStartup() { return this->v_firstStartup; } + void firstStartup(bool v) { this->v_firstStartup = v; if (!this->changesMade) this->changesMade = true; } // Mainly helper. bool getBool(const std::string &key); @@ -130,7 +133,7 @@ private: v_outdatedColor, v_uptodateColor, v_notfoundColor, v_futureColor; std::string v_scriptPath, v_musicPath, v_storePath, v_autobootFile, v_language; int v_langPath, v_viewMode, v_autoboot, v_keyDelay; - bool v_logging, v_useBars, v_screenFade, v_progressDisplay; + bool v_logging, v_useBars, v_screenFade, v_progressDisplay, v_firstStartup; }; #endif \ No newline at end of file diff --git a/source/init.cpp b/source/init.cpp index bfd15cc..2363411 100644 --- a/source/init.cpp +++ b/source/init.cpp @@ -33,6 +33,7 @@ #include "mainMenu.hpp" #include "screenCommon.hpp" #include "scriptlist.hpp" +#include "startup.hpp" #include "sound.h" #include "unistore.hpp" @@ -95,7 +96,7 @@ Result Init::Initialize() { mkdir("sdmc:/3ds/Universal-Updater", 0777); mkdir("sdmc:/3ds/Universal-Updater/scripts", 0777); mkdir("sdmc:/3ds/Universal-Updater/stores", 0777); - + // We need to make sure, the file exist. config = std::make_unique(); @@ -116,26 +117,32 @@ Result Init::Initialize() { AutobootWhat = config->autoboot(); - if (config->autoboot() == 1) { - if (access(config->autobootFile().c_str(), F_OK) == 0) { - Gui::setScreen(std::make_unique(true, config->autobootFile()), false, true); + if (!config->firstStartup()) { + if (AutobootWhat == 1) { + if (access(config->autobootFile().c_str(), F_OK) == 0) { + Gui::setScreen(std::make_unique(true, config->autobootFile()), false, true); + } else { + AutobootWhat = 0; + config->autoboot(0); + Gui::setScreen(std::make_unique(), false, true); + } + } else if (AutobootWhat == 2) { + if (access(config->autobootFile().c_str(), F_OK) == 0) { + Gui::setScreen(std::make_unique(), false, true); + } else { + AutobootWhat = 0; + config->autoboot(0); + Gui::setScreen(std::make_unique(), false, true); + } } else { AutobootWhat = 0; config->autoboot(0); Gui::setScreen(std::make_unique(), false, true); } - } else if (config->autoboot() == 2) { - if (access(config->autobootFile().c_str(), F_OK) == 0) { - Gui::setScreen(std::make_unique(), false, true); - } else { - AutobootWhat = 0; - config->autoboot(0); - Gui::setScreen(std::make_unique(), false, true); - } - } else { - AutobootWhat = 0; - config->autoboot(0); - Gui::setScreen(std::make_unique(), false, true); + } + + if (config->firstStartup()) { + Gui::setScreen(std::make_unique(AutobootWhat, config->autobootFile()), false, true); } osSetSpeedupEnable(true); // Enable speed-up for New 3DS users diff --git a/source/screens/mainMenu.cpp b/source/screens/mainMenu.cpp index bf1ce98..20d80e0 100644 --- a/source/screens/mainMenu.cpp +++ b/source/screens/mainMenu.cpp @@ -50,6 +50,7 @@ void MainMenu::Draw(void) const { Gui::DrawString(397-Gui::GetStringWidth(0.5f, V_STRING), 237-Gui::GetStringHeight(0.5f, V_STRING), 0.5f, config->textColor(), V_STRING); } + GFX::DrawSprite(sprites_universal_updater_idx, 110, 30); if (fadealpha > 0) Gui::Draw_Rect(0, 0, 400, 240, C2D_Color32(fadecolor, fadecolor, fadecolor, fadealpha)); // Fade in/out effect GFX::DrawBottom(); GFX::DrawArrow(0, 218, 0, 1); diff --git a/source/screens/startup.cpp b/source/screens/startup.cpp new file mode 100644 index 0000000..5ec7a76 --- /dev/null +++ b/source/screens/startup.cpp @@ -0,0 +1,74 @@ +/* +* This file is part of Universal-Updater +* Copyright (C) 2019-2020 DeadPhoenix8091, Epicpkmn11, Flame, RocketRobz, StackZ, TotallyNotGuy +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* +* Additional Terms 7.b and 7.c of GPLv3 apply to this file: +* * Requiring preservation of specified reasonable legal notices or +* author attributions in that material or in the Appropriate Legal +* Notices displayed by works containing it. +* * Prohibiting misrepresentation of the origin of that material, +* or requiring that modified versions of such material be marked in +* reasonable ways as different from the original version. +*/ + +#include "mainMenu.hpp" +#include "scriptlist.hpp" +#include "startup.hpp" +#include "unistore.hpp" +#include + +extern bool touching(touchPosition touch, Structs::ButtonPos button); +extern int fadealpha; +extern bool fadein; +extern std::unique_ptr config; + +Startup::Startup(int mode, std::string file) { + this->mode = mode; this->file = file; +} + +void Startup::Draw(void) const { + GFX::DrawTop(); + GFX::DrawSprite(sprites_dev_by_idx, 0, 25); + if (fadealpha > 0) Gui::Draw_Rect(0, 0, 400, 240, C2D_Color32(fadecolor, fadecolor, fadecolor, fadealpha)); // Fade in/out effect + GFX::DrawBottom(); + if (fadealpha > 0) Gui::Draw_Rect(0, 0, 320, 240, C2D_Color32(fadecolor, fadecolor, fadecolor, fadealpha)); // Fade in/out effect +} + +void Startup::Logic(u32 hDown, u32 hHeld, touchPosition touch) { + if (this->delay > 0) { + this->delay -= 2; + if (this->delay <= 0) { + if (this->mode == 0) { + config->firstStartup(false); + Gui::setScreen(std::make_unique(), true, true); + } else if (this->mode == 1) { + config->firstStartup(false); + if (access(this->file.c_str(), F_OK) == 0) { + Gui::setScreen(std::make_unique(true, this->file), true, true); + } else { + Gui::setScreen(std::make_unique(), true, true); + } + } else if (this->mode == 2) { + config->firstStartup(false); + if (access(this->file.c_str(), F_OK) == 0) { + Gui::setScreen(std::make_unique(), true, true); + } else { + Gui::setScreen(std::make_unique(), true, true); + } + } + } + } +} \ No newline at end of file diff --git a/source/utils/config.cpp b/source/utils/config.cpp index dc27d94..b45cb38 100644 --- a/source/utils/config.cpp +++ b/source/utils/config.cpp @@ -61,6 +61,7 @@ void Config::initialize() { this->setBool("SCREEN_FADE", false); this->setBool("PROGRESS_DISPLAY", true); this->setString("LANGUAGE", "en"); + this->setBool("FIRST_STARTUP", true); // Write to file. fwrite(this->json.dump(1, '\t').c_str(), 1, this->json.dump(1, '\t').size(), file); @@ -165,7 +166,7 @@ Config::Config() { if (!this->json.contains("AUTOBOOT")) { this->autoboot(0); } else { - this->viewMode(this->getInt("AUTOBOOT")); + this->autoboot(this->getInt("AUTOBOOT")); } if (!this->json.contains("STOREPATH")) { @@ -228,6 +229,12 @@ Config::Config() { this->language(this->getString("LANGUAGE")); } + if (!this->json.contains("FIRST_STARTUP")) { + this->firstStartup(true); + } else { + this->firstStartup(this->getBool("FIRST_STARTUP")); + } + this->changesMade = false; // No changes made yet. } @@ -261,6 +268,7 @@ void Config::save() { this->setBool("SCREEN_FADE", this->screenFade()); this->setBool("PROGRESS_DISPLAY", this->progressDisplay()); this->setString("LANGUAGE", this->language()); + this->setBool("FIRST_STARTUP", this->firstStartup()); // Write changes to file. fwrite(this->json.dump(1, '\t').c_str(), 1, this->json.dump(1, '\t').size(), file); fclose(file);