38 template <MapdataDerived T>
39 [[nodiscard]] T *parseMapdata(
u32 sectionName)
const {
41 return sectionPtr ?
new T(sectionPtr) :
nullptr;
44 [[nodiscard]] s16 findSector(
const EGG::Vector3f &pos,
u16 checkpointIdx, f32 &distanceRatio);
45 [[nodiscard]] s16 findRecursiveSector(
const EGG::Vector3f &pos, s16 depth,
47 bool playerIsForwards)
const;
52 [[nodiscard]] f32 getCheckPointEntryOffsetExact(
u16 i,
const EGG::Vector3f &pos,
57 return i < getCannonPointCount() ? m_cannonPoint->get(i) :
nullptr;
62 return i < getCheckPathCount() ? m_checkPath->get(i) :
nullptr;
67 return i < getCheckPointCount() ? m_checkPoint->get(i) :
nullptr;
72 return i < getGeoObjCount() ? m_geoObj->get(i) :
nullptr;
77 return i < getPointInfoCount() ? m_pointInfo->get(i) :
nullptr;
82 return i < getJugemPointCount() ? m_jugemPoint->get(i) :
nullptr;
87 return getStageInfoCount() != 0 ? m_stageInfo->get(0) :
nullptr;
92 return i < getStartPointCount() ? m_startPoint->get(i) :
nullptr;
95 [[nodiscard]]
u16 getCannonPointCount()
const {
96 return m_cannonPoint ? m_cannonPoint->size() : 0;
99 [[nodiscard]]
u16 getCheckPathCount()
const {
100 return m_checkPath ? m_checkPath->size() : 0;
103 [[nodiscard]]
u16 getCheckPointCount()
const {
104 return m_checkPoint ? m_checkPoint->size() : 0;
107 [[nodiscard]]
u16 getGeoObjCount()
const {
108 return m_geoObj ? m_geoObj->size() : 0;
111 [[nodiscard]]
u16 getPointInfoCount()
const {
112 return m_pointInfo ? m_pointInfo->size() : 0;
115 [[nodiscard]]
u16 getJugemPointCount()
const {
116 return m_jugemPoint ? m_jugemPoint->size() : 0;
119 [[nodiscard]]
u16 getStageInfoCount()
const {
120 return m_stageInfo ? m_stageInfo->size() : 0;
123 [[nodiscard]]
u16 getStartPointCount()
const {
124 return m_startPoint ? m_startPoint->size() : 0;
127 [[nodiscard]]
u32 version()
const {
128 return m_course->version();
139 [[nodiscard]] f32 startTmpAngle()
const {
140 return m_startTmpAngle;
143 [[nodiscard]] f32 startTmp0()
const {
147 [[nodiscard]] f32 startTmp1()
const {
151 [[nodiscard]] f32 startTmp2()
const {
155 [[nodiscard]] f32 startTmp3()
const {
161 static void DestroyInstance();
163 [[nodiscard]]
static CourseMap *Instance() {
171 [[nodiscard]] s16 findSectorBetweenSides(
const EGG::Vector3f &pos,
173 [[nodiscard]] s16 findSectorOutsideSector(
const EGG::Vector3f &pos,
177 [[nodiscard]] s16 searchNextCheckpoint(
const EGG::Vector3f &pos, s16 depth,
179 bool useCache)
const;
180 [[nodiscard]] s16 searchPrevCheckpoint(
const EGG::Vector3f &pos, s16 depth,
182 bool useCache)
const;
183 void clearSectorChecked();
202 static void *LoadFile(
const char *filename);
Contexts can be used to restore a previous memory state for the current session.