From 701d877dbbec50ad75df824bf8e7b297aeac2202 Mon Sep 17 00:00:00 2001 From: MegaMech Date: Tue, 11 Aug 2026 18:40:18 -0600 Subject: [PATCH] Fix Track Invocation Spam (#738) * Update main.c * Update TrackBrowser.cpp * Add TrackBrowser_ResetSelectedTrack function declaration * Add void keyword to function declarations * Rename global track variable for clarity * Update TrackBrowser.h --- src/engine/TrackBrowser.cpp | 14 ++++++++++++-- src/engine/TrackBrowser.h | 5 +++-- src/main.c | 2 ++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/engine/TrackBrowser.cpp b/src/engine/TrackBrowser.cpp index 7d7b958c8..d7c3907c0 100644 --- a/src/engine/TrackBrowser.cpp +++ b/src/engine/TrackBrowser.cpp @@ -80,8 +80,18 @@ extern "C" void TrackBrowser_SetTrack(const char* name) { TrackBrowser::Instance->SetTrack(std::string(name)); } -extern "C" void TrackBrowser_SetTrackFromCup() { - TrackBrowser::Instance->SetTrack(GetWorld()->GetCurrentCup()->GetTrack()); +static std::string sCurrentlySelectedTrack = ""; +extern "C" void TrackBrowser_SetTrackFromCup(void) { + const std::string& track = GetWorld()->GetCurrentCup()->GetTrack(); + // Prevent repeated invoke spams + if (track != sCurrentlySelectedTrack) { + sCurrentlySelectedTrack = track; + TrackBrowser::Instance->SetTrack(track); + } +} + +extern "C" void TrackBrowser_ResetSelectedTrack(void) { + sCurrentlySelectedTrack = ""; } extern "C" void TrackBrowser_NextTrack(void) { diff --git a/src/engine/TrackBrowser.h b/src/engine/TrackBrowser.h index 89dec2f00..0a8f95ef9 100644 --- a/src/engine/TrackBrowser.h +++ b/src/engine/TrackBrowser.h @@ -59,7 +59,7 @@ public: ); } - void SetTrack(std::string name) { + void SetTrack(const std::string& name) { if (gTrackRegistry.Find(name)) { gTrackRegistry.Invoke(name); } else { @@ -191,6 +191,7 @@ extern "C" { #endif // __cplusplus void TrackBrowser_SetTrack(const char* name); void TrackBrowser_SetTrackFromCup(void); // <-- Not in TrackBrowser class +void TrackBrowser_ResetSelectedTrack(void); void TrackBrowser_NextTrack(void); void TrackBrowser_PreviousTrack(void); size_t TrackBrowser_GetTrackIndex(void); @@ -206,4 +207,4 @@ const char* TrackBrowser_GetMinimapTextureByIdx(size_t trackIndex); } #endif // __cplusplus -#endif // TRACKBROWSER_H \ No newline at end of file +#endif // TRACKBROWSER_H diff --git a/src/main.c b/src/main.c index fb4428c66..c21e8cfcd 100644 --- a/src/main.c +++ b/src/main.c @@ -40,6 +40,7 @@ #include "port/Game.h" #include "port/Engine.h" #include "engine/Matrix.h" +#include "engine/TrackBrowser.h" // Declarations (not in this file) void func_80091B78(void); @@ -1108,6 +1109,7 @@ void update_gamestate(void) { */ // init_segment_racing(); setup_race(); + TrackBrowser_ResetSelectedTrack(); // Same function as gCurrentlyLoadedTrackAddr break; case ENDING: gCurrentlyLoadedTrackAddr = NULL;