show leaderboard and challenge together (#742)

This commit is contained in:
Logan McNaughton
2026-04-13 21:22:36 +02:00
committed by GitHub
parent c14b461612
commit baa14de3f3
+21 -31
View File
@@ -103,7 +103,6 @@ static std::vector<const char *> achievement_challenge_indicators;
static Vulkan::ImageHandle achievement_challenge_indicator_image;
static Vulkan::ImageHandle achievement_progress_indicator_image;
static std::map<uint32_t, std::string> leaderboard_trackers;
static Vulkan::ImageHandle leaderboard_tracker_image;
#define MESSAGE_TIME 3000 // 3 seconds
@@ -309,17 +308,15 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font,
message_timer = 0;
achievement_challenge_indicators.clear();
leaderboard_trackers.clear();
achievement_challenge_indicator_image = Vulkan::ImageHandle();
achievement_progress_indicator_image = Vulkan::ImageHandle();
leaderboard_trackers.clear();
leaderboard_tracker_image = Vulkan::ImageHandle();
}
void rdp_close() {
messages = std::queue<Message>();
achievement_challenge_indicator_image = Vulkan::ImageHandle();
achievement_progress_indicator_image = Vulkan::ImageHandle();
leaderboard_tracker_image = Vulkan::ImageHandle();
if (wsi)
wsi->end_frame();
@@ -496,8 +493,6 @@ static void render_frame(Vulkan::Device &device) {
}
} else if (achievement_progress_indicator_image) {
draw_indicator(cmd, achievement_progress_indicator_image, vp);
} else if (leaderboard_tracker_image) {
draw_indicator(cmd, leaderboard_tracker_image, vp);
} else if (achievement_challenge_indicator_image) {
draw_indicator(cmd, achievement_challenge_indicator_image, vp);
}
@@ -802,25 +797,29 @@ uint64_t rdp_process_commands() {
static void update_challenge_indicator() {
std::string message;
for (const auto &leaderboard_tracker : leaderboard_trackers) {
message += leaderboard_tracker.second;
message += '\n';
}
if (!leaderboard_trackers.empty() &&
!achievement_challenge_indicators.empty()) {
message += "---\n";
}
const auto &v = achievement_challenge_indicators;
for (size_t i = 0; i < std::min<size_t>(v.size(), 5); ++i) {
message += v[i];
message += '\n';
}
achievement_challenge_indicator_image = create_message_image(
wsi->get_device(), 0, achievement_challenge_indicator_font,
message.c_str());
}
static void update_leaderboard_tracker() {
std::string message;
for (const auto &leaderboard_tracker : leaderboard_trackers) {
message += leaderboard_tracker.second;
message += '\n';
if (message.empty()) {
achievement_challenge_indicator_image = Vulkan::ImageHandle();
} else {
achievement_challenge_indicator_image = create_message_image(
wsi->get_device(), 0, achievement_challenge_indicator_font,
message.c_str());
}
leaderboard_tracker_image = create_message_image(
wsi->get_device(), 0, achievement_challenge_indicator_font,
message.c_str());
}
void achievement_challenge_indicator_add(const char *achievement_title) {
@@ -830,11 +829,7 @@ void achievement_challenge_indicator_add(const char *achievement_title) {
void achievement_challenge_indicator_remove(const char *achievement_title) {
std::erase(achievement_challenge_indicators, achievement_title);
if (achievement_challenge_indicators.empty()) {
achievement_challenge_indicator_image = Vulkan::ImageHandle();
} else {
update_challenge_indicator();
}
update_challenge_indicator();
}
void achievement_progress_add(const char *achievement_title,
@@ -850,16 +845,11 @@ void achievement_progress_remove() {
void leaderboard_tracker_add(uint32_t id, const char *title,
const char *display) {
std::string message = std::format("{}: {}", title, display);
leaderboard_trackers[id] = message;
update_leaderboard_tracker();
leaderboard_trackers[id] = std::format("{}: {}", title, display);
update_challenge_indicator();
}
void leaderboard_tracker_remove(uint32_t id) {
leaderboard_trackers.erase(id);
if (leaderboard_trackers.empty()) {
leaderboard_tracker_image = Vulkan::ImageHandle();
} else {
update_leaderboard_tracker();
}
update_challenge_indicator();
}