Refactor gWorldInstance to GetWorld()

This commit is contained in:
MegaMech 2025-12-09 23:38:15 -07:00
parent a805d82056
commit 78861112be
58 changed files with 419 additions and 433 deletions

View File

@ -11,12 +11,12 @@ void RunGarbageCollector() {
}
void CleanActors() {
for (auto actor = gWorldInstance.Actors.begin(); actor != gWorldInstance.Actors.end();) {
for (auto actor = GetWorld()->Actors.begin(); actor != GetWorld()->Actors.end();) {
AActor* act = *actor; // Get a mutable copy
if (act->bPendingDestroy) {
if (act->IsMod()) { // C++ actor
delete act;
actor = gWorldInstance.Actors.erase(actor); // Remove from container
actor = GetWorld()->Actors.erase(actor); // Remove from container
} else { // Old C actor
act->Flags = 0;
act->Type = 0;
@ -32,11 +32,11 @@ void CleanActors() {
}
void CleanStaticMeshActors() {
for (auto actor = gWorldInstance.StaticMeshActors.begin(); actor != gWorldInstance.StaticMeshActors.end();) {
for (auto actor = GetWorld()->StaticMeshActors.begin(); actor != GetWorld()->StaticMeshActors.end();) {
StaticMeshActor* act = *actor; // Get a mutable copy
if (act->bPendingDestroy) {
delete act;
actor = gWorldInstance.StaticMeshActors.erase(actor); // Remove from container
actor = GetWorld()->StaticMeshActors.erase(actor); // Remove from container
continue;
} else {
actor++;
@ -45,11 +45,11 @@ void CleanStaticMeshActors() {
}
void CleanObjects() {
for (auto object = gWorldInstance.Objects.begin(); object != gWorldInstance.Objects.end();) {
for (auto object = GetWorld()->Objects.begin(); object != GetWorld()->Objects.end();) {
OObject* obj = *object; // Get a mutable copy
if (obj->bPendingDestroy) {
delete obj;
object = gWorldInstance.Objects.erase(object); // Remove from container
object = GetWorld()->Objects.erase(object); // Remove from container
continue;
}
object++;

View File

@ -59,14 +59,14 @@ void SetTextMatrix(Mat4 mf, f32 x, f32 y, f32 arg3, f32 arg4) {
// AddMatrix but with custom gfx ptr arg and flags are predefined
Gfx* AddTextMatrix(Gfx* displayListHead, Mat4 mtx) {
// Push a new matrix to the stack
gWorldInstance.Mtx.Objects.emplace_back();
GetWorld()->Mtx.Objects.emplace_back();
// Convert to a fixed-point matrix
FrameInterpolation_RecordMatrixMtxFToMtx((MtxF*)mtx, &gWorldInstance.Mtx.Objects.back());
guMtxF2L(mtx, &gWorldInstance.Mtx.Objects.back());
FrameInterpolation_RecordMatrixMtxFToMtx((MtxF*)mtx, &GetWorld()->Mtx.Objects.back());
guMtxF2L(mtx, &GetWorld()->Mtx.Objects.back());
// Load the matrix
gSPMatrix(displayListHead++, &gWorldInstance.Mtx.Objects.back(), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPMatrix(displayListHead++, &GetWorld()->Mtx.Objects.back(), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
return displayListHead;
}
@ -195,43 +195,43 @@ void AddLocalRotation(Mat4 mat, IRotator rot) {
extern "C" {
void AddHudMatrix(Mat4 mtx, s32 flags) {
AddMatrix(gWorldInstance.Mtx.Objects, mtx, flags);
AddMatrix(GetWorld()->Mtx.Objects, mtx, flags);
}
Mtx* GetScreenMatrix(void) {
return &gWorldInstance.Mtx.Screen2D;
return &GetWorld()->Mtx.Screen2D;
}
Mtx* GetOrthoMatrix(void) {
return &gWorldInstance.Mtx.Ortho;
return &GetWorld()->Mtx.Ortho;
}
Mtx* GetPerspMatrix(size_t cameraId) {
return &gWorldInstance.Mtx.Persp[cameraId];
return &GetWorld()->Mtx.Persp[cameraId];
}
Mtx* GetLookAtMatrix(size_t cameraId) {
return &gWorldInstance.Mtx.LookAt[cameraId];
return &GetWorld()->Mtx.LookAt[cameraId];
}
void AddObjectMatrix(Mat4 mtx, s32 flags) {
AddMatrix(gWorldInstance.Mtx.Objects, mtx, flags);
AddMatrix(GetWorld()->Mtx.Objects, mtx, flags);
}
Mtx* GetShadowMatrix(size_t playerId) {
return &gWorldInstance.Mtx.Shadows[playerId];
return &GetWorld()->Mtx.Shadows[playerId];
}
Mtx* GetKartMatrix(size_t playerId) {
return &gWorldInstance.Mtx.Karts[playerId];
return &GetWorld()->Mtx.Karts[playerId];
}
void AddEffectMatrix(Mat4 mtx, s32 flags) {
AddMatrix(gWorldInstance.Mtx.Objects, mtx, flags);
AddMatrix(GetWorld()->Mtx.Objects, mtx, flags);
}
void AddEffectMatrixOrtho(void) {
auto& stack = gWorldInstance.Mtx.Objects;
auto& stack = GetWorld()->Mtx.Objects;
stack.emplace_back();
guOrtho(&stack.back(), 0.0f, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, 0.0f, -100.0f, 100.0f, 1.0f);
@ -240,7 +240,7 @@ extern "C" {
}
Mtx* GetEffectMatrix(void) {
return GetMatrix(gWorldInstance.Mtx.Objects);
return GetMatrix(GetWorld()->Mtx.Objects);
}
@ -249,14 +249,14 @@ extern "C" {
* We might need to adjust which ones we clear.
*/
void ClearMatrixPools(void) {
gWorldInstance.Mtx.Objects.clear();
// gWorldInstance.Mtx.Shadows.clear();
//gWorldInstance.Mtx.Karts.clear();
// gWorldInstance.Mtx.Effects.clear();
GetWorld()->Mtx.Objects.clear();
// GetWorld()->Mtx.Shadows.clear();
//GetWorld()->Mtx.Karts.clear();
// GetWorld()->Mtx.Effects.clear();
}
void ClearObjectsMatrixPool(void) {
gWorldInstance.Mtx.Objects.clear();
GetWorld()->Mtx.Objects.clear();
}
}

View File

@ -91,7 +91,7 @@ void RaceManager::BeginPlay() {
void RaceManager::PostInit() {
// Ruleset options
if (CVarGetInteger("gAllThwompsAreMarty", false) == true) {
for (auto object : gWorldInstance.Objects) {
for (auto object : GetWorld()->Objects) {
if (OThwomp* thwomp = dynamic_cast<OThwomp*>(object)) {
gObjectList[thwomp->_objectIndex].unk_0D5 = OThwomp::States::JAILED; // Sets all the thwomp behaviour flags to marty
thwomp->Behaviour = OThwomp::States::JAILED;
@ -100,7 +100,7 @@ void RaceManager::PostInit() {
}
if (CVarGetInteger("gAllBombKartsChase", false) == true) {
for (auto object : gWorldInstance.Objects) {
for (auto object : GetWorld()->Objects) {
if (OBombKart* kart = dynamic_cast<OBombKart*>(object)) {
kart->Behaviour = OBombKart::States::CHASE;
}

View File

@ -42,147 +42,147 @@ void RegisterActors(Registry<ActorInfo, const SpawnParams&>& r) {
info = { .ResourceName = "mk:thwomp" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OThwomp(params));
GetWorld()->AddObject(new OThwomp(params));
}
);
info = { .ResourceName = "mk:snowman" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OSnowman(params));
GetWorld()->AddObject(new OSnowman(params));
}
);
info = { .ResourceName = "mk:hot_air_balloon" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OHotAirBalloon(params));
GetWorld()->AddObject(new OHotAirBalloon(params));
}
);
info = { .ResourceName = "mk:hedgehog" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OHedgehog(params));
GetWorld()->AddObject(new OHedgehog(params));
}
);
info = { .ResourceName = "mk:grand_prix_balloons" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OGrandPrixBalloons(params));
GetWorld()->AddObject(new OGrandPrixBalloons(params));
}
);
info = { .ResourceName = "mk:flagpole" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OFlagpole(params));
GetWorld()->AddObject(new OFlagpole(params));
}
);
info = { .ResourceName = "mk:crab" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OCrab(params));
GetWorld()->AddObject(new OCrab(params));
}
);
info = { .ResourceName = "mk:cheep_cheep" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OCheepCheep(params));
GetWorld()->AddObject(new OCheepCheep(params));
}
);
info = { .ResourceName = "mk:bomb_kart" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OBombKart(params));
GetWorld()->AddObject(new OBombKart(params));
}
);
info = { .ResourceName = "mk:bat" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OBat(params));
GetWorld()->AddObject(new OBat(params));
}
);
info = { .ResourceName = "mk:boos" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OBoos(params));
GetWorld()->AddObject(new OBoos(params));
}
);
info = { .ResourceName = "mk:trophy" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OTrophy(params));
GetWorld()->AddObject(new OTrophy(params));
}
);
info = { .ResourceName = "mk:trash_bin" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OTrashBin(params));
GetWorld()->AddObject(new OTrashBin(params));
}
);
info = { .ResourceName = "mk:seagull" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OSeagull(params));
GetWorld()->AddObject(new OSeagull(params));
}
);
info = { .ResourceName = "mk:chain_chomp" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OChainChomp());
GetWorld()->AddObject(new OChainChomp());
}
);
info = { .ResourceName = "mk:podium" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OPodium(params));
GetWorld()->AddObject(new OPodium(params));
}
);
info = { .ResourceName = "mk:penguin" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddObject(new OPenguin(params));
GetWorld()->AddObject(new OPenguin(params));
}
);
info = { .ResourceName = "mk:banana" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddActor(new ABanana(params));
GetWorld()->AddActor(new ABanana(params));
}
);
info = { .ResourceName = "mk:mario_sign" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddActor(new AMarioSign(params));
GetWorld()->AddActor(new AMarioSign(params));
}
);
info = { .ResourceName = "mk:wario_sign" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddActor(new AWarioSign(params));
GetWorld()->AddActor(new AWarioSign(params));
}
);
info = { .ResourceName = "mk:falling_rock" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddActor(new AFallingRock(params));
GetWorld()->AddActor(new AFallingRock(params));
}
);
@ -354,77 +354,77 @@ void RegisterActors(Registry<ActorInfo, const SpawnParams&>& r) {
info = { .ResourceName = "mk:train" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddActor(new ATrain(params));
GetWorld()->AddActor(new ATrain(params));
}
);
info = { .ResourceName = "mk:paddle_boat" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddActor(new ABoat(params));
GetWorld()->AddActor(new ABoat(params));
}
);
info = { .ResourceName = "mk:car" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddActor(new ACar(params));
GetWorld()->AddActor(new ACar(params));
}
);
info = { .ResourceName = "mk:truck" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddActor(new ATankerTruck(params));
GetWorld()->AddActor(new ATankerTruck(params));
}
);
info = { .ResourceName = "mk:tanker_truck" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddActor(new ATankerTruck(params));
GetWorld()->AddActor(new ATankerTruck(params));
}
);
info = { .ResourceName = "mk:bus" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddActor(new ATankerTruck(params));
GetWorld()->AddActor(new ATankerTruck(params));
}
);
info = { .ResourceName = "hm:spaghetti_ship" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddActor(new ASpaghettiShip(params));
GetWorld()->AddActor(new ASpaghettiShip(params));
}
);
info = { .ResourceName = "hm:ship" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddActor(new AShip(params));
GetWorld()->AddActor(new AShip(params));
}
);
info = { .ResourceName = "hm:starship" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddActor(new AStarship(params));
GetWorld()->AddActor(new AStarship(params));
}
);
info = { .ResourceName = "hm:cloud" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddActor(new ACloud(params));
GetWorld()->AddActor(new ACloud(params));
}
);
info = { .ResourceName = "hm:text" };
r.Add(info,
[](const SpawnParams& params) {
gWorldInstance.AddActor(new AText(params));
GetWorld()->AddActor(new AText(params));
}
);
}
@ -441,7 +441,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<MarioRaceway>());
GetWorld()->SetCurrentTrack(std::make_shared<MarioRaceway>());
}
);
@ -454,7 +454,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<ChocoMountain>());
GetWorld()->SetCurrentTrack(std::make_shared<ChocoMountain>());
}
);
@ -467,7 +467,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<BowsersCastle>());
GetWorld()->SetCurrentTrack(std::make_shared<BowsersCastle>());
}
);
@ -480,7 +480,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<BansheeBoardwalk>());
GetWorld()->SetCurrentTrack(std::make_shared<BansheeBoardwalk>());
}
);
@ -493,7 +493,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<YoshiValley>());
GetWorld()->SetCurrentTrack(std::make_shared<YoshiValley>());
}
);
@ -506,7 +506,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<FrappeSnowland>());
GetWorld()->SetCurrentTrack(std::make_shared<FrappeSnowland>());
}
);
@ -519,7 +519,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<KoopaTroopaBeach>());
GetWorld()->SetCurrentTrack(std::make_shared<KoopaTroopaBeach>());
}
);
@ -532,7 +532,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<RoyalRaceway>());
GetWorld()->SetCurrentTrack(std::make_shared<RoyalRaceway>());
}
);
@ -545,7 +545,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<LuigiRaceway>());
GetWorld()->SetCurrentTrack(std::make_shared<LuigiRaceway>());
}
);
@ -558,7 +558,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<MooMooFarm>());
GetWorld()->SetCurrentTrack(std::make_shared<MooMooFarm>());
}
);
@ -571,7 +571,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<ToadsTurnpike>());
GetWorld()->SetCurrentTrack(std::make_shared<ToadsTurnpike>());
}
);
@ -584,7 +584,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<KalimariDesert>());
GetWorld()->SetCurrentTrack(std::make_shared<KalimariDesert>());
}
);
@ -597,7 +597,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<SherbetLand>());
GetWorld()->SetCurrentTrack(std::make_shared<SherbetLand>());
}
);
@ -610,7 +610,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<RainbowRoad>());
GetWorld()->SetCurrentTrack(std::make_shared<RainbowRoad>());
}
);
@ -623,7 +623,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<WarioStadium>());
GetWorld()->SetCurrentTrack(std::make_shared<WarioStadium>());
}
);
@ -636,7 +636,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<BlockFort>());
GetWorld()->SetCurrentTrack(std::make_shared<BlockFort>());
}
);
@ -649,7 +649,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<Skyscraper>());
GetWorld()->SetCurrentTrack(std::make_shared<Skyscraper>());
}
);
@ -662,7 +662,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<DoubleDeck>());
GetWorld()->SetCurrentTrack(std::make_shared<DoubleDeck>());
}
);
@ -675,7 +675,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<DKJungle>());
GetWorld()->SetCurrentTrack(std::make_shared<DKJungle>());
}
);
@ -688,7 +688,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<BigDonut>());
GetWorld()->SetCurrentTrack(std::make_shared<BigDonut>());
}
);
@ -701,7 +701,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
r.Add(info,
[]() {
gWorldInstance.SetCurrentTrack(std::make_shared<TestTrack>());
GetWorld()->SetCurrentTrack(std::make_shared<TestTrack>());
}
);
}

