summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/OnScreenUI.cpp
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2024-05-01 11:20:02 -0400
committerGitHub <noreply@github.com>2024-05-01 11:20:02 -0400
commitb71fdef356caf6ca376c0df474212a192951e810 (patch)
tree5356fea4476fdd190cd9a6fe39f1ded3a767953b /Source/Core/VideoCommon/OnScreenUI.cpp
parentb89cde27f3247e379b5c23810a176a28a4fcc69e (diff)
parentd8ef3ee6c5850aace8d84fba597c9b0ac3dfe090 (diff)
Merge pull request #12639 from LillyJadeKatrin/retroachievements-client
Refactor AchievementManager from rc_runtime to rc_client
Diffstat (limited to 'Source/Core/VideoCommon/OnScreenUI.cpp')
-rw-r--r--Source/Core/VideoCommon/OnScreenUI.cpp99
1 files changed, 53 insertions, 46 deletions
diff --git a/Source/Core/VideoCommon/OnScreenUI.cpp b/Source/Core/VideoCommon/OnScreenUI.cpp
index 4d0213a1a4..715f218b05 100644
--- a/Source/Core/VideoCommon/OnScreenUI.cpp
+++ b/Source/Core/VideoCommon/OnScreenUI.cpp
@@ -332,63 +332,70 @@ void OnScreenUI::DrawDebugText()
}
#ifdef USE_RETRO_ACHIEVEMENTS
-void OnScreenUI::DrawChallenges()
+void OnScreenUI::DrawChallengesAndLeaderboards()
{
std::lock_guard lg{AchievementManager::GetInstance().GetLock()};
const auto& challenge_icons = AchievementManager::GetInstance().GetChallengeIcons();
- if (challenge_icons.empty())
- return;
-
- const std::string window_name = "Challenges";
-
- u32 sum_of_icon_heights = 0;
- u32 max_icon_width = 0;
- for (const auto& [name, icon] : challenge_icons)
- {
- // These *should* all be the same square size but you never know.
- if (icon->width > max_icon_width)
- max_icon_width = icon->width;
- sum_of_icon_heights += icon->height;
- }
- ImGui::SetNextWindowPos(
- ImVec2(ImGui::GetIO().DisplaySize.x - 20.f * m_backbuffer_scale - max_icon_width,
- ImGui::GetIO().DisplaySize.y - 20.f * m_backbuffer_scale - sum_of_icon_heights));
- ImGui::SetNextWindowSize(ImVec2(0.0f, 0.0f));
- if (ImGui::Begin(window_name.c_str(), nullptr,
- ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoInputs |
- ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings |
- ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoNav |
- ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing))
+ const auto& leaderboard_progress = AchievementManager::GetInstance().GetActiveLeaderboards();
+ float leaderboard_y = ImGui::GetIO().DisplaySize.y;
+ if (!challenge_icons.empty())
{
- for (const auto& [name, icon] : challenge_icons)
- {
- if (m_challenge_texture_map.find(name) != m_challenge_texture_map.end())
- continue;
- const u32 width = icon->width;
- const u32 height = icon->height;
- TextureConfig tex_config(width, height, 1, 1, 1, AbstractTextureFormat::RGBA8, 0,
- AbstractTextureType::Texture_2DArray);
- auto res = m_challenge_texture_map.insert_or_assign(name, g_gfx->CreateTexture(tex_config));
- res.first->second->Load(0, width, height, width, icon->rgba_data.data(),
- sizeof(u32) * width * height);
- }
- for (auto& [name, texture] : m_challenge_texture_map)
+ ImGui::SetNextWindowPos(ImVec2(ImGui::GetIO().DisplaySize.x, ImGui::GetIO().DisplaySize.y), 0,
+ ImVec2(1.0, 1.0));
+ ImGui::SetNextWindowSize(ImVec2(0.0f, 0.0f));
+ if (ImGui::Begin("Challenges", nullptr,
+ ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoInputs |
+ ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings |
+ ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoNav |
+ ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing))
{
- auto icon_itr = challenge_icons.find(name);
- if (icon_itr == challenge_icons.end())
+ for (const auto& [name, icon] : challenge_icons)
{
- m_challenge_texture_map.erase(name);
- continue;
+ if (m_challenge_texture_map.find(name) != m_challenge_texture_map.end())
+ continue;
+ const u32 width = icon->width;
+ const u32 height = icon->height;
+ TextureConfig tex_config(width, height, 1, 1, 1, AbstractTextureFormat::RGBA8, 0,
+ AbstractTextureType::Texture_2DArray);
+ auto res = m_challenge_texture_map.insert_or_assign(name, g_gfx->CreateTexture(tex_config));
+ res.first->second->Load(0, width, height, width, icon->rgba_data.data(),
+ sizeof(u32) * width * height);
}
- if (texture)
+ for (auto& [name, texture] : m_challenge_texture_map)
{
- ImGui::Image(texture.get(), ImVec2(static_cast<float>(icon_itr->second->width),
- static_cast<float>(icon_itr->second->height)));
+ auto icon_itr = challenge_icons.find(name);
+ if (icon_itr == challenge_icons.end())
+ {
+ m_challenge_texture_map.erase(name);
+ continue;
+ }
+ if (texture)
+ {
+ ImGui::Image(texture.get(), ImVec2(static_cast<float>(icon_itr->second->width),
+ static_cast<float>(icon_itr->second->height)));
+ }
}
+ leaderboard_y -= ImGui::GetWindowHeight();
}
+ ImGui::End();
}
- ImGui::End();
+ if (!leaderboard_progress.empty())
+ {
+ ImGui::SetNextWindowPos(ImVec2(ImGui::GetIO().DisplaySize.x, leaderboard_y), 0,
+ ImVec2(1.0, 1.0));
+ ImGui::SetNextWindowSize(ImVec2(0.0f, 0.0f));
+ if (ImGui::Begin("Leaderboards", nullptr,
+ ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoInputs |
+ ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings |
+ ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoNav |
+ ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing))
+ {
+ for (const auto& value : leaderboard_progress)
+ ImGui::Text(value.data());
+ }
+ ImGui::End();
+ }
}
#endif // USE_RETRO_ACHIEVEMENTS
@@ -400,7 +407,7 @@ void OnScreenUI::Finalize()
DrawDebugText();
OSD::DrawMessages();
#ifdef USE_RETRO_ACHIEVEMENTS
- DrawChallenges();
+ DrawChallengesAndLeaderboards();
#endif // USE_RETRO_ACHIEVEMENTS
ImGui::Render();
}