A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
Context.cc
1#include "Context.hh"
2
3#include <egg/core/SceneManager.hh>
4
5#include <game/field/CollisionDirector.hh>
6#include <game/field/ObjectDirector.hh>
7#include <game/field/ObjectDrivableDirector.hh>
8#include <game/field/RailManager.hh>
9#include <game/field/jugem/JugemDirector.hh>
10#include <game/field/obj/ObjectBasabasa.hh>
11#include <game/field/obj/ObjectFlamePoleFoot.hh>
12
13#include <game/item/ItemDirector.hh>
14
15#include <game/kart/KartObjectManager.hh>
16#include <game/kart/KartParamFileManager.hh>
17
18#include <game/render/KartCamera.hh>
19
20#include <game/system/CourseMap.hh>
21#include <game/system/KPadDirector.hh>
22#include <game/system/RaceConfig.hh>
23#include <game/system/RaceManager.hh>
24
25namespace Kinoko::Host {
26
27Context::Context() {
28 m_contextMemory = malloc(MEMORY_SPACE_SIZE);
29 ASSERT(m_contextMemory && EGG::SceneManager::s_rootHeap);
30 memcpy(m_contextMemory, static_cast<void *>(EGG::SceneManager::s_rootHeap), MEMORY_SPACE_SIZE);
31
32 m_statics.m_rootList = Abstract::Memory::MEMiHeapHead::s_rootList;
33 m_statics.m_archiveList = EGG::Archive::s_archiveList;
34 m_statics.m_heapList = EGG::Heap::s_heapList;
35 m_statics.m_currentHeap = EGG::Heap::s_currentHeap;
36 m_statics.m_allocatableHeap = EGG::Heap::s_allocatableHeap;
37 m_statics.m_heapForCreateScene = EGG::SceneManager::s_heapForCreateScene;
38 m_statics.m_boxColMgr = Field::BoxColManager::s_instance;
39 m_statics.m_colDir = Field::CollisionDirector::s_instance;
40 m_statics.m_courseColMgr = Field::CourseColMgr::s_instance;
41 m_statics.m_jugemDir = Field::JugemDirector::s_instance;
42 m_statics.m_objDir = Field::ObjectDirector::s_instance;
43 m_statics.m_objDrivableDir = Field::ObjectDrivableDirector::s_instance;
44 m_statics.m_railMgr = Field::RailManager::s_instance;
45 m_statics.m_itemDir = Item::ItemDirector::s_instance;
46 m_statics.m_kartObjMgr = Kart::KartObjectManager::s_instance;
47 m_statics.m_paramFileMgr = Kart::KartParamFileManager::s_instance;
48 m_statics.m_courseMap = System::CourseMap::s_instance;
49 m_statics.m_padDir = System::KPadDirector::s_instance;
50 m_statics.m_raceConfig = System::RaceConfig::s_instance;
51 m_statics.m_onInitCallback = System::RaceConfig::s_onInitCallback;
52 m_statics.m_onInitCallbackArg = System::RaceConfig::s_onInitCallbackArg;
53 m_statics.m_raceMgr = System::RaceManager::s_instance;
54 m_statics.m_resMgr = System::ResourceManager::s_instance;
55 m_statics.m_kartCamera = Render::KartCamera::s_instance;
56 m_statics.m_thunderScaleUpAnmChr = Kart::KartObjectManager::s_thunderScaleUpAnmChr;
57 m_statics.m_thunderScaleDownAnmChr = Kart::KartObjectManager::s_thunderScaleDownAnmChr;
58 m_statics.m_pressScaleUpAnmChr = Kart::KartObjectManager::s_pressScaleUpAnmChr;
59 m_statics.m_frameCtrlBaseUpdateRate = Abstract::g3d::FrameCtrl::s_baseUpdateRate;
60 m_statics.m_dotProductCache = Field::ObjectCollisionBase::s_dotProductCache;
61 m_statics.m_wanwanMaxPitch = Field::ObjectDirector::s_wanwanMaxPitch;
62 m_statics.m_basabasaInitialXRange = Field::ObjectBasabasa::s_initialXRange;
63 m_statics.m_basabasaInitialYRange = Field::ObjectBasabasa::s_initialYRange;
64 m_statics.m_flamePoleCount = Field::ObjectFlamePoleFoot::s_flamePoleCount;
65}
66
67Context::Context(const Context &c) {
68 m_contextMemory = malloc(MEMORY_SPACE_SIZE);
69 ASSERT(m_contextMemory && c.m_contextMemory);
70 memcpy(m_contextMemory, c.m_contextMemory, MEMORY_SPACE_SIZE);
71 m_statics = c.m_statics;
72}
73
75Context::Context(Context &&c) {
76 m_contextMemory = c.m_contextMemory;
77 c.m_contextMemory = nullptr;
78 m_statics = c.m_statics;
79 c.m_statics = {};
80}
81
82Context::~Context() {
83 free(m_contextMemory);
84}
85
86Context &Context::operator=(const Context &rhs) {
87 if (*this == rhs) {
88 return *this;
89 }
90
91 ASSERT(m_contextMemory && rhs.m_contextMemory && m_contextMemory != rhs.m_contextMemory);
92 memcpy(m_contextMemory, rhs.m_contextMemory, MEMORY_SPACE_SIZE);
93 m_statics = rhs.m_statics;
94
95 return *this;
96}
97
98Context &Context::operator=(Context &&rhs) {
99 free(m_contextMemory);
100 m_contextMemory = rhs.m_contextMemory;
101 rhs.m_contextMemory = nullptr;
102 m_statics = rhs.m_statics;
103 rhs.m_statics = {};
104
105 return *this;
106}
107
108bool Context::operator==(const Context &rhs) const {
109 bool ret = m_contextMemory == rhs.m_contextMemory;
110 ret = ret && m_statics.m_rootList == rhs.m_statics.m_rootList;
111 ret = ret && m_statics.m_archiveList == rhs.m_statics.m_archiveList;
112 ret = ret && m_statics.m_heapList == rhs.m_statics.m_heapList;
113 ret = ret && m_statics.m_currentHeap == rhs.m_statics.m_currentHeap;
114 ret = ret && m_statics.m_allocatableHeap == rhs.m_statics.m_allocatableHeap;
115 ret = ret && m_statics.m_heapForCreateScene == rhs.m_statics.m_heapForCreateScene;
116 ret = ret && m_statics.m_heapOptionFlg == rhs.m_statics.m_heapOptionFlg;
117 ret = ret && m_statics.m_rootHeap == rhs.m_statics.m_rootHeap;
118 ret = ret && m_statics.m_boxColMgr == rhs.m_statics.m_boxColMgr;
119 ret = ret && m_statics.m_colDir == rhs.m_statics.m_colDir;
120 ret = ret && m_statics.m_courseColMgr == rhs.m_statics.m_courseColMgr;
121 ret = ret && m_statics.m_jugemDir == rhs.m_statics.m_jugemDir;
122 ret = ret && m_statics.m_objDir == rhs.m_statics.m_objDir;
123 ret = ret && m_statics.m_objDrivableDir == rhs.m_statics.m_objDrivableDir;
124 ret = ret && m_statics.m_railMgr == rhs.m_statics.m_railMgr;
125 ret = ret && m_statics.m_itemDir == rhs.m_statics.m_itemDir;
126 ret = ret && m_statics.m_kartObjMgr == rhs.m_statics.m_kartObjMgr;
127 ret = ret && m_statics.m_paramFileMgr == rhs.m_statics.m_paramFileMgr;
128 ret = ret && m_statics.m_courseMap == rhs.m_statics.m_courseMap;
129 ret = ret && m_statics.m_padDir == rhs.m_statics.m_padDir;
130 ret = ret && m_statics.m_raceConfig == rhs.m_statics.m_raceConfig;
131 ret = ret && m_statics.m_onInitCallbackArg == rhs.m_statics.m_onInitCallbackArg;
132 ret = ret && m_statics.m_raceMgr == rhs.m_statics.m_raceMgr;
133 ret = ret && m_statics.m_resMgr == rhs.m_statics.m_resMgr;
134 ret = ret && m_statics.m_kartCamera == rhs.m_statics.m_kartCamera;
135 ret = ret && m_statics.m_thunderScaleUpAnmChr == rhs.m_statics.m_thunderScaleUpAnmChr;
136 ret = ret && m_statics.m_thunderScaleDownAnmChr == rhs.m_statics.m_thunderScaleDownAnmChr;
137 ret = ret && m_statics.m_pressScaleUpAnmChr == rhs.m_statics.m_pressScaleUpAnmChr;
138 ret = ret && m_statics.m_frameCtrlBaseUpdateRate == rhs.m_statics.m_frameCtrlBaseUpdateRate;
139 ret = ret && m_statics.m_dotProductCache == rhs.m_statics.m_dotProductCache;
140 ret = ret && m_statics.m_wanwanMaxPitch == rhs.m_statics.m_wanwanMaxPitch;
141 ret = ret && m_statics.m_basabasaInitialXRange == rhs.m_statics.m_basabasaInitialXRange;
142 ret = ret && m_statics.m_basabasaInitialYRange == rhs.m_statics.m_basabasaInitialYRange;
143 ret = ret && m_statics.m_flamePoleCount == rhs.m_statics.m_flamePoleCount;
144
145 return ret;
146}
147
148void Context::SetActiveContext(const Context &rhs) {
149 ASSERT(EGG::SceneManager::s_rootHeap && rhs.m_contextMemory);
150 memcpy(reinterpret_cast<void *>(EGG::SceneManager::s_rootHeap), rhs.m_contextMemory,
151 MEMORY_SPACE_SIZE);
152
153 Abstract::Memory::MEMiHeapHead::s_rootList = rhs.m_statics.m_rootList;
154 EGG::Archive::s_archiveList = rhs.m_statics.m_archiveList;
155 EGG::Heap::s_heapList = rhs.m_statics.m_heapList;
156 EGG::Heap::s_currentHeap = rhs.m_statics.m_currentHeap;
157 EGG::Heap::s_allocatableHeap = rhs.m_statics.m_allocatableHeap;
158 EGG::SceneManager::s_heapForCreateScene = rhs.m_statics.m_heapForCreateScene;
159 EGG::SceneManager::s_heapOptionFlg = rhs.m_statics.m_heapOptionFlg;
160 EGG::SceneManager::s_rootHeap = rhs.m_statics.m_rootHeap;
161 Field::BoxColManager::s_instance = rhs.m_statics.m_boxColMgr;
162 Field::CollisionDirector::s_instance = rhs.m_statics.m_colDir;
163 Field::CourseColMgr::s_instance = rhs.m_statics.m_courseColMgr;
164 Field::JugemDirector::s_instance = rhs.m_statics.m_jugemDir;
165 Field::ObjectDirector::s_instance = rhs.m_statics.m_objDir;
166 Field::ObjectDrivableDirector::s_instance = rhs.m_statics.m_objDrivableDir;
167 Field::RailManager::s_instance = rhs.m_statics.m_railMgr;
168 Item::ItemDirector::s_instance = rhs.m_statics.m_itemDir;
169 Kart::KartObjectManager::s_instance = rhs.m_statics.m_kartObjMgr;
170 Kart::KartParamFileManager::s_instance = rhs.m_statics.m_paramFileMgr;
171 System::CourseMap::s_instance = rhs.m_statics.m_courseMap;
172 System::KPadDirector::s_instance = rhs.m_statics.m_padDir;
173 System::RaceConfig::s_instance = rhs.m_statics.m_raceConfig;
174 System::RaceConfig::s_onInitCallback = rhs.m_statics.m_onInitCallback;
175 System::RaceConfig::s_onInitCallbackArg = rhs.m_statics.m_onInitCallbackArg;
176 System::RaceManager::s_instance = rhs.m_statics.m_raceMgr;
177 System::ResourceManager::s_instance = rhs.m_statics.m_resMgr;
178 Render::KartCamera::s_instance = rhs.m_statics.m_kartCamera;
179 Kart::KartObjectManager::s_thunderScaleUpAnmChr = rhs.m_statics.m_thunderScaleUpAnmChr;
180 Kart::KartObjectManager::s_thunderScaleDownAnmChr = rhs.m_statics.m_thunderScaleDownAnmChr;
181 Kart::KartObjectManager::s_pressScaleUpAnmChr = rhs.m_statics.m_pressScaleUpAnmChr;
182 Abstract::g3d::FrameCtrl::s_baseUpdateRate = rhs.m_statics.m_frameCtrlBaseUpdateRate;
183 Field::ObjectCollisionBase::s_dotProductCache = rhs.m_statics.m_dotProductCache;
184 Field::ObjectDirector::s_wanwanMaxPitch = rhs.m_statics.m_wanwanMaxPitch;
185 Field::ObjectBasabasa::s_initialXRange = rhs.m_statics.m_basabasaInitialXRange;
186 Field::ObjectBasabasa::s_initialYRange = rhs.m_statics.m_basabasaInitialYRange;
187 Field::ObjectFlamePoleFoot::s_flamePoleCount = rhs.m_statics.m_flamePoleCount;
188}
189
190} // namespace Kinoko::Host
static Abstract::Memory::MEMList s_archiveList
The linked list of all mounted archives.
Definition Archive.hh:50
Contexts can be used to restore a previous memory state for the current session.
Definition Context.hh:71
static void * s_onInitCallbackArg
The argument sent into the callback. This is expected to be reinterpret_casted.
Definition RaceConfig.hh:95
static InitCallback s_onInitCallback
Host-agnostic way of initializing RaceConfig. The type of the first player must be set to either Loca...
Definition RaceConfig.hh:94
Represents the host application.
Definition HeapCommon.hh:11