A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
RaceScene.cc
1#include "RaceScene.hh"
2
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"
16
17#include <ScopeLock.hh>
18
19namespace Kinoko::Scene {
20
22RaceScene::RaceScene() {
23 m_heap->setName("RaceSceneHeap");
24}
25
27RaceScene::~RaceScene() = default;
28
30void RaceScene::createEngines() {
31 {
32 ScopeLock<GroupID> lock(GroupID::Gfx);
33 Render::KartCamera::CreateInstance();
34 }
35
36 {
37 ScopeLock<GroupID> lock(GroupID::Course);
38 System::CourseMap::CreateInstance()->init();
39 }
40
41 {
42 ScopeLock<GroupID> lock(GroupID::Race);
43 System::RaceManager::CreateInstance();
44 }
45
46 {
47 ScopeLock<GroupID> lock(GroupID::Object);
48 Field::BoxColManager::CreateInstance();
49 Field::JugemDirector::CreateInstance();
50 }
51
52 {
53 ScopeLock<GroupID> lock(GroupID::Kart);
54 Kart::KartObjectManager::CreateInstance();
55 }
56
57 {
58 ScopeLock<GroupID> lock(GroupID::Course);
59 Field::CollisionDirector::CreateInstance();
60 }
61
62 {
63 ScopeLock<GroupID> lock(GroupID::Item);
64 Item::ItemDirector::CreateInstance();
65 }
66
67 {
68 ScopeLock<GroupID> lock(GroupID::Object);
69 Field::RailManager::CreateInstance();
70 Field::ObjectDirector::CreateInstance();
71 }
72}
73
75void RaceScene::initEngines() {
76 {
77 ScopeLock<GroupID> lock(GroupID::Kart);
78 Kart::KartObjectManager::Instance()->init();
79 }
80
81 {
82 ScopeLock<GroupID> lock(GroupID::Gfx);
83 initCamera();
84 }
85
86 {
87 ScopeLock<GroupID> lock(GroupID::Race);
88 System::RaceManager::Instance()->init();
89 }
90
91 {
92 ScopeLock<GroupID> lock(GroupID::Item);
93 Item::ItemDirector::Instance()->init();
94 }
95
96 {
97 ScopeLock<GroupID> lock(GroupID::Object);
98 Field::ObjectDirector::Instance()->init();
99 Field::JugemDirector::Instance()->init();
100 }
101
102 m_heap->disableAllocation();
103}
104
109 auto *raceMgr = System::RaceManager::Instance();
110 raceMgr->calc();
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();
117}
118
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();
132}
133
137 auto *raceCfg = System::RaceConfig::Instance();
138 auto *resMgr = System::ResourceManager::Instance();
139
140 raceCfg->initRace();
141
142 // Normally, the resources are loaded into a specific archive heap
143 // For now, tag them with the resource group ID
144 {
145 ScopeLock<GroupID> lock(GroupID::Resource);
146 auto *commonArc = resMgr->load(0, nullptr);
147 appendResource(commonArc, 0);
148
149 auto *courseArc = resMgr->load(raceCfg->raceScenario().course);
150 appendResource(courseArc, 1);
151 }
152}
153
157 configure();
158}
159
160} // namespace Kinoko::Scene
void calcEngines() override
Definition RaceScene.cc:108
void configure() override
Retrieves Common.szs and the course archive.
Definition RaceScene.cc:136
void onReinit() override
This is called on race shutdown in order to prep for the next race.
Definition RaceScene.cc:156
Pertains to scene handling.
Definition GameScene.cc:10