From 154436ab88925540f86f43c0ac885c080949aa9b Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Tue, 19 Aug 2025 13:51:40 -0400 Subject: pke: ui box type button image --- src/ecs.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'src/ecs.cpp') diff --git a/src/ecs.cpp b/src/ecs.cpp index de8b0cd..0294c44 100644 --- a/src/ecs.cpp +++ b/src/ecs.cpp @@ -11,11 +11,13 @@ #include #include +typedef pk_bkt_arr_t type_bkt_arr_entities ; + struct ECS { struct pk_membucket *bkt = nullptr; struct ECSBucketContainers { pk_bkt_arr_t generics{}; - pk_bkt_arr_t entityPtrs{}; + type_bkt_arr_entities entityPtrs{}; pk_bkt_arr_t grBinds{}; pk_bkt_arr_t instances{}; pk_bkt_arr_t ev_mgrs{}; @@ -87,7 +89,10 @@ EntityHandle ECS_CreateEntity(Entity_Base *entity, Entity_Base *parentEntity) { assert(entity->handle == EntityHandle_MAX && "Entity already created!"); EntityHandle entityHandle{pk_bkt_arr_new_handle(&ecs.bc.entityPtrs)}; entity->handle = entityHandle; - if (parentEntity) entity->parentHandle = parentEntity->handle; + entity->parentHandle = EntityHandle_MAX; + if (parentEntity != nullptr) { + entity->parentHandle = parentEntity->handle; + } if (entity->uuid == pk_uuid_max || entity->uuid == pk_uuid_zed) entity->uuid = pk_uuid_new_v7(); ecs.bc.entityPtrs[entityHandle] = entity; return entityHandle; @@ -123,6 +128,7 @@ pk_bkt_arr *ECS_GetEntities() { void ECS_Tick_Early(double delta) { // these reserves might happen 1 tick early, but that's fine (void)delta; + pk_arr_clear(&EntitiesToBeRemoved); bool shouldRun = entitiesMarkedForRemoval.next > 0 || EntitiesToBeRemoved.next > 0 || entitiesYetToBeRemoved.next > 0; pk_arr_reserve(&entitiesYetToBeRemoved, entitiesMarkedForRemoval.reserved); pk_arr_reserve(&EntitiesToBeRemoved, entitiesMarkedForRemoval.reserved); @@ -130,6 +136,7 @@ void ECS_Tick_Early(double delta) { pk_arr_clear(&entitiesYetToBeRemoved); if (!shouldRun) return; + EntitiesToBeRemoved.next = entitiesMarkedForRemoval.next; pk_arr_clear(&entitiesMarkedForRemoval); // this has the potential to be slow as balls @@ -143,9 +150,9 @@ void ECS_Tick_Early(double delta) { // That may or may not have implications about this logic. // Might need to do several passes? - auto ent_remove_cb = [](void *user_data, void *arr_obj_data) { - (void)user_data; - Entity_Base *ent = *reinterpret_cast(arr_obj_data); + type_bkt_arr_entities::FN_Iter iter_tmpln; + iter_tmpln.func = [](Entity_Base **ent_ptr) { + Entity_Base *ent = *ent_ptr; Entity_Base *parentEnt = nullptr; if (ent->parentHandle != EntityHandle_MAX) { parentEnt = ecs.bc.entityPtrs[ent->parentHandle]; @@ -162,7 +169,7 @@ void ECS_Tick_Early(double delta) { pk_arr_append_t(&EntitiesToBeRemoved, ent); } }; - pk_bkt_arr_iterate(&ecs.bc.entityPtrs, ent_remove_cb, NULL); + pk_bkt_arr_iterate(&ecs.bc.entityPtrs, type_bkt_arr_entities::FN_Iter::invoke, &iter_tmpln); } struct updateGrBindsAfter { -- cgit v1.2.3