From 5daa12fed0449a7811fc25ec62236bc060a56fa7 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Tue, 9 Sep 2025 16:05:14 -0400 Subject: pke: first-pass promote pke_level over pke_scene Major runtime ownership overhaul (scene -> level). Major ecs 'marked for removal' overhaul, ensuring that entities and their components are actually being removed when levels are unloaded. --- src/entities.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'src/entities.cpp') diff --git a/src/entities.cpp b/src/entities.cpp index 8b39cea..1f05b47 100644 --- a/src/entities.cpp +++ b/src/entities.cpp @@ -1267,19 +1267,20 @@ void EntityType_Unload(EntityType &et, CompGrBinds *grBindsArr[1]) { void EntityType_Tick(double delta) { (void)delta; - const uint32_t count = EntitiesToBeRemoved.next; - for (uint32_t i = 0; i < count; ++i) { - auto *entTypePtr = EntityType_FindByEntityHandle(EntitiesToBeRemoved[i]->handle); - if (entTypePtr != nullptr) { - auto &entType = *entTypePtr; - pk_arr_append_t(&EntityTypesToTeardown, {}); - auto &td = EntityTypesToTeardown[EntityTypesToTeardown.next-1]; - td.handle = EntitiesToBeRemoved[i]->handle; + pk_iter_t iter_ent_type; + bool b; + b = pk_bkt_arr_iter_begin(&et_mstr.bc, &iter_ent_type); + while (b == true) { + if (iter_ent_type->isMarkedForRemoval == true) { + EntToTeardown td{}; + td.handle = iter_ent_type->handle; td.ticksToWait = 1; - for (long k = 0; k < entType.detailsCount; ++k) { - td.grBinds[k] = entType.details[k].grBinds; + for (long k = 0; k < iter_ent_type->detailsCount; ++k) { + td.grBinds[k] = iter_ent_type->details[k].grBinds; } + pk_arr_append_t(&EntityTypesToTeardown, td); } + b = pk_bkt_arr_iter_increment(&et_mstr.bc, &iter_ent_type); } } -- cgit v1.2.3