Mario Kart 64
Loading...
Searching...
No Matches
TrackBrowser.h
Go to the documentation of this file.
1#ifndef TRACKBROWSER_H
2#define TRACKBROWSER_H
3
4#include <libultraship.h>
5#include "port/Game.h"
6
7
8#ifdef __cplusplus
9#include <vector>
13class TrackBrowser {
14private:
15 // Holds all available tracks
16 std::vector<const TrackInfo*> mTracks;
17 size_t mTrackIndex = 0;
18
19public:
20 static TrackBrowser* Instance;
21
22 TrackBrowser(const Registry<TrackInfo>& registry) {
23 mTracks = registry.GetAllInfo();
24 std::sort(mTracks.begin(), mTracks.end(), [](const TrackInfo* a, const TrackInfo* b) {
25 return a->Id < b->Id;
26 });
27 Instance = this;
28 }
29
30 void FindCustomTracks();
31
32 void Refresh(const Registry<TrackInfo>& registry) {
33 mTracks.clear();
34 mTracks = registry.GetAllInfo();
35 std::sort(mTracks.begin(), mTracks.end(), [](const TrackInfo* a, const TrackInfo* b) {
36 return a->Id < b->Id;
37 });
38 mTrackIndex = 0;
39 }
40
41 void Reset() {
42 mTrackIndex = 0;
43 }
44
45 void SetTrack(std::string name) {
46 if (gTrackRegistry.Find(name)) {
47 gTrackRegistry.Invoke(name);
48 } else {
49 throw std::runtime_error("[World] [SetTrack()] Track name not found in Track list: " + name);
50 }
51 }
52
53 void NextTrack() {
54 if (mTracks.empty()) return;
55
56 mTrackIndex = (mTrackIndex + 1) % mTracks.size();
57 gTrackRegistry.Invoke(mTracks[mTrackIndex]->ResourceName);
58 }
59
60 void PreviousTrack() {
61 if (mTracks.empty()) return;
62
63 mTrackIndex = (mTrackIndex + mTracks.size() - 1) % mTracks.size();
64 gTrackRegistry.Invoke(mTracks[mTrackIndex]->ResourceName);
65 }
66
67 size_t GetTrackIndex() {
68 return mTrackIndex;
69 }
70
71 const char* GetTrackName() {
72 if (mTracks.empty()) return "";
73
74 if (mTracks[mTrackIndex]) {
75 return mTracks[mTrackIndex]->Name.c_str();
76 }
77 return "";
78 }
79
80 const char* GetTrackDebugName() {
81 if (mTracks.empty()) return "";
82
83 if (mTracks[mTrackIndex]) {
84 return mTracks[mTrackIndex]->DebugName.c_str();
85 }
86 return "";
87 }
88
89 const char* GetTrackLength() {
90 if (mTracks.empty()) return "";
91
92 if (mTracks[mTrackIndex]) {
93 return mTracks[mTrackIndex]->Length.c_str();
94 }
95 return "";
96 }
97
107
108 void SetTrackByIdx(size_t trackIndex) {
109 if (trackIndex >= mTracks.size()) {
110 printf("[TrackBrowser] [SetTrackById] Error: trackIndex %zu out of bounds (max %zu)\n", trackIndex, mTracks.size());
111 return;
112 }
113 if (nullptr == mTracks[mTrackIndex]) {
114 printf("[TrackBrowser] [SetTrackById] Error: TrackInfo at index %zu is null\n", mTrackIndex);
115 return;
116 }
117 mTrackIndex = trackIndex;
118 gTrackRegistry.Invoke(mTracks[mTrackIndex]->ResourceName);
119 }
120
121 const char* GetTrackNameByIdx(size_t trackIndex) {
122 if (trackIndex >= mTracks.size()) {
123 printf("[TrackBrowser] [GetTrackNameByIdx] Error: trackIndex %zu out of bounds (max %zu)\n", trackIndex, mTracks.size());
124 return "";
125 }
126 if (nullptr == mTracks[trackIndex]) {
127 printf("[TrackBrowser] [GetTrackNameByIdx] Error: TrackInfo at index %zu is null\n", trackIndex);
128 return "";
129 }
130 return mTracks[trackIndex]->Name.c_str();
131 }
132
133 const char* GetTrackDebugNameByIdx(size_t trackIndex) {
134 if (trackIndex >= mTracks.size()) {
135 printf("[TrackBrowser] [GetTrackDebugNameByIdx] Error: trackIndex %zu out of bounds (max %zu)\n", trackIndex, mTracks.size());
136 return "";
137 }
138 if (nullptr == mTracks[trackIndex]) {
139 printf("[TrackBrowser] [GetTrackDebugNameByIdx] Error: TrackInfo at index %zu is null\n", trackIndex);
140 return "";
141 }
142 return mTracks[trackIndex]->DebugName.c_str();
143 }
144
145 const char* GetTrackLengthByIdx(size_t trackIndex) {
146 if (trackIndex >= mTracks.size()) {
147 printf("[TrackBrowser] [GetTrackLengthByIdx] Error: trackIndex %zu out of bounds (max %zu)\n", trackIndex, mTracks.size());
148 return "";
149 }
150 if (nullptr == mTracks[trackIndex]) {
151 printf("[TrackBrowser] [GetTrackLengthByIdx] Error: TrackInfo at index %zu is null\n", trackIndex);
152 return "";
153 }
154 return mTracks[trackIndex]->Length.c_str();
155 }
156
157 const char* GetMinimapTextureByIdx(size_t trackIndex) {
158 if (trackIndex >= mTracks.size()) {
159 printf("[TrackBrowser] [GetTrackMinimapTextureByIdx] Error: trackIndex %zu out of bounds (max %zu)\n", trackIndex, mTracks.size());
160 return NULL;
161 }
162 if (nullptr == mTracks[trackIndex]) {
163 printf("[TrackBrowser] [GetTrackMinimapTextureByIdx] Error: TrackInfo at index %zu is null\n", trackIndex);
164 return NULL;
165 }
166 return mTracks[trackIndex]->MinimapTexture;
167 }
168};
169
170#endif // __cplusplus
171
172#ifdef __cplusplus
173extern "C" {
174#endif // __cplusplus
175void TrackBrowser_SetTrack(const char* name);
176void TrackBrowser_SetTrackFromCup(void); // <-- Not in TrackBrowser class
177void TrackBrowser_NextTrack(void);
179size_t TrackBrowser_GetTrackIndex(void);
180const char* TrackBrowser_GetTrackName(void);
181const char* TrackBrowser_GetTrackDebugName(void);
182const char* TrackBrowser_GetTrackLength(void);
183void TrackBrowser_SetTrackByIdx(size_t trackIndex);
184const char* TrackBrowser_GetTrackNameByIdx(size_t trackIndex);
185const char* TrackBrowser_GetTrackDebugNameByIdx(size_t trackIndex);
186const char* TrackBrowser_GetTrackLengthByIdx(size_t trackIndex);
187const char* TrackBrowser_GetMinimapTextureByIdx(size_t trackIndex);
188#ifdef __cplusplus
189}
190#endif // __cplusplus
191
192#endif // TRACKBROWSER_H
Registry< TrackInfo > gTrackRegistry
Definition Game.cpp:76
const char * TrackBrowser_GetTrackLengthByIdx(size_t trackIndex)
Definition TrackBrowser.cpp:123
void TrackBrowser_PreviousTrack(void)
Definition TrackBrowser.cpp:90
const char * TrackBrowser_GetTrackName(void)
Definition TrackBrowser.cpp:98
void TrackBrowser_NextTrack(void)
Definition TrackBrowser.cpp:86
void TrackBrowser_SetTrack(const char *name)
Definition TrackBrowser.cpp:78
void TrackBrowser_SetTrackByIdx(size_t trackIndex)
Definition TrackBrowser.cpp:111
const char * TrackBrowser_GetTrackLength(void)
Definition TrackBrowser.cpp:107
const char * TrackBrowser_GetTrackNameByIdx(size_t trackIndex)
Definition TrackBrowser.cpp:115
size_t TrackBrowser_GetTrackIndex(void)
Definition TrackBrowser.cpp:94
const char * TrackBrowser_GetTrackDebugName(void)
Definition TrackBrowser.cpp:102
const char * TrackBrowser_GetMinimapTextureByIdx(size_t trackIndex)
Definition TrackBrowser.cpp:127
const char * TrackBrowser_GetTrackDebugNameByIdx(size_t trackIndex)
Definition TrackBrowser.cpp:119
void TrackBrowser_SetTrackFromCup(void)
Definition TrackBrowser.cpp:82
std::vector< const TInfo * > GetAllInfo() const
Definition Registry.h:91
#define NULL
Definition miniaudio.h:3851