From a925d0fa2f814eeb2e780d304e89972c67171c92 Mon Sep 17 00:00:00 2001 From: coco875 <59367621+coco875@users.noreply.github.com> Date: Sat, 20 Dec 2025 00:14:29 +0100 Subject: [PATCH] make id of cup more robust and fix a mistake (#604) * fix id koopa troopa beach * make id of cup more robust --- src/engine/Cup.cpp | 19 +++++++++++++++++++ src/engine/Cup.h | 4 ++++ src/engine/registry/RegisterTracks.cpp | 2 +- src/engine/tracks/KoopaTroopaBeach.cpp | 2 +- src/port/Game.cpp | 7 +++++++ 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/engine/Cup.cpp b/src/engine/Cup.cpp index cc85ebca8..89088189f 100644 --- a/src/engine/Cup.cpp +++ b/src/engine/Cup.cpp @@ -45,3 +45,22 @@ void Cup::ShuffleTracks() { // std::mt19937 g(rd()); //std::shuffle(mTracks.begin(), mTracks.end(), g); } + +void Cup::ValidateTrackIds(const Registry& registry) const { + std::vector invalidTracks; + + for (const auto& trackId : mTracks) { + if (!registry.Find(trackId)) { + invalidTracks.push_back(trackId); + } + } + + if (!invalidTracks.empty()) { + std::string errorMsg = "Cup '" + Id + "' contains invalid track IDs: "; + for (size_t i = 0; i < invalidTracks.size(); ++i) { + if (i > 0) errorMsg += ", "; + errorMsg += "'" + invalidTracks[i] + "'"; + } + throw std::invalid_argument(errorMsg); + } +} diff --git a/src/engine/Cup.h b/src/engine/Cup.h index 82f1e6aab..9ce5f2045 100644 --- a/src/engine/Cup.h +++ b/src/engine/Cup.h @@ -4,6 +4,7 @@ #include #include #include "tracks/Track.h" +#include "registry/Registry.h" class Track; // <-- Forward declare @@ -17,6 +18,9 @@ public: explicit Cup(std::string id, const char* name, std::vector tracks); + // Valide que tous les IDs de tracks existent dans le registre + void ValidateTrackIds(const Registry& registry) const; + virtual void ShuffleTracks(); virtual void Next(); diff --git a/src/engine/registry/RegisterTracks.cpp b/src/engine/registry/RegisterTracks.cpp index 7b078ed5e..47a6a6ff2 100644 --- a/src/engine/registry/RegisterTracks.cpp +++ b/src/engine/registry/RegisterTracks.cpp @@ -74,7 +74,7 @@ void RegisterTracks(Registry& r) { r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique()); }); info = { - .ResourceName = "mk:koopa_beach", + .ResourceName = "mk:koopa_troopa_beach", .Name = "koopa troopa beach", .DebugName = "beach", .Length = "691m", diff --git a/src/engine/tracks/KoopaTroopaBeach.cpp b/src/engine/tracks/KoopaTroopaBeach.cpp index fb48206bb..598ea8608 100644 --- a/src/engine/tracks/KoopaTroopaBeach.cpp +++ b/src/engine/tracks/KoopaTroopaBeach.cpp @@ -52,7 +52,7 @@ KoopaTroopaBeach::KoopaTroopaBeach() { Props.Minimap.FinishlineY = 0; ResizeMinimap(&Props.Minimap); - ResourceName = "mk:koopa_beach"; + ResourceName = "mk:koopa_troopa_beach"; Props.SetText(Props.Name, "koopa troopa beach", sizeof(Props.Name)); Props.SetText(Props.DebugName, "beach", sizeof(Props.DebugName)); Props.SetText(Props.TrackLength, "691m", sizeof(Props.TrackLength)); diff --git a/src/port/Game.cpp b/src/port/Game.cpp index 4242815c1..0cdc06f4b 100644 --- a/src/port/Game.cpp +++ b/src/port/Game.cpp @@ -135,6 +135,13 @@ void CustomEngineInit() { "mk:skyscraper" }); + /* Validate Cup Track IDs */ + gMushroomCup->ValidateTrackIds(gTrackRegistry); + gFlowerCup->ValidateTrackIds(gTrackRegistry); + gStarCup->ValidateTrackIds(gTrackRegistry); + gSpecialCup->ValidateTrackIds(gTrackRegistry); + gBattleCup->ValidateTrackIds(gTrackRegistry); + /* Instantiate Cups */ GetWorld()->AddCup(gMushroomCup); GetWorld()->AddCup(gFlowerCup);