Skip to content

Commit

Permalink
reinitialize rewind buffer after loading game with achievements (#15934)
Browse files Browse the repository at this point in the history
* reinitialize rewind buffer after loading game with achievements

* fix #endif placement for HAVE_GFX_WIDGETS
  • Loading branch information
Jamiras authored Nov 22, 2023
1 parent a40f695 commit 39a4441
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 5 deletions.
12 changes: 7 additions & 5 deletions cheevos/cheevos.c
Original file line number Diff line number Diff line change
Expand Up @@ -586,6 +586,8 @@ static void rcheevos_progress_hide(rcheevos_locals_t* locals)
gfx_widget_set_achievement_progress(NULL, NULL);
}

#endif

static void rcheevos_client_log_message(const char* message, const rc_client_t* client)
{
CHEEVOS_LOG(RCHEEVOS_TAG "%s\n", message);
Expand Down Expand Up @@ -668,8 +670,6 @@ static void rcheevos_client_event_handler(const rc_client_event_t* event, rc_cli
}
}

#endif

int rcheevos_get_richpresence(char* s, size_t len)
{
if (!rcheevos_is_player_active())
Expand Down Expand Up @@ -2433,13 +2433,13 @@ static void rcheevos_client_load_game_callback(int result,
#ifdef HAVE_THREADS
if (!task_is_on_main_thread())
{
/* Have to "schedule" this. CMD_EVENT_REWIND_INIT should
/* Have to "schedule" this. CMD_EVENT_REWIND_REINIT should
* only be called on the main thread */
rcheevos_locals.queued_command = CMD_EVENT_REWIND_INIT;
rcheevos_locals.queued_command = CMD_EVENT_REWIND_REINIT;
}
else
#endif
command_event(CMD_EVENT_REWIND_INIT, NULL);
command_event(CMD_EVENT_REWIND_REINIT, NULL);
}
#endif
}
Expand Down Expand Up @@ -3144,6 +3144,7 @@ bool rcheevos_load(const void *data)
{
rcheevos_enforce_hardcore_settings();
}
#ifndef HAVE_RC_CLIENT
else
{
#if HAVE_REWIND
Expand All @@ -3167,6 +3168,7 @@ bool rcheevos_load(const void *data)
}
#endif
}
#endif

/* provide hooks for reading files */
rc_hash_reset_cdreader_hooks();
Expand Down
2 changes: 2 additions & 0 deletions command.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ enum event_command
CMD_EVENT_REWIND_DEINIT,
/* Initializes rewind. */
CMD_EVENT_REWIND_INIT,
/* Reinitializes rewind (primarily if the state size changes). */
CMD_EVENT_REWIND_REINIT,
/* Toggles rewind. */
CMD_EVENT_REWIND_TOGGLE,
/* Initializes autosave. */
Expand Down
11 changes: 11 additions & 0 deletions retroarch.c
Original file line number Diff line number Diff line change
Expand Up @@ -2995,6 +2995,17 @@ bool command_event(enum event_command cmd, void *data)
}
}
}
#endif
break;
case CMD_EVENT_REWIND_REINIT:
#ifdef HAVE_REWIND
/* to reinitialize the the rewind state manager, we have to recreate it.
* the easiest way to do that is a full deinit followed by an init. */
if (runloop_st->rewind_st.state != NULL)
{
command_event(CMD_EVENT_REWIND_DEINIT, NULL);
command_event(CMD_EVENT_REWIND_INIT, NULL);
}
#endif
break;
case CMD_EVENT_REWIND_TOGGLE:
Expand Down

0 comments on commit 39a4441

Please sign in to comment.