From 78621bab9fd6401e4e83493360a46f12bddf4299 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Thu, 28 Sep 2023 11:11:24 -0400 Subject: more than the first entity is now selectable and properly get CompInstance from ECS --- src/ecs.cpp | 29 +++++++++++++++++------------ src/game.cpp | 5 +++++ 2 files changed, 22 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/ecs.cpp b/src/ecs.cpp index 600eaa4..b0f9250 100644 --- a/src/ecs.cpp +++ b/src/ecs.cpp @@ -271,7 +271,7 @@ CompInstance &ECS_CreateInstance(EntityHandle entHandle, EntityHandle entityType auto *comp = &Comp_Instance_BucketContainer.buckets[b].instances[i]; comp = new (comp) CompInstance{}; comp->entHandle = entHandle; - comp->grBindsHandle = ent->grBindsHandle; + comp->grBindsHandle = grBinds->grBindsHandle; comp->instanceHandle = ent->instanceHandle; comp->index = grBinds->instances.Count(); grBinds->instances.Push({ @@ -286,20 +286,25 @@ CompInstance &ECS_CreateInstance(EntityHandle entHandle, EntityHandle entityType CompInstance *ECS_GetInstance(EntityHandle entHandle) { Entity *ent = nullptr; ECS_GetEntity_Inner(entHandle, ent); - if (ent->grBindsHandle == GrBindsHandle_MAX) return nullptr; - if (ent->instanceHandle == InstanceHandle_MAX) return nullptr; - GrBindsHandle_T grBindsHandle_t{static_cast(ent->grBindsHandle)}; - InstanceHandle_T instanceHandle_t{static_cast(ent->instanceHandle)}; + + if (ent->instanceHandle == InstanceHandle_MAX) + return nullptr; - auto b2 = Buckets_GetBucketIndex(grBindsHandle_t); - auto i2 = Buckets_GetItemIndex(grBindsHandle_t); - auto &grBinds = Comp_GrBinds_BucketContainer.buckets[b2].compGrBinds[i2]; + InstanceHandle_T instanceHandle_t{static_cast(ent->instanceHandle)}; auto b = Buckets_GetBucketIndex(instanceHandle_t); auto i = Buckets_GetItemIndex(instanceHandle_t); - auto &comp = Comp_Instance_BucketContainer.buckets[b].instances[i]; + auto *inst = &Comp_Instance_BucketContainer.buckets[b].instances[i]; - if (comp.index == ECS_UNSET_VAL) + if (inst->index == ECS_UNSET_VAL) + return nullptr; + if (inst->grBindsHandle == GrBindsHandle_MAX) return nullptr; - comp.ptr = &grBinds.instances[comp.index]; - return ∁ + + GrBindsHandle_T grBindsHandle_t{static_cast(inst->grBindsHandle)}; + auto b2 = Buckets_GetBucketIndex(grBindsHandle_t); + auto i2 = Buckets_GetItemIndex(grBindsHandle_t); + auto grBinds = &Comp_GrBinds_BucketContainer.buckets[b2].compGrBinds[i2]; + + inst->ptr = &grBinds->instances[inst->index]; + return inst; } diff --git a/src/game.cpp b/src/game.cpp index 2c87818..78fa093 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -283,10 +283,13 @@ void RecordImGuiEntityList() { for (long bucket = 0; bucket < bucketCount; ++bucket) { uint64_t itemCount = 0; auto *entities = ECS_GetEntities(bucket, itemCount); + ImGui::PushID(bucket); for (long row = 0; row < itemCount; row++) { auto *entity = &entities[row]; + ImGui::PushID(row); ImGui::TableNextRow(); ImGui::TableSetColumnIndex(0); + char label[32]; if (ImGui::Button("Select")) selectedEntity = entity->handle; ImGui::TableSetColumnIndex(1); @@ -299,7 +302,9 @@ void RecordImGuiEntityList() { ImGui::Text("0x%016lX", static_cast(entity->instanceHandle)); ImGui::TableSetColumnIndex(5); ImGui::Text("%u", entity->isMarkedForRemoval); + ImGui::PopID(); } + ImGui::PopID(); } ImGui::EndTable(); } -- cgit v1.2.3