From 1e9e0cd2d7cf1e28fcbc038e3d26a02ece549ec0 Mon Sep 17 00:00:00 2001 From: LillyJadeKatrin Date: Mon, 13 May 2024 19:21:55 -0400 Subject: [PATCH] Remove names from badge objects The names attached to the BadgeStatus object are obsolete and unneeded and are removed from everything that uses them. All BadgeStatus references are updated to just Badge. --- Source/Core/Core/AchievementManager.cpp | 47 +++++++++--------- Source/Core/Core/AchievementManager.h | 22 +++------ .../DolphinQt/Achievements/AchievementBox.cpp | 19 ++----- .../Achievements/AchievementHeaderWidget.cpp | 49 ++++++++----------- 4 files changed, 58 insertions(+), 79 deletions(-) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index dec365b290..360a332eb0 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -280,7 +280,7 @@ u32 AchievementManager::GetPlayerScore() const return user->score; } -const AchievementManager::BadgeStatus& AchievementManager::GetPlayerBadge() const +const AchievementManager::Badge& AchievementManager::GetPlayerBadge() const { return m_player_badge; } @@ -300,17 +300,19 @@ rc_api_fetch_game_data_response_t* AchievementManager::GetGameData() return &m_game_data; } -const AchievementManager::BadgeStatus& AchievementManager::GetGameBadge() const +const AchievementManager::Badge& AchievementManager::GetGameBadge() const { return m_game_badge; } -const AchievementManager::BadgeStatus& AchievementManager::GetAchievementBadge(AchievementId id, - bool locked) const +const AchievementManager::Badge& AchievementManager::GetAchievementBadge(AchievementId id, + bool locked) const { auto& badge_list = locked ? m_locked_badges : m_unlocked_badges; - // Brief regression - difficult to return a default BadgeStatus, will be fixed in later commit - return badge_list.find(id)->second; + auto itr = badge_list.find(id); + return (itr != badge_list.end() && itr->second.data.size() > 0) ? + itr->second : + (locked ? m_default_locked_badge : m_default_unlocked_badge); } const AchievementManager::LeaderboardStatus* @@ -395,7 +397,9 @@ void AchievementManager::CloseGame() { m_active_challenges.clear(); m_active_leaderboards.clear(); - m_game_badge.name.clear(); + m_game_badge.width = 0; + m_game_badge.height = 0; + m_game_badge.data.clear(); m_unlocked_badges.clear(); m_locked_badges.clear(); m_leaderboard_map.clear(); @@ -417,7 +421,9 @@ void AchievementManager::Logout() { std::lock_guard lg{m_lock}; CloseGame(); - m_player_badge.name.clear(); + m_player_badge.width = 0; + m_player_badge.height = 0; + m_player_badge.data.clear(); Config::SetBaseOrCurrent(Config::RA_API_TOKEN, ""); } @@ -517,7 +523,7 @@ void AchievementManager::LoadDefaultBadges() DEFAULT_PLAYER_BADGE_FILENAME); } } - m_player_badge.badge = m_default_player_badge; + m_player_badge = m_default_player_badge; if (m_default_game_badge.data.empty()) { @@ -528,7 +534,7 @@ void AchievementManager::LoadDefaultBadges() DEFAULT_GAME_BADGE_FILENAME); } } - m_game_badge.badge = m_default_game_badge; + m_game_badge = m_default_game_badge; if (m_default_unlocked_badge.data.empty()) { @@ -688,10 +694,8 @@ void AchievementManager::DisplayWelcomeMessage() m_display_welcome_message = false; const u32 color = rc_client_get_hardcore_enabled(m_client) ? OSD::Color::YELLOW : OSD::Color::CYAN; - if (!m_game_badge.name.empty()) - { - OSD::AddMessage("", OSD::Duration::VERY_LONG, OSD::Color::GREEN, &m_game_badge.badge); - } + + OSD::AddMessage("", OSD::Duration::VERY_LONG, OSD::Color::GREEN, &m_game_badge); auto info = rc_client_get_game_info(m_client); if (!info) { @@ -727,7 +731,7 @@ void AchievementManager::HandleAchievementTriggeredEvent(const rc_client_event_t OSD::Duration::VERY_LONG, (rc_client_get_hardcore_enabled(instance.m_client)) ? OSD::Color::YELLOW : OSD::Color::CYAN, - &instance.GetAchievementBadge(client_event->achievement->id, false).badge); + &instance.GetAchievementBadge(client_event->achievement->id, false)); } void AchievementManager::HandleLeaderboardStartedEvent(const rc_client_event_t* client_event) @@ -786,9 +790,7 @@ void AchievementManager::HandleAchievementChallengeIndicatorShowEvent( { auto& instance = AchievementManager::GetInstance(); instance.m_active_challenges[client_event->achievement->badge_name] = - &AchievementManager::GetInstance() - .GetAchievementBadge(client_event->achievement->id, false) - .badge; + &AchievementManager::GetInstance().GetAchievementBadge(client_event->achievement->id, false); } void AchievementManager::HandleAchievementChallengeIndicatorHideEvent( @@ -805,7 +807,7 @@ void AchievementManager::HandleAchievementProgressIndicatorShowEvent( OSD::AddMessage(fmt::format("{} {}", client_event->achievement->title, client_event->achievement->measured_progress), OSD::Duration::SHORT, OSD::Color::GREEN, - &instance.GetAchievementBadge(client_event->achievement->id, false).badge); + &instance.GetAchievementBadge(client_event->achievement->id, false)); } void AchievementManager::HandleGameCompletedEvent(const rc_client_event_t* client_event, @@ -822,7 +824,7 @@ void AchievementManager::HandleGameCompletedEvent(const rc_client_event_t* clien OSD::AddMessage(fmt::format("Congratulations! {} has {} {}", user_info->display_name, hardcore ? "mastered" : "completed", game_info->title), OSD::Duration::VERY_LONG, hardcore ? OSD::Color::YELLOW : OSD::Color::CYAN, - &AchievementManager::GetInstance().m_game_badge.badge); + &AchievementManager::GetInstance().m_game_badge); } void AchievementManager::HandleResetEvent(const rc_client_event_t* client_event) @@ -898,7 +900,7 @@ u32 AchievementManager::MemoryPeeker(u32 address, u8* buffer, u32 num_bytes, rc_ return num_bytes; } -void AchievementManager::FetchBadge(AchievementManager::BadgeStatus* badge, u32 badge_type, +void AchievementManager::FetchBadge(AchievementManager::Badge* badge, u32 badge_type, const AchievementManager::BadgeNameFunction function, const UpdatedItems callback_data) { @@ -954,12 +956,11 @@ void AchievementManager::FetchBadge(AchievementManager::BadgeStatus* badge, u32 return; } - if (!LoadPNGTexture(&badge->badge, *http_response)) + if (!LoadPNGTexture(badge, *http_response)) { ERROR_LOG_FMT(ACHIEVEMENTS, "Default game badge '{}' failed to load", DEFAULT_GAME_BADGE_FILENAME); } - badge->name = std::move(name_to_fetch); m_update_callback(callback_data); }); diff --git a/Source/Core/Core/AchievementManager.h b/Source/Core/Core/AchievementManager.h index 17abceeaa8..3fdb5b2591 100644 --- a/Source/Core/Core/AchievementManager.h +++ b/Source/Core/Core/AchievementManager.h @@ -47,12 +47,6 @@ public: using NamedBadgeMap = std::unordered_map; static constexpr size_t MAX_DISPLAYED_LBOARDS = 4; - struct BadgeStatus - { - std::string name = ""; - Badge badge{}; - }; - static constexpr std::string_view DEFAULT_PLAYER_BADGE_FILENAME = "achievements_player.png"; static constexpr std::string_view DEFAULT_GAME_BADGE_FILENAME = "achievements_game.png"; static constexpr std::string_view DEFAULT_LOCKED_BADGE_FILENAME = "achievements_locked.png"; @@ -108,12 +102,12 @@ public: void SetSpectatorMode(); std::string_view GetPlayerDisplayName() const; u32 GetPlayerScore() const; - const BadgeStatus& GetPlayerBadge() const; + const Badge& GetPlayerBadge() const; std::string_view GetGameDisplayName() const; rc_client_t* GetClient(); rc_api_fetch_game_data_response_t* GetGameData(); - const BadgeStatus& GetGameBadge() const; - const BadgeStatus& GetAchievementBadge(AchievementId id, bool locked) const; + const Badge& GetGameBadge() const; + const Badge& GetAchievementBadge(AchievementId id, bool locked) const; const LeaderboardStatus* GetLeaderboardInfo(AchievementId leaderboard_id); RichPresence GetRichPresence() const; const NamedBadgeMap& GetChallengeIcons() const; @@ -176,7 +170,7 @@ private: static void Request(const rc_api_request_t* request, rc_client_server_callback_t callback, void* callback_data, rc_client_t* client); static u32 MemoryPeeker(u32 address, u8* buffer, u32 num_bytes, rc_client_t* client); - void FetchBadge(BadgeStatus* badge, u32 badge_type, const BadgeNameFunction function, + void FetchBadge(Badge* badge, u32 badge_type, const BadgeNameFunction function, const UpdatedItems callback_data); static void EventHandler(const rc_client_event_t* event, rc_client_t* client); @@ -190,15 +184,15 @@ private: Badge m_default_game_badge; Badge m_default_unlocked_badge; Badge m_default_locked_badge; - BadgeStatus m_player_badge; + Badge m_player_badge; Hash m_game_hash{}; u32 m_game_id = 0; rc_api_fetch_game_data_response_t m_game_data{}; bool m_is_game_loaded = false; - BadgeStatus m_game_badge; + Badge m_game_badge; bool m_display_welcome_message = false; - std::unordered_map m_unlocked_badges; - std::unordered_map m_locked_badges; + std::unordered_map m_unlocked_badges; + std::unordered_map m_locked_badges; RichPresence m_rich_presence; std::chrono::steady_clock::time_point m_last_rp_time = std::chrono::steady_clock::now(); diff --git a/Source/Core/DolphinQt/Achievements/AchievementBox.cpp b/Source/Core/DolphinQt/Achievements/AchievementBox.cpp index 8b4bccbf31..4b54851b39 100644 --- a/Source/Core/DolphinQt/Achievements/AchievementBox.cpp +++ b/Source/Core/DolphinQt/Achievements/AchievementBox.cpp @@ -61,20 +61,11 @@ void AchievementBox::UpdateData() color = AchievementManager::GOLD; else if (m_achievement->unlocked & RC_CLIENT_ACHIEVEMENT_UNLOCKED_SOFTCORE) color = AchievementManager::BLUE; - if (badge.name != "") - { - QImage i_badge(&badge.badge.data.front(), badge.badge.width, badge.badge.height, - QImage::Format_RGBA8888); - m_badge->setPixmap( - QPixmap::fromImage(i_badge).scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation)); - m_badge->adjustSize(); - m_badge->setStyleSheet( - QStringLiteral("border: 4px solid %1").arg(QtUtils::FromStdString(color))); - } - else - { - m_badge->setText({}); - } + QImage i_badge(&badge.data.front(), badge.width, badge.height, QImage::Format_RGBA8888); + m_badge->setPixmap( + QPixmap::fromImage(i_badge).scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation)); + m_badge->adjustSize(); + m_badge->setStyleSheet(QStringLiteral("border: 4px solid %1").arg(QtUtils::FromStdString(color))); if (m_achievement->state == RC_CLIENT_ACHIEVEMENT_STATE_UNLOCKED) { diff --git a/Source/Core/DolphinQt/Achievements/AchievementHeaderWidget.cpp b/Source/Core/DolphinQt/Achievements/AchievementHeaderWidget.cpp index ffa0bf35e0..c1976e2752 100644 --- a/Source/Core/DolphinQt/Achievements/AchievementHeaderWidget.cpp +++ b/Source/Core/DolphinQt/Achievements/AchievementHeaderWidget.cpp @@ -68,22 +68,20 @@ void AchievementHeaderWidget::UpdateData() QString user_name = QtUtils::FromStdString(instance.GetPlayerDisplayName()); QString game_name = QtUtils::FromStdString(instance.GetGameDisplayName()); - AchievementManager::BadgeStatus player_badge = instance.GetPlayerBadge(); - AchievementManager::BadgeStatus game_badge = instance.GetGameBadge(); + const AchievementManager::Badge& player_badge = instance.GetPlayerBadge(); + const AchievementManager::Badge& game_badge = instance.GetGameBadge(); m_user_icon->setVisible(false); m_user_icon->clear(); m_user_icon->setText({}); - if (!player_badge.name.empty()) - { - QImage i_user_icon(&player_badge.badge.data.front(), player_badge.badge.width, - player_badge.badge.height, QImage::Format_RGBA8888); - m_user_icon->setPixmap(QPixmap::fromImage(i_user_icon) - .scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation)); - m_user_icon->adjustSize(); - m_user_icon->setStyleSheet(QStringLiteral("border: 4px solid transparent")); - m_user_icon->setVisible(true); - } + QImage i_user_icon(&player_badge.data.front(), player_badge.width, player_badge.height, + QImage::Format_RGBA8888); + m_user_icon->setPixmap(QPixmap::fromImage(i_user_icon) + .scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation)); + m_user_icon->adjustSize(); + m_user_icon->setStyleSheet(QStringLiteral("border: 4px solid transparent")); + m_user_icon->setVisible(true); + m_game_icon->setVisible(false); m_game_icon->clear(); m_game_icon->setText({}); @@ -92,24 +90,19 @@ void AchievementHeaderWidget::UpdateData() { rc_client_user_game_summary_t game_summary; rc_client_get_user_game_summary(instance.GetClient(), &game_summary); - - if (!game_badge.name.empty()) + QImage i_game_icon(&game_badge.data.front(), game_badge.width, game_badge.height, + QImage::Format_RGBA8888); + m_game_icon->setPixmap(QPixmap::fromImage(i_game_icon) + .scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation)); + m_game_icon->adjustSize(); + std::string_view color = AchievementManager::GRAY; + if (game_summary.num_core_achievements == game_summary.num_unlocked_achievements) { - QImage i_game_icon(&game_badge.badge.data.front(), game_badge.badge.width, - game_badge.badge.height, QImage::Format_RGBA8888); - m_game_icon->setPixmap(QPixmap::fromImage(i_game_icon) - .scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation)); - m_game_icon->adjustSize(); - std::string_view color = AchievementManager::GRAY; - if (game_summary.num_core_achievements == game_summary.num_unlocked_achievements) - { - color = - instance.IsHardcoreModeActive() ? AchievementManager::GOLD : AchievementManager::BLUE; - } - m_game_icon->setStyleSheet( - QStringLiteral("border: 4px solid %1").arg(QtUtils::FromStdString(color))); - m_game_icon->setVisible(true); + color = instance.IsHardcoreModeActive() ? AchievementManager::GOLD : AchievementManager::BLUE; } + m_game_icon->setStyleSheet( + QStringLiteral("border: 4px solid %1").arg(QtUtils::FromStdString(color))); + m_game_icon->setVisible(true); m_name->setText(tr("%1 is playing %2").arg(user_name).arg(game_name)); m_points->setText(tr("%1 has unlocked %2/%3 achievements worth %4/%5 points")