mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-11-13 01:29:41 +01:00
Merge pull request #17691 from hrydgard/more-achievement-fixes
More achievement fixes
This commit is contained in:
5 files changed
+65
-21
No files matched your search
@@ -235,3 +235,32 @@ void OnScreenDisplay::RemoveProgressBar(std::string id) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fades out everything related to achievements. Should be used on game shutdown.
|
||||
void OnScreenDisplay::ClearAchievementStuff() {
|
||||
double now = time_now_d();
|
||||
for (auto &iter : entries_) {
|
||||
switch (iter.type) {
|
||||
case OSDType::ACHIEVEMENT_CHALLENGE_INDICATOR:
|
||||
case OSDType::ACHIEVEMENT_UNLOCKED:
|
||||
case OSDType::ACHIEVEMENT_PROGRESS:
|
||||
case OSDType::LEADERBOARD_TRACKER:
|
||||
iter.endTime = now;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (auto &iter : sideEntries_) {
|
||||
switch (iter.type) {
|
||||
case OSDType::ACHIEVEMENT_CHALLENGE_INDICATOR:
|
||||
case OSDType::ACHIEVEMENT_UNLOCKED:
|
||||
case OSDType::ACHIEVEMENT_PROGRESS:
|
||||
case OSDType::LEADERBOARD_TRACKER:
|
||||
iter.endTime = now;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -57,6 +57,9 @@ public:
|
||||
void SetShowSidebar(bool show) { showSidebar_ = show; }
|
||||
bool ShowSidebar() const { return showSidebar_; }
|
||||
|
||||
// Fades out everything related to achievements. Should be used on game shutdown.
|
||||
void ClearAchievementStuff();
|
||||
|
||||
struct Entry {
|
||||
OSDType type;
|
||||
std::string text;
|
||||
|
||||
@@ -121,7 +121,7 @@ bool ChallengeModeActive() {
|
||||
if (!g_rcClient) {
|
||||
return false;
|
||||
}
|
||||
return rc_client_get_hardcore_enabled(g_rcClient);
|
||||
return IsLoggedIn() && rc_client_get_hardcore_enabled(g_rcClient);
|
||||
}
|
||||
|
||||
bool WarnUserIfChallengeModeActive(const char *message) {
|
||||
@@ -355,9 +355,14 @@ void Initialize() {
|
||||
INFO_LOG(ACHIEVEMENTS, "Achievements are disabled, not initializing.");
|
||||
return;
|
||||
}
|
||||
_assert_msg_(g_Config.bAchievementsEnable, "Achievements are enabled");
|
||||
_assert_msg_(!g_rcClient, "Achievements already initialized");
|
||||
|
||||
g_rcClient = rc_client_create(read_memory_callback, server_call_callback);
|
||||
if (!g_rcClient) {
|
||||
// Shouldn't happen really.
|
||||
return;
|
||||
}
|
||||
|
||||
// Provide a logging function to simplify debugging
|
||||
rc_client_enable_logging(g_rcClient, RC_CLIENT_LOG_LEVEL_VERBOSE, log_message_callback);
|
||||
|
||||
@@ -370,6 +375,8 @@ void Initialize() {
|
||||
if (!api_token.empty()) {
|
||||
rc_client_begin_login_with_token(g_rcClient, g_Config.sAchievementsUserName.c_str(), api_token.c_str(), &login_token_callback, nullptr);
|
||||
}
|
||||
|
||||
INFO_LOG(ACHIEVEMENTS, "Achievements initialized.");
|
||||
}
|
||||
|
||||
static void login_password_callback(int result, const char *error_message, rc_client_t *client, void *userdata) {
|
||||
@@ -411,16 +418,18 @@ void Logout() {
|
||||
NativeSaveSecret(RA_TOKEN_SECRET_NAME, "");
|
||||
g_Config.Save("Achievements logout");
|
||||
g_activeChallenges.clear();
|
||||
|
||||
OnAchievementsLoginStateChange();
|
||||
}
|
||||
|
||||
void UpdateSettings() {
|
||||
if (!g_Config.bAchievementsEnable) {
|
||||
if (g_rcClient && !g_Config.bAchievementsEnable) {
|
||||
// we're done here
|
||||
Shutdown();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!g_rcClient) {
|
||||
if (!g_rcClient && g_Config.bAchievementsEnable) {
|
||||
// we just got enabled.
|
||||
Initialize();
|
||||
}
|
||||
@@ -430,6 +439,7 @@ bool Shutdown() {
|
||||
g_activeChallenges.clear();
|
||||
rc_client_destroy(g_rcClient);
|
||||
g_rcClient = nullptr;
|
||||
INFO_LOG(ACHIEVEMENTS, "Achievements shut down.");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -404,11 +404,12 @@ void EmuScreen::bootComplete() {
|
||||
}
|
||||
|
||||
EmuScreen::~EmuScreen() {
|
||||
// If we were invalid, it would already be shutdown.
|
||||
Achievements::UnloadGame();
|
||||
if (!invalid_ || bootPending_) {
|
||||
// If we were invalid, it would already be shutdown.
|
||||
Achievements::UnloadGame();
|
||||
PSP_Shutdown();
|
||||
}
|
||||
g_OSD.ClearAchievementStuff();
|
||||
|
||||
SetExtraAssertInfo(nullptr);
|
||||
|
||||
|
||||
+16
-15
@@ -2,6 +2,7 @@
|
||||
#include "Common/CommonWindows.h"
|
||||
#include "Windows/InputBox.h"
|
||||
#include "Windows/resource.h"
|
||||
#include "Windows/W32Util/Misc.h"
|
||||
#include "Common/Data/Encoding/Utf8.h"
|
||||
|
||||
static std::wstring textBoxContents;
|
||||
@@ -18,34 +19,31 @@ static INT_PTR CALLBACK InputBoxFunc(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||
case WM_INITDIALOG:
|
||||
SetWindowText(GetDlgItem(hDlg, IDC_INPUTBOX), textBoxContents.c_str());
|
||||
SetWindowText(hDlg, windowTitle.c_str());
|
||||
if (defaultSelected == false) PostMessage(GetDlgItem(hDlg,IDC_INPUTBOX),EM_SETSEL,-1,-1);
|
||||
if (defaultSelected == false)
|
||||
PostMessage(GetDlgItem(hDlg,IDC_INPUTBOX),EM_SETSEL,-1,-1);
|
||||
W32Util::CenterWindow(hDlg);
|
||||
return TRUE;
|
||||
case WM_COMMAND:
|
||||
switch (wParam)
|
||||
{
|
||||
switch (wParam) {
|
||||
case IDOK:
|
||||
{
|
||||
wchar_t temp[256];
|
||||
GetWindowText(GetDlgItem(hDlg, IDC_INPUTBOX), temp, 255);
|
||||
wchar_t temp[512];
|
||||
GetWindowText(GetDlgItem(hDlg, IDC_INPUTBOX), temp, ARRAY_SIZE(temp) - 1);
|
||||
out = temp;
|
||||
EndDialog(hDlg, IDOK);
|
||||
return TRUE;
|
||||
}
|
||||
EndDialog(hDlg, IDOK);
|
||||
return TRUE;
|
||||
case IDCANCEL:
|
||||
EndDialog(hDlg, IDCANCEL);
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
template <bool hex>
|
||||
void InputBoxFunc()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool InputBox_GetString(HINSTANCE hInst, HWND hParent, const wchar_t *title, const std::string &defaultValue, std::string &outvalue, bool selected)
|
||||
{
|
||||
defaultSelected = selected;
|
||||
@@ -151,6 +149,7 @@ static INT_PTR CALLBACK UserPasswordBoxFunc(HWND hDlg, UINT message, WPARAM wPar
|
||||
SetWindowText(hDlg, windowTitle.c_str());
|
||||
PostMessage(GetDlgItem(hDlg, IDC_INPUTBOX), EM_SETSEL, -1, -1);
|
||||
PostMessage(GetDlgItem(hDlg, IDC_PASSWORDBOX), EM_SETSEL, -1, -1);
|
||||
W32Util::CenterWindow(hDlg);
|
||||
return TRUE;
|
||||
case WM_COMMAND:
|
||||
switch (wParam)
|
||||
@@ -162,12 +161,14 @@ static INT_PTR CALLBACK UserPasswordBoxFunc(HWND hDlg, UINT message, WPARAM wPar
|
||||
g_userName = ConvertWStringToUTF8(temp);
|
||||
GetWindowText(GetDlgItem(hDlg, IDC_PASSWORDBOX), temp, 255);
|
||||
g_passWord = ConvertWStringToUTF8(temp);
|
||||
EndDialog(hDlg, IDOK);
|
||||
return TRUE;
|
||||
}
|
||||
EndDialog(hDlg, IDOK);
|
||||
return TRUE;
|
||||
case IDCANCEL:
|
||||
EndDialog(hDlg, IDCANCEL);
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
default:
|
||||
return FALSE;
|
||||
|
||||
Reference in new issue
Block a user