summaryrefslogtreecommitdiff
path: root/src/engine/TrackBrowser.cpp
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2025-12-13 11:50:28 -0700
committerGitHub <noreply@github.com>2025-12-13 11:50:28 -0700
commitb934e98fc34964970ab5efacb2fb7c3372ae0b1a (patch)
treecd96e5fabec7fdcc098d0de33b3b7e2754fb6cd5 /src/engine/TrackBrowser.cpp
parente6acb59ef4797ce27ddc9e21982c3f4e40824b52 (diff)
Refactor Track Class To Instantiate On Track Load (#587)
* Initial Commit * First compilation of Registry template * Further changes * wip changes * Impl TrackBrowser and Registry Info * Remove const from TInfo * Prep GetWorld * Name refactor * Refactor gWorldInstance to GetWorld() * wip * Should work now * Data menu work again * Fix editor staying open after program close * Rename LoadLevel to LoadTrackDataFromJson * More changes * Add statue * Add search to content browser using tags * Fix statue pos and register tags * Fix actor loading * Fix delete all bug which deleted cameras * reduce some boiler plate in actor and object * Remove unused rulesets * Search bar for all tabs * fix data screen * fix actor spawning * temp editor fix * Clean up * improve extra mode transformation * fix podium crash * Fix editor clicking * Fix editor clicking 2 * fix extra in custom track * Fix FI for three actors * Fix divide by zero error * Ids managed by Registry * Add scary comment --------- Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com> Co-authored-by: coco875 <pereira.jannin@gmail.com>
Diffstat (limited to 'src/engine/TrackBrowser.cpp')
-rw-r--r--src/engine/TrackBrowser.cpp118
1 files changed, 118 insertions, 0 deletions
diff --git a/src/engine/TrackBrowser.cpp b/src/engine/TrackBrowser.cpp
new file mode 100644
index 000000000..37a4712bb
--- /dev/null
+++ b/src/engine/TrackBrowser.cpp
@@ -0,0 +1,118 @@
+#include "TrackBrowser.h"
+#include "port/Engine.h"
+#include "engine/editor/SceneManager.h"
+
+TrackBrowser* TrackBrowser::Instance;
+
+void TrackBrowser::FindCustomTracks() {
+ auto manager = GameEngine::Instance->context->GetResourceManager()->GetArchiveManager();
+
+ auto ptr2 = manager->ListDirectories("tracks/*");
+ if (ptr2) {
+ auto dirs = *ptr2;
+
+ for (const std::string& dir : dirs) {
+ std::string name = dir.substr(dir.find_last_of('/') + 1);
+ std::string sceneFile = dir + "/scene.json";
+ std::string minimapFile = dir + "/minimap.png";
+
+ // The track has a valid scene file, add it to the registry
+ if (manager->HasFile(sceneFile)) {
+ auto archive = manager->GetArchiveFromFile(sceneFile);
+
+ TrackInfo info;
+ info.Path = dir;
+ Editor::LoadTrackInfo(info, archive, sceneFile);
+ printf("Added custom track %s\n", info.Name.c_str());
+ gTrackRegistry.Add(info, [info, archive]() {
+ auto track = std::make_unique<Track>();
+ track->ResourceName = info.ResourceName;
+ track->Archive = archive;
+ GetWorld()->SetCurrentTrack(std::move(track));
+ });
+ } else { // The track does not have a valid scene file
+ const std::string file = dir + "/data_track_sections";
+
+ // If the track has a data_track_sections file,
+ // then it must at least be a valid track.
+ // So lets add it as an uninitialized track.
+ if (manager->HasFile(file)) {
+ TrackInfo info;
+
+ std::string resName = std::string("mods:") + name;
+ info.ResourceName = resName;
+ info.Name = name;
+ info.DebugName = name;
+
+ auto archive = manager->GetArchiveFromFile(file);
+ //mNewTracks.push_back({info, "", dir, archive});
+ auto track = std::make_unique<Track>();
+ Editor::SaveLevel(track.get()); // Write scene file so it will show up in the track browser
+
+ gTrackRegistry.Add(info, [info, archive]() {
+ auto track = std::make_unique<Track>();
+ track->ResourceName = info.ResourceName;
+ track->Archive = archive;
+ GetWorld()->SetCurrentTrack(std::move(track));
+ });
+
+ } else {
+ printf("ContentBrowser.cpp: Track '%s' missing required track files. Cannot add to game\n Missing %s/data_track_sections file\n", name.c_str(), dir.c_str());
+ }
+ }
+ }
+ }
+}
+
+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());
+}
+
+extern "C" void TrackBrowser_NextTrack(void) {
+ TrackBrowser::Instance->NextTrack();
+}
+
+extern "C" void TrackBrowser_PreviousTrack(void) {
+ TrackBrowser::Instance->PreviousTrack();
+}
+
+extern "C" size_t TrackBrowser_GetTrackIndex(void) {
+ return TrackBrowser::Instance->GetTrackIndex();
+}
+
+extern "C" const char* TrackBrowser_GetTrackName(void) {
+ return TrackBrowser::Instance->GetTrackName();
+}
+
+extern "C" const char* TrackBrowser_GetTrackDebugName(void) {
+ return TrackBrowser::Instance->GetTrackDebugName();
+
+}
+
+extern "C" const char* TrackBrowser_GetTrackLength(void) {
+ return TrackBrowser::Instance->GetTrackLength();
+}
+
+extern "C" void TrackBrowser_SetTrackByIdx(size_t trackIndex) {
+ TrackBrowser::Instance->SetTrackByIdx(trackIndex);
+}
+
+extern "C" const char* TrackBrowser_GetTrackNameByIdx(size_t trackIndex) {
+ return TrackBrowser::Instance->GetTrackNameByIdx(trackIndex);
+}
+
+extern "C" const char* TrackBrowser_GetTrackDebugNameByIdx(size_t trackIndex) {
+ return TrackBrowser::Instance->GetTrackDebugNameByIdx(trackIndex);
+}
+
+extern "C" const char* TrackBrowser_GetTrackLengthByIdx(size_t trackIndex) {
+ return TrackBrowser::Instance->GetTrackLengthByIdx(trackIndex);
+}
+
+extern "C" const char* TrackBrowser_GetMinimapTextureByIdx(size_t trackIndex) {
+ return TrackBrowser::Instance->GetMinimapTextureByIdx(trackIndex);
+}