diff options
| author | MegaMech <MegaMech@users.noreply.github.com> | 2025-11-14 14:50:33 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-14 14:50:33 -0700 |
| commit | fffd3f7fe92c6eb45b68c0ca522066bf9c54abb2 (patch) | |
| tree | 3dace8aa5a702dddfc0e5d7d7fde948c358a67dd /src/engine/World.cpp | |
| parent | c2755aee40bb37c8440ec58f260b4bd36bd6e256 (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.cpp | 49 |
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 } |
