mirror of
https://github.com/gopher64/gopher64.git
synced 2026-07-11 01:25:20 +02:00
show leaderboard and challenge together (#742)
This commit is contained in:
+21
-31
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user