summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/AchievementManager.cpp47
-rw-r--r--Source/Core/Core/AchievementManager.h22
-rw-r--r--Source/Core/DolphinQt/Achievements/AchievementBox.cpp19
-rw-r--r--Source/Core/DolphinQt/Achievements/AchievementHeaderWidget.cpp49
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<std::string, const Badge*>;
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<AchievementId, BadgeStatus> m_unlocked_badges;
- std::unordered_map<AchievementId, BadgeStatus> m_locked_badges;
+ std::unordered_map<AchievementId, Badge> m_unlocked_badges;
+ std::unordered_map<AchievementId, Badge> 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")