From 3f534da2c5308b559b2364711cb4373baef42359 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Tue, 7 Feb 2023 23:36:15 -0600 Subject: [PATCH] feat(glue): display login status in ui --- src/glue/CGlueMgr.cpp | 63 +++++++++++++++++++++++++++++++++++++++++-- src/glue/CGlueMgr.hpp | 1 + 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/src/glue/CGlueMgr.cpp b/src/glue/CGlueMgr.cpp index 1739730..32019ef 100644 --- a/src/glue/CGlueMgr.cpp +++ b/src/glue/CGlueMgr.cpp @@ -76,6 +76,66 @@ float CalculateAspectRatio() { return static_cast(width) / static_cast(height); } +void CGlueMgr::DisplayLoginStatus() { + // No change + if (CGlueMgr::m_lastLoginState == CGlueMgr::m_loginState && CGlueMgr::m_lastLoginResult == CGlueMgr::m_loginResult) { + return; + } + + CGlueMgr::m_lastLoginState = CGlueMgr::m_loginState; + CGlueMgr::m_lastLoginResult = CGlueMgr::m_loginResult; + + // Authentication failure + if (CGlueMgr::m_loginState == LOGIN_STATE_FAILED) { + // Unknown result + if (CGlueMgr::m_loginResult >= LOGIN_RESULT_MAX) { + return; + } + + // Parental control + if (CGlueMgr::m_loginResult == LOGIN_PARENTALCONTROL) { + auto resultStr = Grunt::g_LoginResultStringNames[LOGIN_PARENTALCONTROL]; + auto resultText = FrameScript_GetText(resultStr, -1, GENDER_NOT_APPLICABLE); + FrameScript_SignalEvent(3, "%s%s%s", "PARENTAL_CONTROL", resultText, "AUTH_PARENTAL_CONTROL_URL"); + + return; + } + + // Other failures + auto resultStr = Grunt::g_LoginResultStringNames[CGlueMgr::m_loginResult]; + auto resultText = FrameScript_GetText(resultStr, -1, GENDER_NOT_APPLICABLE); + + const char* buttonText; + if (false /* TODO SStrStrUTF8I(resultText, "") */) { + buttonText = CGlueMgr::m_loginResult == LOGIN_FAILED + ? "CONNECTION_HELP_HTML" + : "OKAY_HTML"; + } else { + buttonText = CGlueMgr::m_loginResult == LOGIN_FAILED + ? "CONNECTION_HELP" + : "OKAY"; + } + + FrameScript_SignalEvent(3, "%s%s", buttonText, resultText); + + return; + } + + // Authentication in progress or success + if (CGlueMgr::m_loginState != LOGIN_STATE_DISCONNECTED && CGlueMgr::m_loginState != LOGIN_STATE_SURVEY) { + auto v3 = CGlueMgr::m_loginState < LOGIN_STATE_MAX; + if (CGlueMgr::m_loginState == LOGIN_STATE_MATRIX || CGlueMgr::m_loginState == LOGIN_STATE_MATRIX_WAIT) { + v3 = false; + } + + if (CGlueMgr::m_loginState != LOGIN_STATE_TOKEN && CGlueMgr::m_loginState != LOGIN_STATE_TOKEN_WAIT && v3) { + auto stateStr = Grunt::g_LoginStateStringNames[CGlueMgr::m_loginState]; + auto stateText = FrameScript_GetText(stateStr, -1, GENDER_NOT_APPLICABLE); + FrameScript_SignalEvent(3, "%s%s", "CANCEL", stateText); + } + } +} + int32_t CGlueMgr::HandleDisplaySizeChanged(const CSizeEvent& event) { if ( CGlueMgr::m_screenWidth > 0 @@ -246,8 +306,7 @@ void CGlueMgr::QuitGame() { void CGlueMgr::PollLoginServerLogin() { if (CGlueMgr::m_loginState != LOGIN_STATE_PIN_WAIT) { - // TODO - // CGlueMgr::DisplayLoginStatus(); + CGlueMgr::DisplayLoginStatus(); } // Open new client connection after successful authentication diff --git a/src/glue/CGlueMgr.hpp b/src/glue/CGlueMgr.hpp index 4bbca61..294ebd7 100644 --- a/src/glue/CGlueMgr.hpp +++ b/src/glue/CGlueMgr.hpp @@ -52,6 +52,7 @@ class CGlueMgr { static int32_t m_suspended; // Static functions + static void DisplayLoginStatus(); // TODO a1: const EVENT_DATA_IDLE* static int32_t HandleDisplaySizeChanged(const CSizeEvent& event); static int32_t Idle(const void* a1, void* a2);