3#include "game/field/BoxColManager.hh"
4#include "game/field/CollisionDirector.hh"
5#include "game/field/ObjectDirector.hh"
6#include "game/field/RailManager.hh"
7#include "game/field/jugem/JugemDirector.hh"
8#include "game/item/ItemDirector.hh"
9#include "game/kart/KartObjectManager.hh"
10#include "game/render/KartCamera.hh"
11#include "game/system/CourseMap.hh"
12#include "game/system/KPadDirector.hh"
13#include "game/system/RaceConfig.hh"
14#include "game/system/RaceManager.hh"
15#include "game/system/ResourceManager.hh"
17#include <ScopeLock.hh>
22RaceScene::RaceScene() {
23 m_heap->setName(
"RaceSceneHeap");
27RaceScene::~RaceScene() =
default;
30void RaceScene::createEngines() {
32 ScopeLock<GroupID> lock(GroupID::Gfx);
33 Render::KartCamera::CreateInstance();
37 ScopeLock<GroupID> lock(GroupID::Course);
38 System::CourseMap::CreateInstance()->init();
42 ScopeLock<GroupID> lock(GroupID::Race);
43 System::RaceManager::CreateInstance();
47 ScopeLock<GroupID> lock(GroupID::Object);
48 Field::BoxColManager::CreateInstance();
49 Field::JugemDirector::CreateInstance();
53 ScopeLock<GroupID> lock(GroupID::Kart);
54 Kart::KartObjectManager::CreateInstance();
58 ScopeLock<GroupID> lock(GroupID::Course);
59 Field::CollisionDirector::CreateInstance();
63 ScopeLock<GroupID> lock(GroupID::Item);
64 Item::ItemDirector::CreateInstance();
68 ScopeLock<GroupID> lock(GroupID::Object);
69 Field::RailManager::CreateInstance();
70 Field::ObjectDirector::CreateInstance();
75void RaceScene::initEngines() {
77 ScopeLock<GroupID> lock(GroupID::Kart);
78 Kart::KartObjectManager::Instance()->init();
82 ScopeLock<GroupID> lock(GroupID::Gfx);
87 ScopeLock<GroupID> lock(GroupID::Race);
88 System::RaceManager::Instance()->init();
92 ScopeLock<GroupID> lock(GroupID::Item);
93 Item::ItemDirector::Instance()->init();
97 ScopeLock<GroupID> lock(GroupID::Object);
98 Field::ObjectDirector::Instance()->init();
99 Field::JugemDirector::Instance()->init();
102 m_heap->disableAllocation();
109 auto *raceMgr = System::RaceManager::Instance();
111 Field::BoxColManager::Instance()->calc();
112 Field::ObjectDirector::Instance()->calc();
113 Kart::KartObjectManager::Instance()->calc();
114 Field::JugemDirector::Instance()->calc();
115 Item::ItemDirector::Instance()->calc();
116 raceMgr->random().next();
120void RaceScene::destroyEngines() {
121 System::KPadDirector::Instance()->endGhostProxies();
122 Render::KartCamera::DestroyInstance();
123 Kart::KartObjectManager::DestroyInstance();
124 Field::JugemDirector::DestroyInstance();
125 Field::ObjectDirector::DestroyInstance();
126 Field::RailManager::DestroyInstance();
127 Field::CollisionDirector::DestroyInstance();
128 Item::ItemDirector::DestroyInstance();
129 Field::BoxColManager::DestroyInstance();
130 System::RaceManager::DestroyInstance();
131 System::CourseMap::DestroyInstance();
137 auto *raceCfg = System::RaceConfig::Instance();
138 auto *resMgr = System::ResourceManager::Instance();
146 auto *commonArc = resMgr->load(0,
nullptr);
147 appendResource(commonArc, 0);
149 auto *courseArc = resMgr->load(raceCfg->raceScenario().course);
150 appendResource(courseArc, 1);
void calcEngines() override
void configure() override
Retrieves Common.szs and the course archive.
void onReinit() override
This is called on race shutdown in order to prep for the next race.
Pertains to scene handling.