View File

@ -34,7 +34,7 @@ struct ActorInfo {
* params.Location = FVector(0, 0, 0);
*
* gActorRegistry.Add(actorInfo, [](params) {
* gWorldInstance.AddActor(new ACloud(params));
* GetWorld()->AddActor(new ACloud(params));
* });
*
* gActorRegistry.Invoke("hm:cloud", params);

View File

@ -28,7 +28,7 @@ void Rulesets::PreInit() {
// Only runs a single time at the beginning of a track.
void Rulesets::PostInit() {
if (CVarGetInteger("gAllThwompsAreMarty", false) == true) {
for (auto object : gWorldInstance.Objects) {
for (auto object : GetWorld()->Objects) {
if (OThwomp* thwomp = dynamic_cast<OThwomp*>(object)) {
gObjectList[thwomp->_objectIndex].unk_0D5 = OThwomp::States::JAILED; // Sets all the thwomp behaviour flags to marty
thwomp->Behaviour = OThwomp::States::JAILED;
@ -37,7 +37,7 @@ void Rulesets::PostInit() {
}
if (CVarGetInteger("gAllBombKartsChase", false) == true) {
for (auto object : gWorldInstance.Objects) {
for (auto object : GetWorld()->Objects) {
if (OBombKart* kart = dynamic_cast<OBombKart*>(object)) {
kart->Behaviour = OBombKart::States::CHASE;
}

View File

@ -24,7 +24,7 @@ void TrainSmokeTick() {
s32 temp_a0;
Object* object;
for (auto& actor : gWorldInstance.Actors) {
for (auto& actor : GetWorld()->Actors) {
if (auto train = dynamic_cast<ATrain*>(actor)) {
if (train->SmokeTimer != 0) {
train->SmokeTimer -= 1;
@ -79,7 +79,7 @@ void TrainSmokeTick() {
void TrainSmokeDraw(s32 cameraId) {
Camera* camera = &camera1[cameraId];
for (auto& actor : gWorldInstance.Actors) {
for (auto& actor : GetWorld()->Actors) {
if (auto train = dynamic_cast<ATrain*>(actor)) {
gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007AE0);
load_texture_block_i8_nomirror((uint8_t*) D_0D029458, 32, 32);

View File

@ -7,7 +7,7 @@ extern "C" void TrackBrowser_SetTrack(const char* name) {
}
extern "C" void TrackBrowser_SetTrackFromCup() {
TrackBrowser::Instance->SetTrack(gWorldInstance.GetCurrentCup()->GetTrack());
TrackBrowser::Instance->SetTrack(GetWorld()->GetCurrentCup()->GetTrack());
}
extern "C" void TrackBrowser_NextTrack(void) {

View File

@ -29,7 +29,7 @@ void TrainCrossing::CrossingTrigger() {
s32 i;
OnTriggered = 0;
for (const auto& actor : gWorldInstance.Actors) {
for (const auto& actor : GetWorld()->Actors) {
if (auto train = dynamic_cast<ATrain*>(actor)) {
;
f32 radius = DynamicRadius(train->Locomotive.position, train->Locomotive.velocity, Position);

View File

@ -132,5 +132,3 @@ public:
private:
std::unique_ptr<RaceManager> RaceManagerInstance;
};
extern World gWorldInstance;

View File

@ -87,7 +87,7 @@ void ACloud::Draw(Camera* camera) {
void ACloud::Collision(Player* player, AActor* actor) {
if (!PickedUp) {
if (query_collision_player_vs_actor_item(player, gWorldInstance.ConvertAActorToActor(actor))) {
if (query_collision_player_vs_actor_item(player, GetWorld()->ConvertAActorToActor(actor))) {
// Player has picked up the actor, activate the cloud effect
_player = player;
PickedUp = true;

View File

@ -27,7 +27,7 @@ public:
.Speed = hop, // How high you hop
.SpeedB = gravity, // How much gravity is effected
};
return static_cast<ACloud*>(gWorldInstance.AddActor(new ACloud(params)));
return static_cast<ACloud*>(GetWorld()->AddActor(new ACloud(params)));
}
virtual void Tick() override;

View File

@ -7,9 +7,6 @@
#include "engine/CoreMath.h"
#include "engine/World.h"
class World;
extern World gWorldInstance;
extern "C" {
#include "common_structs.h"
}
@ -32,7 +29,7 @@ public:
.Behaviour = respawnTimer,
.Location = pos,
};
return static_cast<AFallingRock*>(gWorldInstance.AddActor(new AFallingRock(params)));
return static_cast<AFallingRock*>(GetWorld()->AddActor(new AFallingRock(params)));
}
int16_t TimerLength = 80;

View File

@ -31,14 +31,14 @@ public:
.Location = pos,
.Rotation = rot,
};
return static_cast<AFinishline*>(gWorldInstance.AddActor(new AFinishline(params)));
return static_cast<AFinishline*>(GetWorld()->AddActor(new AFinishline(params)));
}
static inline AFinishline* Spawn() {
SpawnParams params = {
.Name = "mk:finishline",
};
return static_cast<AFinishline*>(gWorldInstance.AddActor(new AFinishline(params)));
return static_cast<AFinishline*>(GetWorld()->AddActor(new AFinishline(params)));
}
// Virtual functions to be overridden by derived classes

View File

@ -5,9 +5,6 @@
#include "CoreMath.h"
#include "engine/World.h"
class World;
extern World gWorldInstance;
extern "C" {
#include "common_structs.h"
}
@ -28,7 +25,7 @@ public:
.Velocity = velocity,
.Speed = 182,
};
return static_cast<AMarioSign*>(gWorldInstance.AddActor(new AMarioSign(params)));
return static_cast<AMarioSign*>(GetWorld()->AddActor(new AMarioSign(params)));
}
virtual bool IsMod() override;

View File

@ -32,7 +32,7 @@ public:
.Rotation = rot,
.Scale = scale,
};
return static_cast<AShip*>(gWorldInstance.AddActor(new AShip(params)));
return static_cast<AShip*>(GetWorld()->AddActor(new AShip(params)));
}
AShip::Skin SpawnSkin = Skin::GHOSTSHIP;

View File

@ -24,7 +24,7 @@ public:
.Rotation = rot,
.Scale = scale,
};
return static_cast<ASpaghettiShip*>(gWorldInstance.AddActor(new ASpaghettiShip(params)));
return static_cast<ASpaghettiShip*>(GetWorld()->AddActor(new ASpaghettiShip(params)));
}
virtual void Tick() override;

View File

@ -26,7 +26,7 @@ public:
.Speed = speed,
.SpeedB = radius,
};
return static_cast<AStarship*>(gWorldInstance.AddActor(new AStarship(params)));
return static_cast<AStarship*>(GetWorld()->AddActor(new AStarship(params)));
}
float SpeedB;

View File

@ -106,7 +106,7 @@ public:
.Location = pos,
.Scale = scale,
};
return static_cast<AText*>(gWorldInstance.AddActor(new AText(params)));
return static_cast<AText*>(GetWorld()->AddActor(new AText(params)));
}
// Virtual functions to be overridden by derived classes

View File

@ -25,7 +25,7 @@ public:
.Velocity = velocity,
.Speed = 182,
};
return static_cast<AWarioSign*>(gWorldInstance.AddActor(new AWarioSign(params)));
return static_cast<AWarioSign*>(GetWorld()->AddActor(new AWarioSign(params)));
}
virtual bool IsMod() override;

View File

@ -45,12 +45,12 @@ void TourCamera::Reset() {
void TourCamera::NextShot() {
TourCamera::Reset();
bShotComplete = false;
_camera->pos[0] = gWorldInstance.GetTrack()->TourShots[ShotIndex].Pos.x;
_camera->pos[1] = gWorldInstance.GetTrack()->TourShots[ShotIndex].Pos.y;
_camera->pos[2] = gWorldInstance.GetTrack()->TourShots[ShotIndex].Pos.z;
_camera->lookAt[0] = gWorldInstance.GetTrack()->TourShots[ShotIndex].LookAt.x;
_camera->lookAt[1] = gWorldInstance.GetTrack()->TourShots[ShotIndex].LookAt.y;
_camera->lookAt[2] = gWorldInstance.GetTrack()->TourShots[ShotIndex].LookAt.z;
_camera->pos[0] = GetWorld()->GetTrack()->TourShots[ShotIndex].Pos.x;
_camera->pos[1] = GetWorld()->GetTrack()->TourShots[ShotIndex].Pos.y;
_camera->pos[2] = GetWorld()->GetTrack()->TourShots[ShotIndex].Pos.z;
_camera->lookAt[0] = GetWorld()->GetTrack()->TourShots[ShotIndex].LookAt.x;
_camera->lookAt[1] = GetWorld()->GetTrack()->TourShots[ShotIndex].LookAt.y;
_camera->lookAt[2] = GetWorld()->GetTrack()->TourShots[ShotIndex].LookAt.z;
}
void TourCamera::Stop() {
@ -76,7 +76,7 @@ void TourCamera::Tick() {
if (
(nullptr == _camera) ||
(bTourComplete) ||
(ShotIndex >= gWorldInstance.GetTrack()->TourShots.size())
(ShotIndex >= GetWorld()->GetTrack()->TourShots.size())
) {
Alpha += 5;
if (Alpha == 255) {
@ -108,7 +108,7 @@ void TourCamera::Tick() {
}
}
bool done = TourCamera::MoveCameraAlongSpline(&extraArg, gWorldInstance.GetTrack()->TourShots[ShotIndex].Frames);
bool done = TourCamera::MoveCameraAlongSpline(&extraArg, GetWorld()->GetTrack()->TourShots[ShotIndex].Frames);
// Advance to the next camera shot
if (done) {

View File

@ -44,7 +44,7 @@ namespace Editor {
}
void Editor::GenerateCollision() {
// for (auto& actor : gWorldInstance.Actors) {
// for (auto& actor : GetWorld()->Actors) {
// GenerateCollisionMesh(actor, (Gfx*)actor->Model, 1.0f);
// }
}

View File

@ -249,7 +249,7 @@ std::pair<AActor*, float> ObjectPicker::CheckAActorRay(Ray ray) {
AActor* hitActor = nullptr;
float hitDistance = FLT_MAX;
for (auto actor : gWorldInstance.Actors) {
for (auto actor : GetWorld()->Actors) {
if ((actor->bPendingDestroy) && (!actor->IsMod())) {
continue;
}

View File

@ -42,7 +42,7 @@ namespace Editor {
/**
* Save track properties, static mesh actors, actors, and tour camera
*/
data["Props"] = gWorldInstance.GetTrack()->Props.to_json();
data["Props"] = GetWorld()->GetTrack()->Props.to_json();
nlohmann::json staticMesh;
SaveStaticMeshActors(staticMesh);
@ -54,7 +54,7 @@ namespace Editor {
data["Actors"] = actors;
if (gWorldInstance.GetTrack()->TourShots.size() != 0) {
if (GetWorld()->GetTrack()->TourShots.size() != 0) {
nlohmann::json tour;
SaveTour(tour);
data["Tour"] = tour;
@ -84,7 +84,7 @@ namespace Editor {
}
}
/** Do not use gWorldInstance.CurrentCourse during loading! The current track is not guaranteed! **/
/** Do not use GetWorld()->CurrentCourse during loading! The current track is not guaranteed! **/
void LoadLevel(Track* track, std::string sceneFile) {
SceneFile = sceneFile;
if ((nullptr == track) || (nullptr == track->RootArchive)) {
@ -124,8 +124,8 @@ namespace Editor {
}
void Load_AddStaticMeshActor(const nlohmann::json& actorJson) {
gWorldInstance.StaticMeshActors.push_back(new StaticMeshActor("", FVector(0, 0, 0), IRotator(0, 0, 0), FVector(1, 1, 1), "", nullptr));
auto actor = gWorldInstance.StaticMeshActors.back();
GetWorld()->StaticMeshActors.push_back(new StaticMeshActor("", FVector(0, 0, 0), IRotator(0, 0, 0), FVector(1, 1, 1), "", nullptr));
auto actor = GetWorld()->StaticMeshActors.back();
actor->from_json(actorJson);
printf("After from_json: Pos(%f, %f, %f), Name: %s, Model: %s\n",
@ -180,7 +180,7 @@ namespace Editor {
}
void SaveActors(nlohmann::json& actorList) {
for (const auto& actor : gWorldInstance.Actors) {
for (const auto& actor : GetWorld()->Actors) {
SpawnParams params{};
bool alreadyProcessed = false;
@ -234,7 +234,7 @@ namespace Editor {
}
}
for (const auto& object : gWorldInstance.Objects) {
for (const auto& object : GetWorld()->Objects) {
SpawnParams params;
object->SetSpawnParams(params);
@ -247,17 +247,17 @@ namespace Editor {
}
void SaveStaticMeshActors(nlohmann::json& actorList) {
for (const auto& mesh : gWorldInstance.StaticMeshActors) {
for (const auto& mesh : GetWorld()->StaticMeshActors) {
actorList.push_back(mesh->to_json());
}
}
void SaveTour(nlohmann::json& tour) {
tour["Enabled"] = gWorldInstance.GetTrack()->bTourEnabled;
tour["Enabled"] = GetWorld()->GetTrack()->bTourEnabled;
// Camera shots
tour["Shots"] = nlohmann::json::array();
for (const auto& shot : gWorldInstance.GetTrack()->TourShots) {
for (const auto& shot : GetWorld()->GetTrack()->TourShots) {
tour["Shots"].push_back(ToJson(shot));
}
}
@ -299,7 +299,7 @@ namespace Editor {
return;
}
gWorldInstance.StaticMeshActors.clear(); // Clear existing actors, if any
GetWorld()->StaticMeshActors.clear(); // Clear existing actors, if any
for (const auto& actorJson : data["StaticMeshActors"]) {
Load_AddStaticMeshActor(actorJson);

View File

@ -36,7 +36,7 @@ public:
.Location = pos,
.Rotation = rot,
};
return static_cast<OBat*>(gWorldInstance.AddObject(new OBat(params)));
return static_cast<OBat*>(GetWorld()->AddObject(new OBat(params)));
}
explicit OBat(const SpawnParams& params);

View File

@ -60,7 +60,7 @@ class OBombKart : public OObject {
.Speed = unk_3C, // Only used for podium ceremony. Arbitrarily chose Speed for this
.SpeedB = 2.7f, // Chase speed
};
return static_cast<OBombKart*>(gWorldInstance.AddObject(new OBombKart(params)));
return static_cast<OBombKart*>(GetWorld()->AddObject(new OBombKart(params)));
}
// Spawn object at a point along the tracks path
@ -72,7 +72,7 @@ class OBombKart : public OObject {
.PathPoint = pathPoint,
.Speed = unk_3C, // Only used for podium ceremony. Arbitrarily chose Speed for this
};
return static_cast<OBombKart*>(gWorldInstance.AddObject(new OBombKart(params)));
return static_cast<OBombKart*>(GetWorld()->AddObject(new OBombKart(params)));
}
// Set waypoint to NULL if using a spawn position and not a waypoint.

View File

@ -45,7 +45,7 @@ public:
.TriggerSpan = triggerBoundary,
.RightExitSpan = rightBoundary,
};
return static_cast<OBoos*>(gWorldInstance.AddObject(new OBoos(params)));
return static_cast<OBoos*>(GetWorld()->AddObject(new OBoos(params)));
}
explicit OBoos(const SpawnParams& params);

View File

@ -32,7 +32,7 @@ public:
.Location = pos,
.PathSpan = span,
};
return static_cast<OCheepCheep*>(gWorldInstance.AddObject(new OCheepCheep(params)));
return static_cast<OCheepCheep*>(GetWorld()->AddObject(new OCheepCheep(params)));
}
explicit OCheepCheep(const SpawnParams& params);

View File

@ -37,7 +37,7 @@ public:
.PatrolStart = start,
.PatrolEnd = end,
};
return static_cast<OCrab*>(gWorldInstance.AddObject(new OCrab(params)));
return static_cast<OCrab*>(GetWorld()->AddObject(new OCrab(params)));
}
explicit OCrab(const SpawnParams& params);

View File

@ -32,7 +32,7 @@ public:
.Location = pos,
.Rotation = rot,
};
return static_cast<OFlagpole*>(gWorldInstance.AddObject(new OFlagpole(params)));
return static_cast<OFlagpole*>(GetWorld()->AddObject(new OFlagpole(params)));
}
~OFlagpole() {

View File

@ -33,7 +33,7 @@ public:
.Name = "mk:grand_prix_balloons",
.Location = pos,
};
return static_cast<OGrandPrixBalloons*>(gWorldInstance.AddObject(new OGrandPrixBalloons(params)));
return static_cast<OGrandPrixBalloons*>(GetWorld()->AddObject(new OGrandPrixBalloons(params)));
}
~OGrandPrixBalloons() {

View File

@ -34,7 +34,7 @@ public:
.Location = pos,
.PatrolEnd = patrolPoint,
};
return static_cast<OHedgehog*>(gWorldInstance.AddObject(new OHedgehog(params)));
return static_cast<OHedgehog*>(GetWorld()->AddObject(new OHedgehog(params)));
}
~OHedgehog() {

View File

@ -27,7 +27,7 @@ public:
.Name = "mk:hot_air_balloon",
.Location = pos,
};
return static_cast<OHotAirBalloon*>(gWorldInstance.AddObject(new OHotAirBalloon(params)));
return static_cast<OHotAirBalloon*>(GetWorld()->AddObject(new OHotAirBalloon(params)));
}
virtual void Tick() override;

View File

@ -15,7 +15,7 @@ OMoleGroup::OMoleGroup(std::vector<FVector>& spawns, size_t tickRate) {
_tickRate = tickRate;
for (auto& pos : spawns) {
pos.x * xOrientation;
OMole* ptr = reinterpret_cast<OMole*>(gWorldInstance.AddObject(new OMole(pos, this)));
OMole* ptr = reinterpret_cast<OMole*>(GetWorld()->AddObject(new OMole(pos, this)));
_moles.push_back({ptr, pos, false});
}

View File

@ -49,7 +49,7 @@ public:
.Rotation = rot,
.Speed = diameter, // Diameter of the walking circle
};
return static_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(params)));
return static_cast<OPenguin*>(GetWorld()->AddObject(new OPenguin(params)));
}
PenguinType Type = PenguinType::CHICK;

View File

@ -32,7 +32,7 @@ public:
.Name = "mk:podium",
.Location = pos,
};
return static_cast<OPodium*>(gWorldInstance.AddObject(new OPodium(params)));
return static_cast<OPodium*>(GetWorld()->AddObject(new OPodium(params)));
}
virtual void Tick() override;

View File

@ -35,7 +35,7 @@ public:
.Name = "mk:seagull",
.Location = pos,
};
return static_cast<OSeagull*>(gWorldInstance.AddObject(new OSeagull(params)));
return static_cast<OSeagull*>(GetWorld()->AddObject(new OSeagull(params)));
}
virtual void Tick() override;

View File

@ -25,7 +25,7 @@ public:
.Name = "mk:snowman",
.Location = FVector(pos.x, pos.y, pos.z),
};
return static_cast<OSnowman*>(gWorldInstance.AddObject(new OSnowman(params)));
return static_cast<OSnowman*>(GetWorld()->AddObject(new OSnowman(params)));
}
explicit OSnowman(const SpawnParams& params);

View File

@ -8,9 +8,6 @@
#include "engine/objects/Object.h"
class World;
extern World gWorldInstance;
extern "C" {
#include "macros.h"
#include "main.h"
@ -61,7 +58,7 @@ public:
.PrimAlpha = primAlpha,
.BoundingBoxSize = boundingBoxSize
};
return static_cast<OThwomp*>(gWorldInstance.AddObject(new OThwomp(params)));
return static_cast<OThwomp*>(GetWorld()->AddObject(new OThwomp(params)));
}
explicit OThwomp(const SpawnParams& params);

View File

@ -34,7 +34,7 @@ public:
.Rotation = rot,
.Scale = FVector(0, scale, 0),
};
return static_cast<OTrashBin*>(gWorldInstance.AddObject(new OTrashBin(params)));
return static_cast<OTrashBin*>(GetWorld()->AddObject(new OTrashBin(params)));
}
explicit OTrashBin(const SpawnParams& params);

View File

@ -92,7 +92,7 @@ OTrophy::OTrophy(const SpawnParams& params) : OObject(params) {
object->pos[1] = spawnPos.y;
object->pos[2] = spawnPos.z;
_emitter = reinterpret_cast<StarEmitter*>(gWorldInstance.AddEmitter(new StarEmitter()));
_emitter = reinterpret_cast<StarEmitter*>(GetWorld()->AddEmitter(new StarEmitter()));
}
void OTrophy::SetSpawnParams(SpawnParams& params) {

View File

@ -44,7 +44,7 @@ public:
.Behaviour = bhv,
.Location = pos,
};
return static_cast<OTrophy*>(gWorldInstance.AddObject(new OTrophy(params)));
return static_cast<OTrophy*>(GetWorld()->AddObject(new OTrophy(params)));
}
explicit OTrophy(const SpawnParams& params);

View File

@ -659,28 +659,28 @@ void Harbour::BeginPlay() {
Vec3f pos = {0, 80, 0};
// gWorldInstance.AddActor(new ACloud(pos));
// GetWorld()->AddActor(new ACloud(pos));
// gWorldInstance.AddActor(new OSeagull(0, pos));
// gWorldInstance.AddActor(new OSeagull(1, pos));
// gWorldInstance.AddActor(new OSeagull(2, pos));
// gWorldInstance.AddActor(new OSeagull(3, pos));
// gWorldInstance.AddObject(new OCheepCheep(FVector(0, 40, 0), OCheepCheep::CheepType::RACE, IPathSpan(0, 10)));
// gWorldInstance.AddObject(new OTrophy(FVector(0,0,0), OTrophy::TrophyType::GOLD, OTrophy::Behaviour::GO_FISH));
//gWorldInstance.AddObject(new OSnowman(FVector(0, 0, 0)));
//gWorldInstance.AddObject(new OTrashBin(FVector(0.0f, 0.0f, 0.0f), IRotator(0, 90, 0), 1.0f, OTrashBin::Behaviour::MUNCHING));
// GetWorld()->AddActor(new OSeagull(0, pos));
// GetWorld()->AddActor(new OSeagull(1, pos));
// GetWorld()->AddActor(new OSeagull(2, pos));
// GetWorld()->AddActor(new OSeagull(3, pos));
// GetWorld()->AddObject(new OCheepCheep(FVector(0, 40, 0), OCheepCheep::CheepType::RACE, IPathSpan(0, 10)));
// GetWorld()->AddObject(new OTrophy(FVector(0,0,0), OTrophy::TrophyType::GOLD, OTrophy::Behaviour::GO_FISH));
//GetWorld()->AddObject(new OSnowman(FVector(0, 0, 0)));
//GetWorld()->AddObject(new OTrashBin(FVector(0.0f, 0.0f, 0.0f), IRotator(0, 90, 0), 1.0f, OTrashBin::Behaviour::MUNCHING));
//gWorldInstance.AddObject(new OHedgehog(FVector(0, 0, 0), FVector2D(0, -200), 9));
//gWorldInstance.AddObject(new OFlagpole(FVector(0, 0, -200), 0x400));
// gWorldInstance.AddObject(new OHotAirBalloon(FVector(0.0, 20.0f, -200.0f)));
//GetWorld()->AddObject(new OHedgehog(FVector(0, 0, 0), FVector2D(0, -200), 9));
//GetWorld()->AddObject(new OFlagpole(FVector(0, 0, -200), 0x400));
// GetWorld()->AddObject(new OHotAirBalloon(FVector(0.0, 20.0f, -200.0f)));
//gWorldInstance.AddObject(new OCrab(FVector2D(0, 0), FVector2D(0, -200)));
// gWorldInstance.AddActor(new ABowserStatue(FVector(-200, 0, 0), ABowserStatue::Behaviour::CRUSH));
//GetWorld()->AddObject(new OCrab(FVector2D(0, 0), FVector2D(0, -200)));
// GetWorld()->AddActor(new ABowserStatue(FVector(-200, 0, 0), ABowserStatue::Behaviour::CRUSH));
// gWorldInstance.AddObject(new OBoos(10, IPathSpan(0, 5), IPathSpan(18, 23), IPathSpan(25, 50)));
// GetWorld()->AddObject(new OBoos(10, IPathSpan(0, 5), IPathSpan(18, 23), IPathSpan(25, 50)));
//gWorldInstance.AddActor(new AShip(FVector(-1694, -111, 1451), AShip::Skin::GHOSTSHIP));
//gWorldInstance.AddActor(new AShip(FVector(2811, -83, 966), AShip::Skin::SHIP2));
//GetWorld()->AddActor(new AShip(FVector(-1694, -111, 1451), AShip::Skin::GHOSTSHIP));
//GetWorld()->AddActor(new AShip(FVector(2811, -83, 966), AShip::Skin::SHIP2));
}
void Harbour::WhatDoesThisDo(Player* player, int8_t playerId) {

View File

@ -142,8 +142,8 @@ void KalimariDesert::BeginPlay() {
Vec3f crossingPos = {-2500, 2, 2355};
Vec3f crossingPos2 = {-1639, 2, 68};
uintptr_t* crossing1 = (uintptr_t*) gWorldInstance.AddCrossing(crossingPos, 306, 310, 900.0f, 650.0f);
uintptr_t* crossing2 = (uintptr_t*) gWorldInstance.AddCrossing(crossingPos2, 176, 182, 900.0f, 650.0f);
uintptr_t* crossing1 = (uintptr_t*) GetWorld()->AddCrossing(crossingPos, 306, 310, 900.0f, 650.0f);
uintptr_t* crossing2 = (uintptr_t*) GetWorld()->AddCrossing(crossingPos2, 176, 182, 900.0f, 650.0f);
vec3f_set(position, -1680.0f, 2.0f, 35.0f);
position[0] *= gTrackDirection;

View File

@ -209,9 +209,9 @@ void MooMooFarm::BeginPlay() {
break;
}
gWorldInstance.AddObject(new OMoleGroup(moleSpawns1, tick1));
gWorldInstance.AddObject(new OMoleGroup(moleSpawns2, tick2));
gWorldInstance.AddObject(new OMoleGroup(moleSpawns3, tick3));
GetWorld()->AddObject(new OMoleGroup(moleSpawns1, tick1));
GetWorld()->AddObject(new OMoleGroup(moleSpawns2, tick2));
GetWorld()->AddObject(new OMoleGroup(moleSpawns3, tick3));
}
if (gModeSelection == VERSUS) {

View File

@ -133,9 +133,9 @@ void RainbowRoad::BeginPlay() {
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_rainbow_road_item_box_spawns));
if (gGamestate != CREDITS_SEQUENCE) {
gWorldInstance.AddObject(new OChainChomp());
gWorldInstance.AddObject(new OChainChomp());
gWorldInstance.AddObject(new OChainChomp());
GetWorld()->AddObject(new OChainChomp());
GetWorld()->AddObject(new OChainChomp());
GetWorld()->AddObject(new OChainChomp());
}
if (gModeSelection == VERSUS) {

View File

@ -185,7 +185,7 @@ void TestTrack::BeginPlay() {
vec3f_set(position, 50.0f, 2.0f, 50.0f);
Vec3f crossingPos = {0, 2, 0};
uintptr_t* crossing1 = (uintptr_t*) gWorldInstance.AddCrossing(crossingPos, 0, 2, 900.0f, 650.0f);
uintptr_t* crossing1 = (uintptr_t*) GetWorld()->AddCrossing(crossingPos, 0, 2, 900.0f, 650.0f);
position[0] *= gTrackDirection;
rrxing = (struct RailroadCrossing*) GET_ACTOR(add_actor_to_empty_slot(position, rotation, velocity,
@ -193,34 +193,34 @@ void TestTrack::BeginPlay() {
rrxing->crossingTrigger = crossing1;
Vec3f pos = {0, 80, 0};
// gWorldInstance.AddActor(new ACloud(pos));
// GetWorld()->AddActor(new ACloud(pos));
// gWorldInstance.AddActor(new OSeagull(0, pos));
// gWorldInstance.AddActor(new OSeagull(1, pos));
// gWorldInstance.AddActor(new OSeagull(2, pos));
// gWorldInstance.AddActor(new OSeagull(3, pos));
// gWorldInstance.AddObject(new OCheepCheep(FVector(0, 40, 0), OCheepCheep::CheepType::RACE, IPathSpan(0, 10)));
// GetWorld()->AddActor(new OSeagull(0, pos));
// GetWorld()->AddActor(new OSeagull(1, pos));
// GetWorld()->AddActor(new OSeagull(2, pos));
// GetWorld()->AddActor(new OSeagull(3, pos));
// GetWorld()->AddObject(new OCheepCheep(FVector(0, 40, 0), OCheepCheep::CheepType::RACE, IPathSpan(0, 10)));
OTrophy::Spawn(FVector(0,0,0), OTrophy::TrophyType::GOLD, OTrophy::Behaviour::GO_FISH);
//gWorldInstance.AddObject(new OSnowman(FVector(0, 0, 0)));
//gWorldInstance.AddObject(new OTrashBin(FVector(0.0f, 0.0f, 0.0f), IRotator(0, 90, 0), 1.0f, OTrashBin::Behaviour::MUNCHING));
//GetWorld()->AddObject(new OSnowman(FVector(0, 0, 0)));
//GetWorld()->AddObject(new OTrashBin(FVector(0.0f, 0.0f, 0.0f), IRotator(0, 90, 0), 1.0f, OTrashBin::Behaviour::MUNCHING));
//gWorldInstance.AddObject(new OHedgehog(FVector(0, 0, 0), FVector2D(0, -200), 9));
//gWorldInstance.AddObject(new OFlagpole(FVector(0, 0, -200), 0x400));
// gWorldInstance.AddObject(new OHotAirBalloon(FVector(0.0, 20.0f, -200.0f)));
//GetWorld()->AddObject(new OHedgehog(FVector(0, 0, 0), FVector2D(0, -200), 9));
//GetWorld()->AddObject(new OFlagpole(FVector(0, 0, -200), 0x400));
// GetWorld()->AddObject(new OHotAirBalloon(FVector(0.0, 20.0f, -200.0f)));
//gWorldInstance.AddObject(new OCrab(FVector2D(0, 0), FVector2D(0, -200)));
// gWorldInstance.AddActor(new ABowserStatue(FVector(-200, 0, 0), ABowserStatue::Behaviour::CRUSH));
//GetWorld()->AddObject(new OCrab(FVector2D(0, 0), FVector2D(0, -200)));
// GetWorld()->AddActor(new ABowserStatue(FVector(-200, 0, 0), ABowserStatue::Behaviour::CRUSH));
// gWorldInstance.AddObject(new OBoos(10, IPathSpan(0, 5), IPathSpan(18, 23), IPathSpan(25, 50)));
// GetWorld()->AddObject(new OBoos(10, IPathSpan(0, 5), IPathSpan(18, 23), IPathSpan(25, 50)));
//OThwomp::Spawn(0, 0, 0, 1.0f, 0, 1, 7);
//gWorldInstance.AddTrain(ATrain::TenderStatus::HAS_TENDER, 5, 2.5f, 0);
//gWorldInstance.AddTrain(ATrain::TenderStatus::HAS_TENDER, 5, 2.5f, 8);
//GetWorld()->AddTrain(ATrain::TenderStatus::HAS_TENDER, 5, 2.5f, 0);
//GetWorld()->AddTrain(ATrain::TenderStatus::HAS_TENDER, 5, 2.5f, 8);
OBombKart::Spawn(0, 25, 4, 0.8333333f);
OBombKart::Spawn(0, 45, 4, 0.8333333f);
// gWorldInstance.AddActor(new AShip(FVector(0, 0, 0), AShip::Skin::SHIP3));
// GetWorld()->AddActor(new AShip(FVector(0, 0, 0), AShip::Skin::SHIP3));
// OGrandPrixBalloons::Spawn(FVector(0, 0, 0));
}

View File

@ -553,7 +553,7 @@ f32 Track::GetWaterLevel(FVector pos, Collision* collision) {
float highestWater = -FLT_MAX;
bool found = false;
for (const auto& volume : gWorldInstance.GetTrack()->WaterVolumes) {
for (const auto& volume : GetWorld()->GetTrack()->WaterVolumes) {
if (pos.x >= volume.MinX && pos.x <= volume.MaxX && pos.z >= volume.MinZ && pos.z <= volume.MaxZ) {
// Choose the highest water volume the player is over
if (!found || volume.Height > highestWater) {
@ -564,7 +564,7 @@ f32 Track::GetWaterLevel(FVector pos, Collision* collision) {
}
// If player is not over-top of a water volume then return the tracks default water level
return found ? highestWater : gWorldInstance.GetTrack()->Props.WaterLevel;
return found ? highestWater : GetWorld()->GetTrack()->Props.WaterLevel;
}
void Track::ScrollingTextures() {

View File

@ -55,7 +55,7 @@ class ABoat : public AActor {
.PathPoint = pathPoint,
.Speed = speed,
};
return static_cast<ABoat*>(gWorldInstance.AddActor(new ABoat(params)));
return static_cast<ABoat*>(GetWorld()->AddActor(new ABoat(params)));
}
ABoat::SpawnMode SpawnType = ABoat::SpawnMode::AUTO;

View File

@ -48,7 +48,7 @@ class ABus : public AActor {
.Speed = speedA,
.SpeedB = speedB
};
return static_cast<ABus*>(gWorldInstance.AddActor(new ABus(params)));
return static_cast<ABus*>(GetWorld()->AddActor(new ABus(params)));
}
explicit ABus(const SpawnParams& params);

View File

@ -41,7 +41,7 @@ class ACar : public AActor {
.Speed = speedA,
.SpeedB = speedB
};
return static_cast<ACar*>(gWorldInstance.AddActor(new ACar(params)));
return static_cast<ACar*>(GetWorld()->AddActor(new ACar(params)));
}
const char* Type;

View File

@ -48,7 +48,7 @@ class ATankerTruck : public AActor {
.Speed = speedA,
.SpeedB = speedB
};
return static_cast<ATankerTruck*>(gWorldInstance.AddActor(new ATankerTruck(params)));
return static_cast<ATankerTruck*>(GetWorld()->AddActor(new ATankerTruck(params)));
}
explicit ATankerTruck(const SpawnParams& params);

View File

@ -8,9 +8,6 @@
#include "Actor.h"
class World;
extern World gWorldInstance;
extern "C" {
#include "main.h"
#include "vehicles.h"
@ -72,7 +69,7 @@ class ATrain : public AActor {
.Bool = tender,
.Speed = speed, // 120.0f is about the maximum usable value
};
return static_cast<ATrain*>(gWorldInstance.AddActor(new ATrain(params)));
return static_cast<ATrain*>(GetWorld()->AddActor(new ATrain(params)));
}
virtual void SetSpawnParams(SpawnParams& params);

View File

@ -53,7 +53,7 @@ class ATruck : public AActor {
.Speed = speedA,
.SpeedB = speedB
};
return static_cast<ATruck*>(gWorldInstance.AddActor(new ATruck(params)));
return static_cast<ATruck*>(GetWorld()->AddActor(new ATruck(params)));
}
explicit ATruck(const SpawnParams& params);

View File

@ -52,7 +52,7 @@ extern "C" void Graphics_PushFrame(Gfx* data) {
}
// Create the world instance
World gWorldInstance;
static World sWorldInstance;
// Deferred cleaning when clearing all actors in the editor
bool bCleanWorld = false;
@ -87,11 +87,11 @@ void CustomEngineInit() {
gPodiumCeremony = std::make_unique<PodiumCeremony>();
gMushroomCup = new Cup("mk:mushroom_cup", "Mushroom Cup", {
"mk:luigi_raceway",
"mk:moo_moo_farm",
"mk:koopa_troopa_beach",
"mk:kalimari_desert"
});
"mk:luigi_raceway",
"mk:moo_moo_farm",
"mk:koopa_troopa_beach",
"mk:kalimari_desert"
});
gFlowerCup = new Cup("mk:flower_cup", "Flower Cup", {
"mk:toads_turnpike",
@ -122,11 +122,11 @@ void CustomEngineInit() {
});
/* Instantiate Cups */
gWorldInstance.AddCup(gMushroomCup);
gWorldInstance.AddCup(gFlowerCup);
gWorldInstance.AddCup(gStarCup);
gWorldInstance.AddCup(gSpecialCup);
gWorldInstance.AddCup(gBattleCup);
GetWorld()->AddCup(gMushroomCup);
GetWorld()->AddCup(gFlowerCup);
GetWorld()->AddCup(gStarCup);
GetWorld()->AddCup(gSpecialCup);
GetWorld()->AddCup(gBattleCup);
//SelectMarioRaceway(); // This results in a nullptr
SetMarioRaceway();
@ -159,45 +159,45 @@ void HM_DrawIntro() {
// Set default track; mario raceway
void SetMarioRaceway(void) {
SelectMarioRaceway();
gWorldInstance.SetCurrentCup(gMushroomCup);
gWorldInstance.GetCurrentCup()->CursorPosition = 3;
gWorldInstance.CupIndex = 0;
GetWorld()->SetCurrentCup(gMushroomCup);
GetWorld()->GetCurrentCup()->CursorPosition = 3;
GetWorld()->CupIndex = 0;
}
u32 WorldNextCup(void) {
return gWorldInstance.NextCup();
return GetWorld()->NextCup();
}
u32 WorldPreviousCup(void) {
return gWorldInstance.PreviousCup();
return GetWorld()->PreviousCup();
}
void CM_SetCup(void* cup) {
gWorldInstance.SetCurrentCup((Cup*) cup);
GetWorld()->SetCurrentCup((Cup*) cup);
}
void* GetCup() {
return gWorldInstance.GetCurrentCup();
return GetWorld()->GetCurrentCup();
}
u32 GetCupIndex(void) {
return gWorldInstance.GetCupIndex();
return GetWorld()->GetCupIndex();
}
void CM_SetCupIndex(size_t index) {
gWorldInstance.SetCupIndex(index);
GetWorld()->SetCupIndex(index);
}
const char* GetCupName(void) {
return gWorldInstance.GetCurrentCup()->Name;
return GetWorld()->GetCurrentCup()->Name;
}
void LoadTrack() {
gWorldInstance.GetRaceManager().Load();
GetWorld()->GetRaceManager().Load();
}
void CM_VehicleCollision(s32 playerId, Player* player) {
for (auto& actor : gWorldInstance.Actors) {
for (auto& actor : GetWorld()->Actors) {
if (actor) {
actor->VehicleCollision(playerId, player);
}
@ -205,7 +205,7 @@ void CM_VehicleCollision(s32 playerId, Player* player) {
}
void CM_BombKartsWaypoint(s32 cameraId) {
for (auto& object : gWorldInstance.Objects) {
for (auto& object : GetWorld()->Objects) {
if (auto kart = dynamic_cast<OBombKart*>(object)) {
if (kart) {
kart->Waypoint(cameraId);
@ -221,26 +221,26 @@ void CM_DisplayBattleBombKart(s32 playerId, s32 primAlpha) {
}
if (primAlpha == 0) {
gWorldInstance.mPlayerBombKart[playerId].state = PlayerBombKart::PlayerBombKartState::DISABLED;
gWorldInstance.mPlayerBombKart[playerId]._primAlpha = primAlpha;
GetWorld()->mPlayerBombKart[playerId].state = PlayerBombKart::PlayerBombKartState::DISABLED;
GetWorld()->mPlayerBombKart[playerId]._primAlpha = primAlpha;
} else {
gWorldInstance.mPlayerBombKart[playerId].state = PlayerBombKart::PlayerBombKartState::ACTIVE;
gWorldInstance.mPlayerBombKart[playerId]._primAlpha = primAlpha;
GetWorld()->mPlayerBombKart[playerId].state = PlayerBombKart::PlayerBombKartState::ACTIVE;
GetWorld()->mPlayerBombKart[playerId]._primAlpha = primAlpha;
}
}
void CM_DrawBattleBombKarts(s32 cameraId) {
for (size_t i = 0; i < gPlayerCount; i++) {
gWorldInstance.mPlayerBombKart[i].Draw(i, cameraId);
GetWorld()->mPlayerBombKart[i].Draw(i, cameraId);
}
}
void CM_ClearVehicles(void) {
gWorldInstance.Crossings.clear();
GetWorld()->Crossings.clear();
}
void CM_CrossingTrigger() {
for (auto& crossing : gWorldInstance.Crossings) {
for (auto& crossing : GetWorld()->Crossings) {
if (crossing) {
crossing->CrossingTrigger();
}
@ -248,7 +248,7 @@ void CM_CrossingTrigger() {
}
void CM_AICrossingBehaviour(s32 playerId) {
for (auto& crossing : gWorldInstance.Crossings) {
for (auto& crossing : GetWorld()->Crossings) {
if (crossing) {
crossing->AICrossingBehaviour(playerId);
}
@ -271,15 +271,15 @@ s32 CM_GetCrossingOnTriggered(uintptr_t* crossing) {
* They do not use DrawCredits() and they do not use track sections.
*/
void CM_DrawTrack(ScreenContext* screen) {
if (nullptr == gWorldInstance.GetTrack()) {
if (nullptr == GetWorld()->GetTrack()) {
return;
}
// Custom tracks should never use DrawCredits();
if (gWorldInstance.GetTrack()->IsMod()) {
if (GetWorld()->GetTrack()->IsMod()) {
switch(screen->camera->renderMode) {
default:
gWorldInstance.GetTrack()->Draw(screen);
GetWorld()->GetTrack()->Draw(screen);
break;
case RENDER_COLLISION_MESH:
render_collision();
@ -288,10 +288,10 @@ void CM_DrawTrack(ScreenContext* screen) {
} else {
switch(screen->camera->renderMode) {
case RENDER_FULL_SCENE:
gWorldInstance.GetTrack()->DrawCredits();
GetWorld()->GetTrack()->DrawCredits();
break;
case RENDER_TRACK_SECTIONS:
gWorldInstance.GetTrack()->Draw(screen);
GetWorld()->GetTrack()->Draw(screen);
break;
case RENDER_COLLISION_MESH:
render_collision();
@ -301,20 +301,20 @@ void CM_DrawTrack(ScreenContext* screen) {
}
void CM_TickActors() {
if (gWorldInstance.GetTrack()) {
gWorldInstance.TickActors();
if (GetWorld()->GetTrack()) {
GetWorld()->TickActors();
}
}
void CM_DrawActors(Camera* camera) {
//AActor* a = gWorldInstance.ConvertActorToAActor(actor);
for (const auto& actor : gWorldInstance.Actors) {
//AActor* a = GetWorld()->ConvertActorToAActor(actor);
for (const auto& actor : GetWorld()->Actors) {
if (actor->IsMod()) {
actor->Draw(camera);
}
}
for (auto* camera : gWorldInstance.Cameras) {
for (auto* camera : GetWorld()->Cameras) {
if (auto* tourCam = dynamic_cast<TourCamera*>(camera)) {
if (tourCam->IsActive()) {
tourCam->Draw();
@ -324,40 +324,40 @@ void CM_DrawActors(Camera* camera) {
}
void CM_DrawStaticMeshActors() {
gWorldInstance.DrawStaticMeshActors();
GetWorld()->DrawStaticMeshActors();
}
void CM_BeginPlay() {
static bool tour = false;
auto track = gWorldInstance.GetTrack();
auto track = GetWorld()->GetTrack();
if (nullptr == track) {
return;
}
if (tour) {
// gWorldInstance.Cameras[2]->SetActive(true);
// gScreenOneCtx->camera = gWorldInstance.Cameras[2]->Get();
if (reinterpret_cast<TourCamera*>(gWorldInstance.Cameras[2])->IsTourComplete()) {
// GetWorld()->Cameras[2]->SetActive(true);
// gScreenOneCtx->camera = GetWorld()->Cameras[2]->Get();
if (reinterpret_cast<TourCamera*>(GetWorld()->Cameras[2])->IsTourComplete()) {
tour = false;
gScreenOneCtx->pendingCamera = &cameras[0];
}
}
if (gWorldInstance.GetTrack()) {
if (GetWorld()->GetTrack()) {
// This line should likely be moved.
// It's here so PreInit is after the scene file has been loaded
// It used to be at the start of BeginPlay
Editor::LoadLevel(gWorldInstance.GetTrack().get(), gWorldInstance.GetTrack()->SceneFilePtr);
Editor::LoadLevel(GetWorld()->GetTrack().get(), GetWorld()->GetTrack()->SceneFilePtr);
}
gWorldInstance.GetRaceManager().PreInit();
gWorldInstance.GetRaceManager().BeginPlay();
gWorldInstance.GetRaceManager().PostInit();
GetWorld()->GetRaceManager().PreInit();
GetWorld()->GetRaceManager().BeginPlay();
GetWorld()->GetRaceManager().PostInit();
}
Camera* CM_GetPlayerCamera(s32 playerIndex) {
for (GameCamera* cam : gWorldInstance.Cameras) {
for (GameCamera* cam : GetWorld()->Cameras) {
// Make sure this is a player camera and not a different type of camera
if (typeid(*cam) == typeid(GameCamera)) {
Camera* camera = cam->Get();
@ -370,7 +370,7 @@ Camera* CM_GetPlayerCamera(s32 playerIndex) {
}
void CM_SetViewProjection(Camera* camera) {
for (GameCamera* gameCamera : gWorldInstance.Cameras) {
for (GameCamera* gameCamera : GetWorld()->Cameras) {
if (camera == gameCamera->Get()) {
gameCamera->SetViewProjection();
}
@ -378,62 +378,62 @@ void CM_SetViewProjection(Camera* camera) {
}
void CM_TickCameras() {
gWorldInstance.TickCameras();
GetWorld()->TickCameras();
}
Camera* CM_AddCamera(Vec3f spawn, s16 rot, u32 mode) {
if (gWorldInstance.Cameras.size() >= NUM_CAMERAS) {
if (GetWorld()->Cameras.size() >= NUM_CAMERAS) {
printf("Reached the max number of cameras, %d\n", NUM_CAMERAS);
return nullptr;
}
gWorldInstance.Cameras.push_back(new GameCamera(FVector(spawn[0], spawn[1], spawn[2]), rot, mode));
return gWorldInstance.Cameras.back()->Get();
GetWorld()->Cameras.push_back(new GameCamera(FVector(spawn[0], spawn[1], spawn[2]), rot, mode));
return GetWorld()->Cameras.back()->Get();
}
Camera* CM_AddFreeCamera(Vec3f spawn, s16 rot, u32 mode) {
if (gWorldInstance.Cameras.size() >= NUM_CAMERAS) {
if (GetWorld()->Cameras.size() >= NUM_CAMERAS) {
printf("Reached the max number of cameras, %d\n", NUM_CAMERAS);
return nullptr;
}
gWorldInstance.Cameras.push_back(new FreeCamera(FVector(spawn[0], spawn[1], spawn[2]), rot, mode));
return gWorldInstance.Cameras.back()->Get();
GetWorld()->Cameras.push_back(new FreeCamera(FVector(spawn[0], spawn[1], spawn[2]), rot, mode));
return GetWorld()->Cameras.back()->Get();
}
Camera* CM_AddTourCamera(Vec3f spawn, s16 rot, u32 mode) {
if (gWorldInstance.Cameras.size() >= NUM_CAMERAS) {
if (GetWorld()->Cameras.size() >= NUM_CAMERAS) {
// This is to prevent soft locking the game
printf("Reached the max number of cameras, %d\n", NUM_CAMERAS);
if (gWorldInstance.GetTrack()->bTourEnabled) {
if (GetWorld()->GetTrack()->bTourEnabled) {
spawn_and_set_player_spawns();
}
return nullptr;
}
if (nullptr == gWorldInstance.GetTrack()) {
if (nullptr == GetWorld()->GetTrack()) {
// This is to prevent soft locking the game
if (gWorldInstance.GetTrack()->bTourEnabled) {
if (GetWorld()->GetTrack()->bTourEnabled) {
spawn_and_set_player_spawns();
}
return nullptr;
}
if (gWorldInstance.GetTrack()->TourShots.size() == 0) {
if (GetWorld()->GetTrack()->TourShots.size() == 0) {
// This is to prevent soft locking the game
if (gWorldInstance.GetTrack()->bTourEnabled) {
if (GetWorld()->GetTrack()->bTourEnabled) {
spawn_and_set_player_spawns();
}
return nullptr;
}
gWorldInstance.Cameras.push_back(new TourCamera(FVector(spawn[0], spawn[1], spawn[2]), rot, mode));
TourCamera* tour = static_cast<TourCamera*>(gWorldInstance.Cameras.back());
GetWorld()->Cameras.push_back(new TourCamera(FVector(spawn[0], spawn[1], spawn[2]), rot, mode));
TourCamera* tour = static_cast<TourCamera*>(GetWorld()->Cameras.back());
tour->SetActive(true);
return tour->Get();
}
bool CM_IsTourEnabled() {
if (nullptr != gWorldInstance.GetTrack()) {
if ((gWorldInstance.GetTrack()->bTourEnabled) && (gTourComplete == false)) {
if (nullptr != GetWorld()->GetTrack()) {
if ((GetWorld()->GetTrack()->bTourEnabled) && (gTourComplete == false)) {
return true;
} else {
return false;
@ -444,12 +444,12 @@ bool CM_IsTourEnabled() {
}
Camera* CM_AddLookBehindCamera(Vec3f spawn, s16 rot, u32 mode) {
if (gWorldInstance.Cameras.size() >= NUM_CAMERAS) {
if (GetWorld()->Cameras.size() >= NUM_CAMERAS) {
printf("Reached the max number of cameras, %d\n", NUM_CAMERAS);
return nullptr;
}
gWorldInstance.Cameras.push_back(new LookBehindCamera(FVector(spawn[0], spawn[1], spawn[2]), rot, mode));
return gWorldInstance.Cameras.back()->Get();
GetWorld()->Cameras.push_back(new LookBehindCamera(FVector(spawn[0], spawn[1], spawn[2]), rot, mode));
return GetWorld()->Cameras.back()->Get();
}
void CM_AttachCamera(Camera* camera, s32 playerIdx) {
@ -457,13 +457,13 @@ void CM_AttachCamera(Camera* camera, s32 playerIdx) {
}
void CM_CameraSetActive(size_t idx, bool state) {
if (idx < gWorldInstance.Cameras.size()) {
gWorldInstance.Cameras[idx]->SetActive(state);
if (idx < GetWorld()->Cameras.size()) {
GetWorld()->Cameras[idx]->SetActive(state);
}
}
void CM_SetFreeCamera(bool state) {
for (auto* cam : gWorldInstance.Cameras) {
for (auto* cam : GetWorld()->Cameras) {
if (cam->Get() == gScreenOneCtx->freeCamera) {
if (state) {
gScreenOneCtx->pendingCamera = gScreenOneCtx->freeCamera;
@ -483,7 +483,7 @@ void CM_SetFreeCamera(bool state) {
}
void CM_ActivateTourCamera(Camera* camera) {
for (auto* cam : gWorldInstance.Cameras) {
for (auto* cam : GetWorld()->Cameras) {
if (cam->Get() == camera) {
cam->SetActive(true);
}
@ -491,22 +491,22 @@ void CM_ActivateTourCamera(Camera* camera) {
}
void CM_TickObjects() {
if (gWorldInstance.GetTrack()) {
gWorldInstance.TickObjects();
if (GetWorld()->GetTrack()) {
GetWorld()->TickObjects();
}
}
// A couple objects such as lakitu are ticked inside of process_game_tick which support 60fps.
// This is a fallback to support that.
void CM_TickObjects60fps() {
if (gWorldInstance.GetTrack()) {
gWorldInstance.TickObjects60fps();
if (GetWorld()->GetTrack()) {
GetWorld()->TickObjects60fps();
}
}
void CM_DrawObjects(s32 cameraId) {
if (gWorldInstance.GetTrack()) {
gWorldInstance.DrawObjects(cameraId);
if (GetWorld()->GetTrack()) {
GetWorld()->DrawObjects(cameraId);
}
}
@ -523,110 +523,110 @@ void CM_Editor_SetLevelDimensions(s16 minX, s16 maxX, s16 minZ, s16 maxZ, s16 mi
}
void CM_TickParticles() {
if (gWorldInstance.GetTrack()) {
gWorldInstance.TickParticles();
if (GetWorld()->GetTrack()) {
GetWorld()->TickParticles();
}
}
void CM_DrawParticles(s32 cameraId) {
if (gWorldInstance.GetTrack()) {
gWorldInstance.DrawParticles(cameraId);
if (GetWorld()->GetTrack()) {
GetWorld()->DrawParticles(cameraId);
}
}
void CM_InitClouds() {
if (gWorldInstance.GetTrack()) {
gWorldInstance.GetTrack()->InitClouds();
if (GetWorld()->GetTrack()) {
GetWorld()->GetTrack()->InitClouds();
}
}
void CM_TickClouds(s32 arg0, Camera* camera) {
if (gWorldInstance.GetTrack()) {
gWorldInstance.GetTrack()->TickClouds(arg0, camera);
if (GetWorld()->GetTrack()) {
GetWorld()->GetTrack()->TickClouds(arg0, camera);
}
}
void CM_Waypoints(Player* player, int8_t playerId) {
if (gWorldInstance.GetTrack()) {
gWorldInstance.GetTrack()->Waypoints(player, playerId);
if (GetWorld()->GetTrack()) {
GetWorld()->GetTrack()->Waypoints(player, playerId);
}
}
void CM_SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6,
f32* arg7) {
if (gWorldInstance.GetTrack()) {
gWorldInstance.GetTrack()->SomeCollisionThing(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
if (GetWorld()->GetTrack()) {
GetWorld()->GetTrack()->SomeCollisionThing(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
}
}
void CM_InitTrackObjects() {
if (gWorldInstance.GetTrack()) {
gWorldInstance.GetTrack()->InitTrackObjects();
if (GetWorld()->GetTrack()) {
GetWorld()->GetTrack()->InitTrackObjects();
}
}
void CM_TickTrackObjects() {
if (gWorldInstance.GetTrack()) {
gWorldInstance.GetTrack()->TickTrackObjects();
if (GetWorld()->GetTrack()) {
GetWorld()->GetTrack()->TickTrackObjects();
}
TrainSmokeTick();
}
void CM_DrawTrackObjects(s32 cameraId) {
if (gWorldInstance.GetTrack()) {
gWorldInstance.GetTrack()->DrawTrackObjects(cameraId);
if (GetWorld()->GetTrack()) {
GetWorld()->GetTrack()->DrawTrackObjects(cameraId);
}
TrainSmokeDraw(cameraId);
}
void CM_SomeSounds() {
if (gWorldInstance.GetTrack()) {
gWorldInstance.GetTrack()->SomeSounds();
if (GetWorld()->GetTrack()) {
GetWorld()->GetTrack()->SomeSounds();
}
}
void CM_CreditsSpawnActors() {
if (gWorldInstance.GetTrack()) {
gWorldInstance.GetTrack()->CreditsSpawnActors();
if (GetWorld()->GetTrack()) {
GetWorld()->GetTrack()->CreditsSpawnActors();
}
}
void CM_WhatDoesThisDo(Player* player, int8_t playerId) {
if (gWorldInstance.GetTrack()) {
gWorldInstance.GetTrack()->WhatDoesThisDo(player, playerId);
if (GetWorld()->GetTrack()) {
GetWorld()->GetTrack()->WhatDoesThisDo(player, playerId);
}
}
void CM_WhatDoesThisDoAI(Player* player, int8_t playerId) {
if (gWorldInstance.GetTrack()) {
gWorldInstance.GetTrack()->WhatDoesThisDoAI(player, playerId);
if (GetWorld()->GetTrack()) {
GetWorld()->GetTrack()->WhatDoesThisDoAI(player, playerId);
}
}
void CM_SetStaffGhost() {
if (gWorldInstance.GetTrack()) {
gWorldInstance.GetTrack()->SetStaffGhost();
if (GetWorld()->GetTrack()) {
GetWorld()->GetTrack()->SetStaffGhost();
}
}
Properties* CM_GetProps() {
if (gWorldInstance.GetTrack()) {
return &gWorldInstance.GetTrack()->Props;
if (GetWorld()->GetTrack()) {
return &GetWorld()->GetTrack()->Props;
}
return NULL;
}
void CM_ScrollingTextures() {
if (gWorldInstance.GetTrack()) {
gWorldInstance.GetTrack()->ScrollingTextures();
if (GetWorld()->GetTrack()) {
GetWorld()->GetTrack()->ScrollingTextures();
}
}
void CM_DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot,
uint16_t playerDirection) {
if (gWorldInstance.GetTrack()) {
gWorldInstance.GetTrack()->DrawWater(screen, pathCounter, cameraRot, playerDirection);
if (GetWorld()->GetTrack()) {
GetWorld()->GetTrack()->DrawWater(screen, pathCounter, cameraRot, playerDirection);
}
}
@ -640,8 +640,8 @@ void CM_SpawnStarterLakitu() {
for (size_t i = 0; i < gPlayerCountSelection1; i++) {
OLakitu* lakitu = new OLakitu(i, OLakitu::LakituType::STARTER);
gWorldInstance.Lakitus[i] = lakitu;
gWorldInstance.AddObject(lakitu);
GetWorld()->Lakitus[i] = lakitu;
GetWorld()->AddObject(lakitu);
}
}
@ -650,50 +650,50 @@ void CM_ActivateFinishLakitu(s32 playerId) {
if ((gDemoMode) || (gGamestate == CREDITS_SEQUENCE)) {
return;
}
gWorldInstance.Lakitus[playerId]->Activate(OLakitu::LakituType::FINISH);
GetWorld()->Lakitus[playerId]->Activate(OLakitu::LakituType::FINISH);
}
void CM_ActivateSecondLapLakitu(s32 playerId) {
if ((gDemoMode) || (gGamestate == CREDITS_SEQUENCE)) {
return;
}
gWorldInstance.Lakitus[playerId]->Activate(OLakitu::LakituType::SECOND_LAP);
GetWorld()->Lakitus[playerId]->Activate(OLakitu::LakituType::SECOND_LAP);
}
void CM_ActivateFinalLapLakitu(s32 playerId) {
if ((gDemoMode) || (gGamestate == CREDITS_SEQUENCE)) {
return;
}
gWorldInstance.Lakitus[playerId]->Activate(OLakitu::LakituType::FINAL_LAP);
GetWorld()->Lakitus[playerId]->Activate(OLakitu::LakituType::FINAL_LAP);
}
void CM_ActivateReverseLakitu(s32 playerId) {
if ((gDemoMode) || (gGamestate == CREDITS_SEQUENCE)) {
return;
}
gWorldInstance.Lakitus[playerId]->Activate(OLakitu::LakituType::REVERSE);
GetWorld()->Lakitus[playerId]->Activate(OLakitu::LakituType::REVERSE);
}
size_t GetCupCursorPosition() {
return gWorldInstance.GetCurrentCup()->CursorPosition;
return GetWorld()->GetCurrentCup()->CursorPosition;
}
void SetCupCursorPosition(size_t position) {
gWorldInstance.GetCurrentCup()->SetTrack(position);
// gWorldInstance.CurrentCup->CursorPosition = position;
GetWorld()->GetCurrentCup()->SetTrack(position);
// GetWorld()->CurrentCup->CursorPosition = position;
}
size_t GetCupSize() {
return gWorldInstance.GetCurrentCup()->GetSize();
return GetWorld()->GetCurrentCup()->GetSize();
}
void* GetTrack(void) {
return gWorldInstance.GetTrack().get();
return GetWorld()->GetTrack().get();
}
struct Actor* CM_GetActor(size_t index) {
if (index < gWorldInstance.Actors.size()) {
AActor* actor = gWorldInstance.Actors[index];
if (index < GetWorld()->Actors.size()) {
AActor* actor = GetWorld()->Actors[index];
return reinterpret_cast<struct Actor*>(reinterpret_cast<char*>(actor) + sizeof(void*));
} else {
// throw std::runtime_error("GetActor() index out of bounds");
@ -705,7 +705,7 @@ size_t CM_FindActorIndex(Actor* actor) {
// Move the ptr back to look at the vtable.
// This gets us the proper C++ class instead of just the variables used in C.
AActor* a = reinterpret_cast<AActor*>(reinterpret_cast<char*>(actor) - sizeof(void*));
auto actors = gWorldInstance.Actors;
auto actors = GetWorld()->Actors;
auto it = std::find(actors.begin(), actors.end(), static_cast<AActor*>(a));
if (it != actors.end()) {
@ -716,7 +716,7 @@ size_t CM_FindActorIndex(Actor* actor) {
}
void CM_DeleteActor(size_t index) {
std::vector<AActor*> actors = gWorldInstance.Actors;
std::vector<AActor*> actors = GetWorld()->Actors;
if (index < actors.size()) {
actors.erase(actors.begin() + index);
}
@ -726,27 +726,27 @@ void CM_DeleteActor(size_t index) {
* Clean up actors and other game objects.
*/
void CM_CleanWorld(void) {
gWorldInstance.CleanWorld();
GetWorld()->CleanWorld();
}
void CM_CleanCameras(void) {
for (auto& camera : gWorldInstance.Cameras) {
for (auto& camera : GetWorld()->Cameras) {
delete camera;
}
gWorldInstance.Cameras.clear();
GetWorld()->Cameras.clear();
}
struct Actor* CM_AddBaseActor() {
return (struct Actor*) gWorldInstance.AddBaseActor();
return (struct Actor*) GetWorld()->AddBaseActor();
}
void CM_ActorBeginPlay(struct Actor* actor) {
gWorldInstance.ActorBeginPlay(actor);
GetWorld()->ActorBeginPlay(actor);
}
void CM_ActorGenerateCollision(struct Actor* actor) {
AActor* act = gWorldInstance.ConvertActorToAActor(actor);
AActor* act = GetWorld()->ConvertActorToAActor(actor);
if ((nullptr != act->Model) && (act->Model[0] != '\0')) {
if (act->Triangles.size() == 0) {
@ -773,11 +773,11 @@ void Editor_CleanWorld() {
}
size_t CM_GetActorSize() {
return gWorldInstance.Actors.size();
return GetWorld()->Actors.size();
}
void CM_ActorCollision(Player* player, Actor* actor) {
AActor* a = gWorldInstance.ConvertActorToAActor(actor);
AActor* a = GetWorld()->ConvertActorToAActor(actor);
if (a->IsMod()) {
a->Collision(player, a);
@ -786,53 +786,53 @@ void CM_ActorCollision(Player* player, Actor* actor) {
f32 CM_GetWaterLevel(Vec3f pos, Collision* collision) {
FVector fPos = {pos[0], pos[1], pos[2]};
return gWorldInstance.GetTrack()->GetWaterLevel(fPos, collision);
return GetWorld()->GetTrack()->GetWaterLevel(fPos, collision);
}
// clang-format off
bool IsMarioRaceway() { return dynamic_cast<MarioRaceway*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsLuigiRaceway() { return dynamic_cast<LuigiRaceway*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsChocoMountain() { return dynamic_cast<ChocoMountain*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsBowsersCastle() { return dynamic_cast<BowsersCastle*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsBansheeBoardwalk() { return dynamic_cast<BansheeBoardwalk*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsYoshiValley() { return dynamic_cast<YoshiValley*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsFrappeSnowland() { return dynamic_cast<FrappeSnowland*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsKoopaTroopaBeach() { return dynamic_cast<KoopaTroopaBeach*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsRoyalRaceway() { return dynamic_cast<RoyalRaceway*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsMooMooFarm() { return dynamic_cast<MooMooFarm*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsToadsTurnpike() { return dynamic_cast<ToadsTurnpike*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsKalimariDesert() { return dynamic_cast<KalimariDesert*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsSherbetLand() { return dynamic_cast<SherbetLand*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsRainbowRoad() { return dynamic_cast<RainbowRoad*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsWarioStadium() { return dynamic_cast<WarioStadium*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsBlockFort() { return dynamic_cast<BlockFort*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsSkyscraper() { return dynamic_cast<Skyscraper*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsDoubleDeck() { return dynamic_cast<DoubleDeck*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsDkJungle() { return dynamic_cast<DKJungle*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsBigDonut() { return dynamic_cast<BigDonut*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsPodiumCeremony() { return dynamic_cast<PodiumCeremony*>(gWorldInstance.GetTrack().get()) != nullptr; }
bool IsMarioRaceway() { return dynamic_cast<MarioRaceway*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsLuigiRaceway() { return dynamic_cast<LuigiRaceway*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsChocoMountain() { return dynamic_cast<ChocoMountain*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsBowsersCastle() { return dynamic_cast<BowsersCastle*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsBansheeBoardwalk() { return dynamic_cast<BansheeBoardwalk*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsYoshiValley() { return dynamic_cast<YoshiValley*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsFrappeSnowland() { return dynamic_cast<FrappeSnowland*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsKoopaTroopaBeach() { return dynamic_cast<KoopaTroopaBeach*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsRoyalRaceway() { return dynamic_cast<RoyalRaceway*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsMooMooFarm() { return dynamic_cast<MooMooFarm*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsToadsTurnpike() { return dynamic_cast<ToadsTurnpike*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsKalimariDesert() { return dynamic_cast<KalimariDesert*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsSherbetLand() { return dynamic_cast<SherbetLand*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsRainbowRoad() { return dynamic_cast<RainbowRoad*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsWarioStadium() { return dynamic_cast<WarioStadium*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsBlockFort() { return dynamic_cast<BlockFort*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsSkyscraper() { return dynamic_cast<Skyscraper*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsDoubleDeck() { return dynamic_cast<DoubleDeck*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsDkJungle() { return dynamic_cast<DKJungle*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsBigDonut() { return dynamic_cast<BigDonut*>(GetWorld()->GetTrack().get()) != nullptr; }
bool IsPodiumCeremony() { return dynamic_cast<PodiumCeremony*>(GetWorld()->GetTrack().get()) != nullptr; }
void SelectMarioRaceway() { gWorldInstance.SetCurrentTrack(std::make_shared<MarioRaceway>()); }
void SelectLuigiRaceway() { gWorldInstance.SetCurrentTrack(std::make_shared<LuigiRaceway>()); }
void SelectChocoMountain() { gWorldInstance.SetCurrentTrack(std::make_shared<ChocoMountain>()); }
void SelectBowsersCastle() { gWorldInstance.SetCurrentTrack(std::make_shared<BowsersCastle>()); }
void SelectBansheeBoardwalk() { gWorldInstance.SetCurrentTrack(std::make_shared<BansheeBoardwalk>()); }
void SelectYoshiValley() { gWorldInstance.SetCurrentTrack(std::make_shared<YoshiValley>()); }
void SelectFrappeSnowland() { gWorldInstance.SetCurrentTrack(std::make_shared<FrappeSnowland>()); }
void SelectKoopaTroopaBeach() { gWorldInstance.SetCurrentTrack(std::make_shared<KoopaTroopaBeach>()); }
void SelectRoyalRaceway() { gWorldInstance.SetCurrentTrack(std::make_shared<RoyalRaceway>()); }
void SelectMooMooFarm() { gWorldInstance.SetCurrentTrack(std::make_shared<MooMooFarm>()); }
void SelectToadsTurnpike() { gWorldInstance.SetCurrentTrack(std::make_shared<ToadsTurnpike>()); }
void SelectKalimariDesert() { gWorldInstance.SetCurrentTrack(std::make_shared<KalimariDesert>()); }
void SelectSherbetLand() { gWorldInstance.SetCurrentTrack(std::make_shared<SherbetLand>()); }
void SelectRainbowRoad() { gWorldInstance.SetCurrentTrack(std::make_shared<RainbowRoad>()); }
void SelectWarioStadium() { gWorldInstance.SetCurrentTrack(std::make_shared<WarioStadium>()); }
void SelectBlockFort() { gWorldInstance.SetCurrentTrack(std::make_shared<BlockFort>()); }
void SelectSkyscraper() { gWorldInstance.SetCurrentTrack(std::make_shared<Skyscraper>()); }
void SelectDoubleDeck() { gWorldInstance.SetCurrentTrack(std::make_shared<DoubleDeck>()); }
void SelectDkJungle() { gWorldInstance.SetCurrentTrack(std::make_shared<DKJungle>()); }
void SelectBigDonut() { gWorldInstance.SetCurrentTrack(std::make_shared<BigDonut>()); }
void SelectPodiumCeremony() { gWorldInstance.SetCurrentTrack(gPodiumCeremony); }
void SelectMarioRaceway() { GetWorld()->SetCurrentTrack(std::make_shared<MarioRaceway>()); }
void SelectLuigiRaceway() { GetWorld()->SetCurrentTrack(std::make_shared<LuigiRaceway>()); }
void SelectChocoMountain() { GetWorld()->SetCurrentTrack(std::make_shared<ChocoMountain>()); }
void SelectBowsersCastle() { GetWorld()->SetCurrentTrack(std::make_shared<BowsersCastle>()); }
void SelectBansheeBoardwalk() { GetWorld()->SetCurrentTrack(std::make_shared<BansheeBoardwalk>()); }
void SelectYoshiValley() { GetWorld()->SetCurrentTrack(std::make_shared<YoshiValley>()); }
void SelectFrappeSnowland() { GetWorld()->SetCurrentTrack(std::make_shared<FrappeSnowland>()); }
void SelectKoopaTroopaBeach() { GetWorld()->SetCurrentTrack(std::make_shared<KoopaTroopaBeach>()); }
void SelectRoyalRaceway() { GetWorld()->SetCurrentTrack(std::make_shared<RoyalRaceway>()); }
void SelectMooMooFarm() { GetWorld()->SetCurrentTrack(std::make_shared<MooMooFarm>()); }
void SelectToadsTurnpike() { GetWorld()->SetCurrentTrack(std::make_shared<ToadsTurnpike>()); }
void SelectKalimariDesert() { GetWorld()->SetCurrentTrack(std::make_shared<KalimariDesert>()); }
void SelectSherbetLand() { GetWorld()->SetCurrentTrack(std::make_shared<SherbetLand>()); }
void SelectRainbowRoad() { GetWorld()->SetCurrentTrack(std::make_shared<RainbowRoad>()); }
void SelectWarioStadium() { GetWorld()->SetCurrentTrack(std::make_shared<WarioStadium>()); }
void SelectBlockFort() { GetWorld()->SetCurrentTrack(std::make_shared<BlockFort>()); }
void SelectSkyscraper() { GetWorld()->SetCurrentTrack(std::make_shared<Skyscraper>()); }
void SelectDoubleDeck() { GetWorld()->SetCurrentTrack(std::make_shared<DoubleDeck>()); }
void SelectDkJungle() { GetWorld()->SetCurrentTrack(std::make_shared<DKJungle>()); }
void SelectBigDonut() { GetWorld()->SetCurrentTrack(std::make_shared<BigDonut>()); }
void SelectPodiumCeremony() { GetWorld()->SetCurrentTrack(gPodiumCeremony); }
// clang-format on
void* GetMushroomCup(void) {

View File

@ -25,7 +25,7 @@ extern HarbourMastersIntro gMenuIntro;
extern bool bCleanWorld;
extern Registry<TrackInfo> gTrackRegistry;
extern Registry<ActorInfo, const SpawnParams&> gActorRegistry;
World* GetWorld(void);
World* GetWorld(void); // Retrieve the world instance
#endif
// NOLINTBEGIN(readability-identifier-naming)

View File

@ -29,7 +29,7 @@ namespace Editor {
size_t id = 0; // id for now because we don't have unique names atm
for (const auto& actor : gWorldInstance.Actors) {
for (const auto& actor : GetWorld()->Actors) {
std::string name;
if (nullptr != actor->Name && actor->Name[0] != '\0') {
name = std::string(actor->Name);
@ -51,7 +51,7 @@ namespace Editor {
id += 1;
}
for (const auto& object : gWorldInstance.Objects) {
for (const auto& object : GetWorld()->Objects) {
std::string name;
if (nullptr != object->Name && object->Name[0] != '\0') {
name = std::string(object->Name);

View File

@ -35,19 +35,19 @@ namespace Editor {
static char debugNameBuffer[256] = "m circuit";
static char lengthBuffer[256] = "567m";
if (nullptr == gWorldInstance.GetTrack()) {
if (nullptr == GetWorld()->GetTrack()) {
return;
}
ImGui::InputText("ID", idBuffer, IM_ARRAYSIZE(idBuffer));
ImGui::InputText("Name", gWorldInstance.GetTrack()->Props.Name, IM_ARRAYSIZE(nameBuffer));
ImGui::InputText("Debug Name", gWorldInstance.GetTrack()->Props.DebugName, IM_ARRAYSIZE(debugNameBuffer));
ImGui::InputText("Track Length", gWorldInstance.GetTrack()->Props.TrackLength, IM_ARRAYSIZE(lengthBuffer));
ImGui::InputFloat("Water Level", &gWorldInstance.GetTrack()->Props.WaterLevel);
ImGui::InputText("Name", GetWorld()->GetTrack()->Props.Name, IM_ARRAYSIZE(nameBuffer));
ImGui::InputText("Debug Name", GetWorld()->GetTrack()->Props.DebugName, IM_ARRAYSIZE(debugNameBuffer));
ImGui::InputText("Track Length", GetWorld()->GetTrack()->Props.TrackLength, IM_ARRAYSIZE(lengthBuffer));
ImGui::InputFloat("Water Level", &GetWorld()->GetTrack()->Props.WaterLevel);
if (ImGui::CollapsingHeader("Camera")) {
ImGui::InputFloat("Near Perspective", &gWorldInstance.GetTrack()->Props.NearPersp);
ImGui::InputFloat("Far Perspective", &gWorldInstance.GetTrack()->Props.FarPersp);
ImGui::InputFloat("Near Perspective", &GetWorld()->GetTrack()->Props.NearPersp);
ImGui::InputFloat("Far Perspective", &GetWorld()->GetTrack()->Props.FarPersp);
if (ImGui::IsItemHovered()) {
ImGui::BeginTooltip();
ImGui::Text("Controls the far clipping distance for perspective rendering.");
@ -62,92 +62,92 @@ namespace Editor {
if (ImGui::CollapsingHeader("AI")) {
ImGui::InputFloat("AI Max Separation", &gWorldInstance.GetTrack()->Props.AIMaximumSeparation);
ImGui::InputFloat("AI Min Separation", &gWorldInstance.GetTrack()->Props.AIMinimumSeparation);
ImGui::InputInt("AI Steering Sensitivity", (int*)&gWorldInstance.GetTrack()->Props.AISteeringSensitivity);
ImGui::InputFloat("AI Max Separation", &GetWorld()->GetTrack()->Props.AIMaximumSeparation);
ImGui::InputFloat("AI Min Separation", &GetWorld()->GetTrack()->Props.AIMinimumSeparation);
ImGui::InputInt("AI Steering Sensitivity", (int*)&GetWorld()->GetTrack()->Props.AISteeringSensitivity);
ImGui::Separator();
for (size_t i = 0; i < 32; i++) {
ImGui::InputScalar(("Element " + std::to_string(i)).c_str(), ImGuiDataType_S16, &gWorldInstance.GetTrack()->Props.AIDistance[i]);
ImGui::InputScalar(("Element " + std::to_string(i)).c_str(), ImGuiDataType_S16, &GetWorld()->GetTrack()->Props.AIDistance[i]);
}
}
if (ImGui::CollapsingHeader("Random Junk")) {
for (size_t i = 0; i < 4; i++) {
ImGui::InputFloat(fmt::format("CurveTargetSpeed[{}]", i).c_str(), &gWorldInstance.GetTrack()->Props.CurveTargetSpeed[i]);
ImGui::InputFloat(fmt::format("CurveTargetSpeed[{}]", i).c_str(), &GetWorld()->GetTrack()->Props.CurveTargetSpeed[i]);
}
ImGui::Separator();
for (size_t i = 0; i < 4; i++) {
ImGui::InputFloat(fmt::format("NormalTargetSpeed[{}]", i).c_str(), &gWorldInstance.GetTrack()->Props.NormalTargetSpeed[i]);
ImGui::InputFloat(fmt::format("NormalTargetSpeed[{}]", i).c_str(), &GetWorld()->GetTrack()->Props.NormalTargetSpeed[i]);
}
ImGui::Separator();
for (size_t i = 0; i < 4; i++) {
ImGui::InputFloat(fmt::format("D_0D0096B8[{}]", i).c_str(), &gWorldInstance.GetTrack()->Props.D_0D0096B8[i]);
ImGui::InputFloat(fmt::format("D_0D0096B8[{}]", i).c_str(), &GetWorld()->GetTrack()->Props.D_0D0096B8[i]);
}
ImGui::Separator();
for (size_t i = 0; i < 4; i++) {
ImGui::InputFloat(fmt::format("OffTrackTargetSpeed[{}]", i).c_str(), &gWorldInstance.GetTrack()->Props.OffTrackTargetSpeed[i]);
ImGui::InputFloat(fmt::format("OffTrackTargetSpeed[{}]", i).c_str(), &GetWorld()->GetTrack()->Props.OffTrackTargetSpeed[i]);
}
}
float minimapColour[3];
RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Minimap.Colour, minimapColour);
RGB8ToFloat((u8*)&GetWorld()->GetTrack()->Props.Minimap.Colour, minimapColour);
if (ImGui::CollapsingHeader("Minimap")) {
ImGui::Text("Position");
ImGui::SameLine();
if (ImGui::DragInt2("##MinimapPosition", &gWorldInstance.GetTrack()->Props.Minimap.Pos[0].X, 1.0f)) {
if (ImGui::DragInt2("##MinimapPosition", &GetWorld()->GetTrack()->Props.Minimap.Pos[0].X, 1.0f)) {
}
ImGui::Text("P2 Position");
ImGui::SameLine();
if (ImGui::DragInt2("##MinimapPosition2p", &gWorldInstance.GetTrack()->Props.Minimap.Pos[1].X, 1.0f)) {
if (ImGui::DragInt2("##MinimapPosition2p", &GetWorld()->GetTrack()->Props.Minimap.Pos[1].X, 1.0f)) {
}
ImGui::Text("Player Markers");
ImGui::SameLine();
if (ImGui::DragInt2("##MinimapPlayers", &gWorldInstance.GetTrack()->Props.Minimap.PlayerX, 1.0f)) {
if (ImGui::DragInt2("##MinimapPlayers", &GetWorld()->GetTrack()->Props.Minimap.PlayerX, 1.0f)) {
}
ImGui::Text("Player Scale Factor");
ImGui::SameLine();
if (ImGui::DragFloat("##MinimapScaleFactor", &gWorldInstance.GetTrack()->Props.Minimap.PlayerScaleFactor, 0.0001f)) {
if (ImGui::DragFloat("##MinimapScaleFactor", &GetWorld()->GetTrack()->Props.Minimap.PlayerScaleFactor, 0.0001f)) {
}
ImGui::Text("Finishline");
ImGui::SameLine();
ImGui::DragFloat2("##MinimapFinishlineX", &gWorldInstance.GetTrack()->Props.Minimap.FinishlineX, 1.0f);
ImGui::DragFloat2("##MinimapFinishlineX", &GetWorld()->GetTrack()->Props.Minimap.FinishlineX, 1.0f);
ImGui::Text("Colour");
ImGui::SameLine();
ImGui::ColorEdit3("##MinimapColour", minimapColour, 1.0f);
}
FloatToRGB8(minimapColour, (u8*)&gWorldInstance.GetTrack()->Props.Minimap.Colour);
FloatToRGB8(minimapColour, (u8*)&GetWorld()->GetTrack()->Props.Minimap.Colour);
// Convert and pass to ImGui ColorEdit3
float topRight[3], bottomRight[3], bottomLeft[3], topLeft[3];
float floorTopRight[3], floorBottomRight[3], floorBottomLeft[3], floorTopLeft[3];
// Convert RGB8 (0-255) to float (0.0f to 1.0f)
RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Skybox.TopRight, topRight);
RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Skybox.BottomRight, bottomRight);
RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Skybox.BottomLeft, bottomLeft);
RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Skybox.TopLeft, topLeft);
RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Skybox.FloorTopRight, floorTopRight);
RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Skybox.FloorBottomRight, floorBottomRight);
RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Skybox.FloorBottomLeft, floorBottomLeft);
RGB8ToFloat((u8*)&gWorldInstance.GetTrack()->Props.Skybox.FloorTopLeft, floorTopLeft);
RGB8ToFloat((u8*)&GetWorld()->GetTrack()->Props.Skybox.TopRight, topRight);
RGB8ToFloat((u8*)&GetWorld()->GetTrack()->Props.Skybox.BottomRight, bottomRight);
RGB8ToFloat((u8*)&GetWorld()->GetTrack()->Props.Skybox.BottomLeft, bottomLeft);
RGB8ToFloat((u8*)&GetWorld()->GetTrack()->Props.Skybox.TopLeft, topLeft);
RGB8ToFloat((u8*)&GetWorld()->GetTrack()->Props.Skybox.FloorTopRight, floorTopRight);
RGB8ToFloat((u8*)&GetWorld()->GetTrack()->Props.Skybox.FloorBottomRight, floorBottomRight);
RGB8ToFloat((u8*)&GetWorld()->GetTrack()->Props.Skybox.FloorBottomLeft, floorBottomLeft);
RGB8ToFloat((u8*)&GetWorld()->GetTrack()->Props.Skybox.FloorTopLeft, floorTopLeft);
if (ImGui::CollapsingHeader("Skybox")) {
ImGui::ColorEdit3("Skybox Top Right", topRight);
@ -161,14 +161,14 @@ namespace Editor {
}
// Convert the modified float values back to RGB8 (0-255)
FloatToRGB8(topRight, (u8*)&gWorldInstance.GetTrack()->Props.Skybox.TopRight);
FloatToRGB8(bottomRight, (u8*)&gWorldInstance.GetTrack()->Props.Skybox.BottomRight);
FloatToRGB8(bottomLeft, (u8*)&gWorldInstance.GetTrack()->Props.Skybox.BottomLeft);
FloatToRGB8(topLeft, (u8*)&gWorldInstance.GetTrack()->Props.Skybox.TopLeft);
FloatToRGB8(floorTopRight, (u8*)&gWorldInstance.GetTrack()->Props.Skybox.FloorTopRight);
FloatToRGB8(floorBottomRight, (u8*)&gWorldInstance.GetTrack()->Props.Skybox.FloorBottomRight);
FloatToRGB8(floorBottomLeft, (u8*)&gWorldInstance.GetTrack()->Props.Skybox.FloorBottomLeft);
FloatToRGB8(floorTopLeft, (u8*)&gWorldInstance.GetTrack()->Props.Skybox.FloorTopLeft);
FloatToRGB8(topRight, (u8*)&GetWorld()->GetTrack()->Props.Skybox.TopRight);
FloatToRGB8(bottomRight, (u8*)&GetWorld()->GetTrack()->Props.Skybox.BottomRight);
FloatToRGB8(bottomLeft, (u8*)&GetWorld()->GetTrack()->Props.Skybox.BottomLeft);
FloatToRGB8(topLeft, (u8*)&GetWorld()->GetTrack()->Props.Skybox.TopLeft);
FloatToRGB8(floorTopRight, (u8*)&GetWorld()->GetTrack()->Props.Skybox.FloorTopRight);
FloatToRGB8(floorBottomRight, (u8*)&GetWorld()->GetTrack()->Props.Skybox.FloorBottomRight);
FloatToRGB8(floorBottomLeft, (u8*)&GetWorld()->GetTrack()->Props.Skybox.FloorBottomLeft);
FloatToRGB8(floorTopLeft, (u8*)&GetWorld()->GetTrack()->Props.Skybox.FloorTopLeft);
TrackPropertiesWindow::DrawMusic();
TrackPropertiesWindow::DrawTourCamera();
@ -185,15 +185,15 @@ namespace Editor {
"Royal Raceway", "Yoshi Valley", "Block Fort", "Double Deck"
};
const char* currentItem = MusicSeqToString(gWorldInstance.GetTrack()->Props.Sequence); // Get the current selected value's string
const char* currentItem = MusicSeqToString(GetWorld()->GetTrack()->Props.Sequence); // Get the current selected value's string
if (ImGui::BeginCombo("Music Sequence", currentItem)) {
for (size_t i = 0; i < IM_ARRAYSIZE(items); ++i) {
bool isSelected = (currentItem == items[i]);
if (ImGui::Selectable(items[i], isSelected)) {
// Update the sequence when an option is selected
gWorldInstance.GetTrack()->Props.Sequence = static_cast<MusicSeq>(i);
play_sequence(gWorldInstance.GetTrack()->Props.Sequence); // Call play_sequence with the updated sequence
GetWorld()->GetTrack()->Props.Sequence = static_cast<MusicSeq>(i);
play_sequence(GetWorld()->GetTrack()->Props.Sequence); // Call play_sequence with the updated sequence
// Update currentItem after selection is made
currentItem = items[i];
@ -299,7 +299,7 @@ namespace Editor {
void TrackPropertiesWindow::DrawTourCamera() {
std::shared_ptr<Track> track = gWorldInstance.GetTrack();
std::shared_ptr<Track> track = GetWorld()->GetTrack();
if (nullptr == track) {
return;
}