* more RA

* more

* more
This commit is contained in:
Logan McNaughton 2026-04-13 20:39:57 +02:00 committed by GitHub
parent 595089187d
commit c14b461612
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 55 additions and 39 deletions

View File

@ -818,8 +818,9 @@ static void update_leaderboard_tracker() {
message += leaderboard_tracker.second;
message += '\n';
}
leaderboard_tracker_image =
create_message_image(wsi->get_device(), 0, message_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) {
@ -838,18 +839,18 @@ void achievement_challenge_indicator_remove(const char *achievement_title) {
void achievement_progress_add(const char *achievement_title,
const char *progress) {
char message[512];
snprintf(message, sizeof(message), "%s: %s", achievement_title, progress);
std::string message = std::format("{}: {}", achievement_title, progress);
achievement_progress_indicator_image =
create_message_image(wsi->get_device(), 0, message_font, message);
create_message_image(wsi->get_device(), 0, message_font, message.c_str());
}
void achievement_progress_remove(const char *achievement_title) {
void achievement_progress_remove() {
achievement_progress_indicator_image = Vulkan::ImageHandle();
}
void leaderboard_tracker_add(uint32_t id, const char *display) {
std::string message = display;
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();
}

View File

@ -55,8 +55,9 @@ void achievement_challenge_indicator_add(const char *achievement_title);
void achievement_challenge_indicator_remove(const char *achievement_title);
void achievement_progress_add(const char *achievement_title,
const char *progress);
void achievement_progress_remove(const char *achievement_title);
void leaderboard_tracker_add(uint32_t id, const char *display);
void achievement_progress_remove();
void leaderboard_tracker_add(uint32_t id, const char *title,
const char *display);
void leaderboard_tracker_remove(uint32_t id);
#ifdef __cplusplus

View File

@ -24,6 +24,7 @@ static bool g_leaderboard = false;
static const char *g_username = NULL;
static const char *g_token = NULL;
static char load_game_error_message[512];
static rc_client_leaderboard_list_t *g_leaderboard_list = NULL;
static uint32_t read_memory(uint32_t address, uint8_t *buffer,
uint32_t num_bytes, rc_client_t *client) {
@ -129,6 +130,9 @@ static void load_game_callback(int result, const char *error_message,
rc_client_set_hardcore_enabled(client, false);
}
g_leaderboard_list = rc_client_create_leaderboard_list(
client, RC_CLIENT_LEADERBOARD_LIST_GROUPING_NONE);
g_game_loaded = true;
notify_load_game(userdata);
}
@ -179,22 +183,6 @@ void ra_set_dmem(const uint8_t *dmem, size_t dmem_size) {
g_dmem_size = dmem_size;
}
static void leaderboard_started(const rc_client_leaderboard_t *leaderboard) {
char buffer[512];
snprintf(buffer, sizeof(buffer), "Leaderboard started: %s",
leaderboard->title);
rdp_onscreen_message(buffer);
}
static void leaderboard_failed(const rc_client_leaderboard_t *leaderboard) {
char buffer[512];
snprintf(buffer, sizeof(buffer), "Leaderboard failed: %s",
leaderboard->title);
rdp_onscreen_message(buffer);
}
static void leaderboard_submitted(const rc_client_leaderboard_t *leaderboard) {
char buffer[512];
@ -238,18 +226,27 @@ static void server_error(const rc_client_server_error_t *server_error) {
rdp_onscreen_message(buffer);
}
static const char *get_leaderboard_title(const char *display) {
for (uint32_t i = 0; i < g_leaderboard_list->num_buckets; i++) {
for (uint32_t j = 0; j < g_leaderboard_list->buckets[i].num_leaderboards;
j++) {
if (g_leaderboard_list->buckets[i].leaderboards[j]->tracker_value ==
display) {
return g_leaderboard_list->buckets[i].leaderboards[j]->title;
}
}
}
return NULL;
}
static void event_handler(const rc_client_event_t *event, rc_client_t *client) {
switch (event->type) {
case RC_CLIENT_EVENT_ACHIEVEMENT_TRIGGERED:
achievement_triggered(event->achievement);
break;
case RC_CLIENT_EVENT_LEADERBOARD_STARTED:
if (g_leaderboard)
leaderboard_started(event->leaderboard);
break;
case RC_CLIENT_EVENT_LEADERBOARD_FAILED:
if (g_leaderboard)
leaderboard_failed(event->leaderboard);
break;
case RC_CLIENT_EVENT_LEADERBOARD_SUBMITTED:
if (g_leaderboard)
@ -268,7 +265,7 @@ static void event_handler(const rc_client_event_t *event, rc_client_t *client) {
event->achievement->measured_progress);
break;
case RC_CLIENT_EVENT_ACHIEVEMENT_PROGRESS_INDICATOR_HIDE:
achievement_progress_remove(event->achievement->title);
achievement_progress_remove();
break;
case RC_CLIENT_EVENT_ACHIEVEMENT_PROGRESS_INDICATOR_UPDATE:
achievement_progress_add(event->achievement->title,
@ -276,8 +273,10 @@ static void event_handler(const rc_client_event_t *event, rc_client_t *client) {
break;
case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_SHOW:
if (g_leaderboard)
leaderboard_tracker_add(event->leaderboard_tracker->id,
event->leaderboard_tracker->display);
leaderboard_tracker_add(
event->leaderboard_tracker->id,
get_leaderboard_title(event->leaderboard_tracker->display),
event->leaderboard_tracker->display);
break;
case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_HIDE:
if (g_leaderboard)
@ -285,8 +284,10 @@ static void event_handler(const rc_client_event_t *event, rc_client_t *client) {
break;
case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_UPDATE:
if (g_leaderboard)
leaderboard_tracker_add(event->leaderboard_tracker->id,
event->leaderboard_tracker->display);
leaderboard_tracker_add(
event->leaderboard_tracker->id,
get_leaderboard_title(event->leaderboard_tracker->display),
event->leaderboard_tracker->display);
break;
case RC_CLIENT_EVENT_LEADERBOARD_SCOREBOARD:
break;
@ -333,6 +334,10 @@ bool ra_get_hardcore() {
}
void ra_shutdown_client() {
if (g_leaderboard_list) {
rc_client_destroy_leaderboard_list(g_leaderboard_list);
g_leaderboard_list = NULL;
}
if (g_client) {
// Release resources associated to the client instance
rc_client_destroy(g_client);

View File

@ -90,6 +90,7 @@ pub fn run_game(device: &mut Device, rom_contents: &[u8], game_settings: ui::gui
cpu::run(device);
ui::storage::write_saves(device);
retroachievements::shutdown_client();
ui::input::close(&mut device.ui);
ui::audio::close(&mut device.ui);
ui::video::close(&device.ui);

View File

@ -224,7 +224,6 @@ async fn main() -> std::io::Result<()> {
load_savestate_slot: args.load_state,
},
);
retroachievements::shutdown_client();
if device.netplay.is_some() {
netplay::close(&mut device);

View File

@ -234,7 +234,9 @@ fn controller_window(
if dinput {
command.arg("--use-dinput");
}
command.status().unwrap();
if !command.status().unwrap().success() {
eprintln!("Failed to configure input profile");
}
let game_ui = ui::Ui::new();
update_input_profiles(&weak_app, &game_ui.config);
});
@ -387,7 +389,14 @@ pub fn run_rom(
}
}
command.arg(file_path.to_str().unwrap()).status().unwrap();
if !command
.arg(file_path.to_str().unwrap())
.status()
.unwrap()
.success()
{
eprintln!("Failed to run game");
}
let _ = std::fs::remove_file(cheats_path.to_str().unwrap());

View File

@ -543,7 +543,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d
if !unsafe {
sdl3_sys::render::SDL_CreateWindowAndRenderer(
title.as_ptr(),
640,
852,
480,
sdl3_sys::video::SDL_WindowFlags(0),
&mut window,