mirror of
https://github.com/hedge-dev/UnleashedRecomp.git
synced 2026-04-27 04:41:39 +00:00
options_menu: reboot on language change
This commit is contained in:
parent
1713a8c0ec
commit
f327eb8357
7 changed files with 53 additions and 14 deletions
|
|
@ -5,11 +5,14 @@
|
||||||
#include <patches/audio_patches.h>
|
#include <patches/audio_patches.h>
|
||||||
#include <os/process.h>
|
#include <os/process.h>
|
||||||
|
|
||||||
void App::Exit(std::vector<std::string> restartArgs)
|
void App::Restart(std::vector<std::string> restartArgs)
|
||||||
{
|
{
|
||||||
if (restartArgs.size())
|
os::process::StartProcess(os::process::GetExecutablePath(), restartArgs, os::process::GetWorkingDirectory());
|
||||||
os::process::StartProcess(os::process::GetExecutablePath(), restartArgs, os::process::GetWorkingDirectory());
|
Exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
void App::Exit()
|
||||||
|
{
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
ExitProcess(0);
|
ExitProcess(0);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -21,6 +24,7 @@ PPC_FUNC(sub_824EB490)
|
||||||
{
|
{
|
||||||
App::s_isInit = true;
|
App::s_isInit = true;
|
||||||
App::s_isMissingDLC = !Installer::checkAllDLC(GetGamePath());
|
App::s_isMissingDLC = !Installer::checkAllDLC(GetGamePath());
|
||||||
|
App::s_language = Config::Language;
|
||||||
|
|
||||||
__imp__sub_824EB490(ctx, base);
|
__imp__sub_824EB490(ctx, base);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,17 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <user/config_detail.h>
|
||||||
|
|
||||||
class App
|
class App
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
inline static bool s_isInit;
|
inline static bool s_isInit;
|
||||||
inline static bool s_isMissingDLC;
|
inline static bool s_isMissingDLC;
|
||||||
|
|
||||||
|
inline static ELanguage s_language;
|
||||||
|
|
||||||
inline static double s_deltaTime;
|
inline static double s_deltaTime;
|
||||||
|
|
||||||
static void Exit(std::vector<std::string> restartArgs = {});
|
static void Restart(std::vector<std::string> restartArgs = {});
|
||||||
|
static void Exit();
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,12 @@ inline static std::unordered_map<std::string, std::unordered_map<ELanguage, std:
|
||||||
{ ELanguage::English, "This option is not supported by your operating system." }
|
{ ELanguage::English, "This option is not supported by your operating system." }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"Options_Message_Restart",
|
||||||
|
{
|
||||||
|
{ ELanguage::English, "The game will now restart." }
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"Achievements_Name",
|
"Achievements_Name",
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#include <cpu/guest_code.h>
|
#include <cpu/guest_code.h>
|
||||||
#include <api/SWA.h>
|
#include <api/SWA.h>
|
||||||
#include <locale/locale.h>
|
#include <locale/locale.h>
|
||||||
|
#include <ui/button_guide.h>
|
||||||
#include <ui/fader.h>
|
#include <ui/fader.h>
|
||||||
#include <ui/message_window.h>
|
#include <ui/message_window.h>
|
||||||
#include <ui/options_menu.h>
|
#include <ui/options_menu.h>
|
||||||
|
|
@ -31,7 +32,7 @@ static bool ProcessInstallMessage()
|
||||||
switch (g_installMessageResult)
|
switch (g_installMessageResult)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
Fader::FadeOut(1, []() { App::Exit({ "--install-dlc" }); });
|
Fader::FadeOut(1, []() { App::Restart({ "--install-dlc" }); });
|
||||||
g_installMessageFaderBegun = true;
|
g_installMessageFaderBegun = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -58,7 +59,14 @@ PPC_FUNC(sub_825882B8)
|
||||||
|
|
||||||
if (!OptionsMenu::s_isVisible && isOptionsIndex)
|
if (!OptionsMenu::s_isVisible && isOptionsIndex)
|
||||||
{
|
{
|
||||||
if (isAccepted)
|
if (OptionsMenu::s_isRestartRequired)
|
||||||
|
{
|
||||||
|
static int result = -1;
|
||||||
|
|
||||||
|
if (MessageWindow::Open(Localise("Options_Message_Restart"), &result) == MSG_CLOSED)
|
||||||
|
Fader::FadeOut(1, []() { App::Restart(); });
|
||||||
|
}
|
||||||
|
else if (isAccepted)
|
||||||
{
|
{
|
||||||
Game_PlaySound("sys_worldmap_window");
|
Game_PlaySound("sys_worldmap_window");
|
||||||
Game_PlaySound("sys_worldmap_decide");
|
Game_PlaySound("sys_worldmap_decide");
|
||||||
|
|
@ -71,7 +79,7 @@ PPC_FUNC(sub_825882B8)
|
||||||
g_installMessageOpen = true;
|
g_installMessageOpen = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!OptionsMenu::s_isVisible && !ProcessInstallMessage())
|
if (!OptionsMenu::s_isVisible && !OptionsMenu::s_isRestartRequired && !ProcessInstallMessage())
|
||||||
__imp__sub_825882B8(ctx, base);
|
__imp__sub_825882B8(ctx, base);
|
||||||
|
|
||||||
if (isOptionsIndex)
|
if (isOptionsIndex)
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
#include "imgui_utils.h"
|
#include "imgui_utils.h"
|
||||||
#include <user/config.h>
|
#include <user/config.h>
|
||||||
|
|
||||||
|
static bool g_isFading;
|
||||||
static bool g_isFadeIn;
|
static bool g_isFadeIn;
|
||||||
|
|
||||||
static float g_startTime;
|
static float g_startTime;
|
||||||
|
|
@ -21,8 +22,13 @@ void Fader::Draw()
|
||||||
|
|
||||||
if (time >= g_duration)
|
if (time >= g_duration)
|
||||||
{
|
{
|
||||||
if (g_endCallback && time >= g_duration + g_endCallbackDelay)
|
if (time >= g_duration + g_endCallbackDelay)
|
||||||
g_endCallback();
|
{
|
||||||
|
if (g_endCallback)
|
||||||
|
g_endCallback();
|
||||||
|
|
||||||
|
g_isFading = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -36,9 +42,14 @@ void Fader::Draw()
|
||||||
ImGui::GetForegroundDrawList()->AddRectFilled({ 0, 0 }, ImGui::GetIO().DisplaySize, colour);
|
ImGui::GetForegroundDrawList()->AddRectFilled({ 0, 0 }, ImGui::GetIO().DisplaySize, colour);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DoFade(float duration, std::function<void()> endCallback, float endCallbackDelay)
|
static void DoFade(bool isFadeIn, float duration, std::function<void()> endCallback, float endCallbackDelay)
|
||||||
{
|
{
|
||||||
|
if (g_isFading)
|
||||||
|
return;
|
||||||
|
|
||||||
Fader::s_isVisible = true;
|
Fader::s_isVisible = true;
|
||||||
|
g_isFading = true;
|
||||||
|
g_isFadeIn = isFadeIn;
|
||||||
g_startTime = ImGui::GetTime();
|
g_startTime = ImGui::GetTime();
|
||||||
g_duration = duration;
|
g_duration = duration;
|
||||||
g_endCallback = endCallback;
|
g_endCallback = endCallback;
|
||||||
|
|
@ -52,12 +63,10 @@ void Fader::SetFadeColour(ImU32 colour)
|
||||||
|
|
||||||
void Fader::FadeIn(float duration, std::function<void()> endCallback, float endCallbackDelay)
|
void Fader::FadeIn(float duration, std::function<void()> endCallback, float endCallbackDelay)
|
||||||
{
|
{
|
||||||
g_isFadeIn = true;
|
DoFade(true, duration, endCallback, endCallbackDelay);
|
||||||
DoFade(duration, endCallback, endCallbackDelay);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Fader::FadeOut(float duration, std::function<void()> endCallback, float endCallbackDelay)
|
void Fader::FadeOut(float duration, std::function<void()> endCallback, float endCallbackDelay)
|
||||||
{
|
{
|
||||||
g_isFadeIn = false;
|
DoFade(false, duration, endCallback, endCallbackDelay);
|
||||||
DoFade(duration, endCallback, endCallbackDelay);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@
|
||||||
#include <kernel/memory.h>
|
#include <kernel/memory.h>
|
||||||
#include <locale/locale.h>
|
#include <locale/locale.h>
|
||||||
#include <ui/button_guide.h>
|
#include <ui/button_guide.h>
|
||||||
|
#include <app.h>
|
||||||
|
|
||||||
#include <patches/audio_patches.h>
|
#include <patches/audio_patches.h>
|
||||||
|
|
||||||
|
|
@ -66,6 +67,7 @@ static std::string* g_inaccessibleReason;
|
||||||
|
|
||||||
static bool g_isEnterKeyBuffered = false;
|
static bool g_isEnterKeyBuffered = false;
|
||||||
static bool g_canReset = false;
|
static bool g_canReset = false;
|
||||||
|
static bool g_isLanguageOptionChanged = false;
|
||||||
|
|
||||||
static double g_appearTime = 0.0;
|
static double g_appearTime = 0.0;
|
||||||
|
|
||||||
|
|
@ -475,6 +477,7 @@ static void DrawConfigOption(int32_t rowIndex, float yOffset, ConfigDef<T>* conf
|
||||||
{
|
{
|
||||||
g_leftWasHeld = false;
|
g_leftWasHeld = false;
|
||||||
g_rightWasHeld = false;
|
g_rightWasHeld = false;
|
||||||
|
|
||||||
// remember value
|
// remember value
|
||||||
s_oldValue = config->Value;
|
s_oldValue = config->Value;
|
||||||
|
|
||||||
|
|
@ -493,6 +496,7 @@ static void DrawConfigOption(int32_t rowIndex, float yOffset, ConfigDef<T>* conf
|
||||||
{
|
{
|
||||||
// released lock, restore old value
|
// released lock, restore old value
|
||||||
config->Value = s_oldValue;
|
config->Value = s_oldValue;
|
||||||
|
|
||||||
g_lockedOnOption = false;
|
g_lockedOnOption = false;
|
||||||
|
|
||||||
Game_PlaySound("sys_worldmap_cansel");
|
Game_PlaySound("sys_worldmap_cansel");
|
||||||
|
|
@ -1012,6 +1016,8 @@ void OptionsMenu::Draw()
|
||||||
DrawScanlineBars();
|
DrawScanlineBars();
|
||||||
DrawSettingsPanel();
|
DrawSettingsPanel();
|
||||||
DrawInfoPanel();
|
DrawInfoPanel();
|
||||||
|
|
||||||
|
s_isRestartRequired = Config::Language != App::s_language;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsMenu::Open(bool isPause, SWA::EMenuType pauseMenuType)
|
void OptionsMenu::Open(bool isPause, SWA::EMenuType pauseMenuType)
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ class OptionsMenu
|
||||||
public:
|
public:
|
||||||
inline static bool s_isVisible = false;
|
inline static bool s_isVisible = false;
|
||||||
inline static bool s_isPause = false;
|
inline static bool s_isPause = false;
|
||||||
|
inline static bool s_isRestartRequired = false;
|
||||||
|
|
||||||
inline static SWA::EMenuType s_pauseMenuType;
|
inline static SWA::EMenuType s_pauseMenuType;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue