summaryrefslogtreecommitdiff
path: root/src/entities.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-09-09 16:05:14 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-09-09 16:05:14 -0400
commit5daa12fed0449a7811fc25ec62236bc060a56fa7 (patch)
tree5af5ff1c4de2ab49dd4d1db9934b3b4ee34a54c2 /src/entities.cpp
parentc40277cd665e04d300ea839a1dd2ff675655f5fb (diff)
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.
Diffstat (limited to 'src/entities.cpp')
-rw-r--r--src/entities.cpp21
1 files changed, 11 insertions, 10 deletions
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<EntityType> 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);
}
}