mirror of
https://github.com/stenzek/duckstation.git
synced 2025-06-07 20:15:32 +00:00
Achievements: Display notification on subset complete
This commit is contained in:
parent
6165b504b8
commit
8e73b1db7e
@ -167,6 +167,7 @@ static void ClientEventHandler(const rc_client_event_t* event, rc_client_t* clie
|
|||||||
static void HandleResetEvent(const rc_client_event_t* event);
|
static void HandleResetEvent(const rc_client_event_t* event);
|
||||||
static void HandleUnlockEvent(const rc_client_event_t* event);
|
static void HandleUnlockEvent(const rc_client_event_t* event);
|
||||||
static void HandleGameCompleteEvent(const rc_client_event_t* event);
|
static void HandleGameCompleteEvent(const rc_client_event_t* event);
|
||||||
|
static void HandleSubsetCompleteEvent(const rc_client_event_t* event);
|
||||||
static void HandleLeaderboardStartedEvent(const rc_client_event_t* event);
|
static void HandleLeaderboardStartedEvent(const rc_client_event_t* event);
|
||||||
static void HandleLeaderboardFailedEvent(const rc_client_event_t* event);
|
static void HandleLeaderboardFailedEvent(const rc_client_event_t* event);
|
||||||
static void HandleLeaderboardSubmittedEvent(const rc_client_event_t* event);
|
static void HandleLeaderboardSubmittedEvent(const rc_client_event_t* event);
|
||||||
@ -959,6 +960,10 @@ void Achievements::ClientEventHandler(const rc_client_event_t* event, rc_client_
|
|||||||
HandleGameCompleteEvent(event);
|
HandleGameCompleteEvent(event);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case RC_CLIENT_EVENT_SUBSET_COMPLETED:
|
||||||
|
HandleSubsetCompleteEvent(event);
|
||||||
|
break;
|
||||||
|
|
||||||
case RC_CLIENT_EVENT_LEADERBOARD_STARTED:
|
case RC_CLIENT_EVENT_LEADERBOARD_STARTED:
|
||||||
HandleLeaderboardStartedEvent(event);
|
HandleLeaderboardStartedEvent(event);
|
||||||
break;
|
break;
|
||||||
@ -1530,15 +1535,14 @@ void Achievements::HandleGameCompleteEvent(const rc_client_event_t* event)
|
|||||||
|
|
||||||
if (g_settings.achievements_notifications)
|
if (g_settings.achievements_notifications)
|
||||||
{
|
{
|
||||||
std::string title = fmt::format(TRANSLATE_FS("Achievements", "Mastered {}"), s_state.game_title);
|
|
||||||
std::string message = fmt::format(
|
std::string message = fmt::format(
|
||||||
TRANSLATE_FS("Achievements", "{0}, {1}"),
|
TRANSLATE_FS("Achievements", "Game complete.\n{0}, {1}."),
|
||||||
TRANSLATE_PLURAL_STR("Achievements", "%n achievements", "Mastery popup",
|
TRANSLATE_PLURAL_STR("Achievements", "%n achievements", "Mastery popup",
|
||||||
s_state.game_summary.num_unlocked_achievements),
|
s_state.game_summary.num_unlocked_achievements),
|
||||||
TRANSLATE_PLURAL_STR("Achievements", "%n points", "Achievement points", s_state.game_summary.points_unlocked));
|
TRANSLATE_PLURAL_STR("Achievements", "%n points", "Achievement points", s_state.game_summary.points_unlocked));
|
||||||
|
|
||||||
GPUThread::RunOnThread(
|
GPUThread::RunOnThread(
|
||||||
[title = std::move(title), message = std::move(message), icon = s_state.game_icon]() mutable {
|
[title = s_state.game_title, message = std::move(message), icon = s_state.game_icon]() mutable {
|
||||||
if (!FullscreenUI::Initialize())
|
if (!FullscreenUI::Initialize())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1548,6 +1552,40 @@ void Achievements::HandleGameCompleteEvent(const rc_client_event_t* event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Achievements::HandleSubsetCompleteEvent(const rc_client_event_t* event)
|
||||||
|
{
|
||||||
|
INFO_LOG("Subset {} ({}) complete", event->subset->title, event->subset->id);
|
||||||
|
UpdateGameSummary(false, false);
|
||||||
|
|
||||||
|
if (g_settings.achievements_notifications)
|
||||||
|
{
|
||||||
|
// Need to grab the icon for the subset.
|
||||||
|
std::string badge_path;
|
||||||
|
if (const std::string_view badge_url = event->subset->badge_url; !badge_url.empty())
|
||||||
|
{
|
||||||
|
badge_path = GetLocalImagePath(event->subset->badge_name, RC_IMAGE_TYPE_GAME);
|
||||||
|
if (!badge_path.empty() && !FileSystem::FileExists(badge_path.c_str()))
|
||||||
|
DownloadImage(std::string(badge_url), badge_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string title = event->subset->title;
|
||||||
|
std::string message = fmt::format(
|
||||||
|
TRANSLATE_FS("Achievements", "Subset complete.\n{0}, {1}."),
|
||||||
|
TRANSLATE_PLURAL_STR("Achievements", "%n achievements", "Mastery popup",
|
||||||
|
s_state.game_summary.num_unlocked_achievements),
|
||||||
|
TRANSLATE_PLURAL_STR("Achievements", "%n points", "Achievement points", s_state.game_summary.points_unlocked));
|
||||||
|
|
||||||
|
GPUThread::RunOnThread(
|
||||||
|
[title = std::move(title), message = std::move(message), badge_path = std::move(badge_path)]() mutable {
|
||||||
|
if (!FullscreenUI::Initialize())
|
||||||
|
return;
|
||||||
|
|
||||||
|
ImGuiFullscreen::AddNotification("achievement_mastery", GAME_COMPLETE_NOTIFICATION_TIME, std::move(title),
|
||||||
|
std::move(message), std::move(badge_path));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Achievements::HandleLeaderboardStartedEvent(const rc_client_event_t* event)
|
void Achievements::HandleLeaderboardStartedEvent(const rc_client_event_t* event)
|
||||||
{
|
{
|
||||||
DEV_LOG("Leaderboard {} ({}) started", event->leaderboard->id, event->leaderboard->title);
|
DEV_LOG("Leaderboard {} ({}) started", event->leaderboard->id, event->leaderboard->title);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user