1#include "RailManager.hh"
3#include "game/system/CourseMap.hh"
4#include "game/system/map/MapdataGeoObj.hh"
9RailManager *RailManager::CreateInstance() {
11 s_instance =
new RailManager;
12 s_instance->createPaths();
17void RailManager::DestroyInstance() {
19 auto *instance = s_instance;
25RailManager::RailManager() =
default;
28RailManager::~RailManager() {
31 WARN(
"RailManager instance not explicitly handled!");
34 for (
auto *&rail : m_rails) {
38 for (
auto *&interpolator : m_interpolators) {
42 delete m_interpolators.data();
46void RailManager::createPaths() {
47 auto *courseMap = System::CourseMap::Instance();
48 m_pointCount = courseMap->getPointInfoCount();
49 m_extraInterplatorCount = 8;
50 u16 geoCount = courseMap->getGeoObjCount();
51 m_rails.reserve(m_pointCount + m_extraInterplatorCount);
52 m_interpolatorTotal = m_pointCount;
55 m_cameraPointCount = m_pointCount * 1;
56 m_interpolatorTotal = m_pointCount * 1 + m_extraInterplatorCount;
60 m_interpolators = std::span<RailInterpolator *>(
new RailInterpolator *[m_interpolatorTotal],
64 for (
auto *&interpolator : m_interpolators) {
65 interpolator =
nullptr;
68 for (
u16 i = 0; i < m_pointCount; ++i) {
69 bool isObjectRoute =
false;
70 auto *pointInfo = courseMap->getPointInfo(i);
71 bool isSpline = pointInfo->setting(0);
73 for (
u16 j = 0; j < geoCount; ++j) {
74 auto *geoObj = courseMap->getGeoObj(j);
76 if (geoObj->pathId() != i) {
81 m_rails.push_back(
new RailSpline(i, pointInfo));
83 m_rails.push_back(
new RailLine(i, pointInfo));
95 m_rails.push_back(
new RailSpline(i, pointInfo));
97 for (
u16 j = 0; j < m_cameraCount; ++j) {
98 m_interpolators[j + i * m_cameraCount] =
new RailSmoothInterpolator(0.0f, i);
101 m_rails.push_back(
new RailLine(i, pointInfo));
103 for (
u16 j = 0; j < m_cameraCount; ++j) {
104 m_interpolators[j + i * m_cameraCount] =
new RailLinearInterpolator(0.0f, i);
110RailManager *RailManager::s_instance =
nullptr;