summaryrefslogtreecommitdiff
path: root/src/engine
diff options
context:
space:
mode:
authorcoco875 <59367621+coco875@users.noreply.github.com>2025-12-20 00:14:29 +0100
committerGitHub <noreply@github.com>2025-12-19 16:14:29 -0700
commita925d0fa2f814eeb2e780d304e89972c67171c92 (patch)
tree17a063ff8db9423bcef11d7662503b7137678825 /src/engine
parent67536f525a8ffab2d8afef945a3d23d1e2b4411f (diff)
make id of cup more robust and fix a mistake (#604)
* fix id koopa troopa beach * make id of cup more robust
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/Cup.cpp19
-rw-r--r--src/engine/Cup.h4
-rw-r--r--src/engine/registry/RegisterTracks.cpp2
-rw-r--r--src/engine/tracks/KoopaTroopaBeach.cpp2
4 files changed, 25 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<TrackInfo>& registry) const {
+ std::vector<std::string> 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 <vector>
#include <memory>
#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<std::string> tracks);
+ // Valide que tous les IDs de tracks existent dans le registre
+ void ValidateTrackIds(const Registry<TrackInfo>& 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<TrackInfo>& r) {
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<FrappeSnowland>()); });
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));