diff options
Diffstat (limited to 'src/engine/GarbageCollector.cpp')
| -rw-r--r-- | src/engine/GarbageCollector.cpp | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/src/engine/GarbageCollector.cpp b/src/engine/GarbageCollector.cpp index 9832aa29d..e7f2d9975 100644 --- a/src/engine/GarbageCollector.cpp +++ b/src/engine/GarbageCollector.cpp @@ -2,21 +2,30 @@ #include "World.h" void RunGarbageCollector() { - //CleanActors(); + CleanActors(); CleanObjects(); CleanStaticMeshActors(); } void CleanActors() { - // for (auto actor = gWorldInstance.Actors.begin(); actor != gWorldInstance.Actors.end();) { - // OObject* act = *actor; // Get a mutable copy - // if (act->PendingDestroy) { - // delete act; - // actor = gWorldInstance.Objects.erase(actor); // Remove from container - // continue; - // } - // actor++; - // } + for (auto actor = gWorldInstance.Actors.begin(); actor != gWorldInstance.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 + } else { // Old C actor + act->Flags = 0; + act->Type = 0; + act->Name = ""; + act->ResourceName = ""; + actor++; // Manually advance the iterator since no deletion happens here + } + gNumActors -= 1; + continue; + } + actor++; + } } void CleanStaticMeshActors() { |
