summaryrefslogtreecommitdiff
path: root/src/engine/World.cpp
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2025-11-14 14:50:33 -0700
committerGitHub <noreply@github.com>2025-11-14 14:50:33 -0700
commitfffd3f7fe92c6eb45b68c0ca522066bf9c54abb2 (patch)
tree3dace8aa5a702dddfc0e5d7d7fde948c358a67dd /src/engine/World.cpp
parentc2755aee40bb37c8440ec58f260b4bd36bd6e256 (diff)
RaceManager class (#562)
* Create RaceManager.cpp * Create RaceManager class for race lifecycle management Added RaceManager class to manage race events lifecycle. * Refactor World class and implement ClearWorld method Refactor World class constructor and destructor. Implement ClearWorld method to delete all objects and reset state. * Add RaceManager to World class * Update ValidateString for editor mode checks Refactor ValidateString to handle editor mode and empty strings. * Update Text.cpp * Add SetText method to Text class * Document RunGarbageCollector function Added documentation for the RunGarbageCollector function. * Refactor Game.cpp by removing dead code Removed unused ruleset handling and clean-up code. * Update Game.h * Remove CM_SpawnFromLevelProps call * Update Text.cpp * Update World.cpp * Add Clean method to RaceManager class * Update RaceManager.cpp * Update World.cpp * Update World.h * Update World.cpp
Diffstat (limited to 'src/engine/World.cpp')
-rw-r--r--src/engine/World.cpp49
1 files changed, 39 insertions, 10 deletions
diff --git a/src/engine/World.cpp b/src/engine/World.cpp
index 0430edf6d..cca7a2199 100644
--- a/src/engine/World.cpp
+++ b/src/engine/World.cpp
@@ -21,14 +21,17 @@ extern "C" {
#include "mario_raceway_data.h"
}
-World::World() {}
-World::~World() {
- CM_CleanWorld();
-}
-
std::shared_ptr<Course> CurrentCourse;
Cup* CurrentCup;
+World::World() {
+ RaceManagerInstance = std::make_unique<RaceManager>(*this);
+}
+
+World::~World() {
+ ClearWorld();
+}
+
std::shared_ptr<Course> World::AddCourse(std::shared_ptr<Course> course) {
gWorldInstance.Courses.push_back(course);
return course;
@@ -252,13 +255,39 @@ Object* World::GetObjectByIndex(size_t index) {
return nullptr; // Or handle the error as needed
}
+// Deletes all objects from the world
void World::ClearWorld(void) {
- CM_CleanWorld();
+ printf("[Game.cpp] Clean World\n");
+ World* world = &gWorldInstance;
+ for (auto& actor : world->Actors) {
+ delete actor;
+ }
- // for (size_t i = 0; i < ARRAY_COUNT(gCollisionMesh); i++) {
+ gWorldInstance.Reset(); // Reset OObjects
+ for (auto& object : world->Objects) {
+ delete object;
+ }
- // }
+ for (auto& emitter : world->Emitters) {
+ delete emitter;
+ }
+
+ for (auto& actor : world->StaticMeshActors) {
+ delete actor;
+ }
+
+ for (size_t i = 0; i < ARRAY_COUNT(gWorldInstance.playerBombKart); i++) {
+ gWorldInstance.playerBombKart[i].state = PlayerBombKart::PlayerBombKartState::DISABLED;
+ gWorldInstance.playerBombKart[i]._primAlpha = 0;
+ }
+
+ gEditor.ClearObjects();
+ gWorldInstance.Actors.clear();
+ gWorldInstance.StaticMeshActors.clear();
+ gWorldInstance.Objects.clear();
+ gWorldInstance.Emitters.clear();
+ gWorldInstance.Lakitus.clear();
+
+ gWorldInstance.GetRaceManager().Clean();
- // gCollisionMesh
- // Paths
}