summaryrefslogtreecommitdiff
path: root/src/ecs.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2023-09-28 11:11:24 -0400
committerJonathan Bradley <jcb@pikum.xyz>2023-09-28 11:11:24 -0400
commit78621bab9fd6401e4e83493360a46f12bddf4299 (patch)
tree455f9799867fc0ef0151f4cb812f9cab1e94181e /src/ecs.cpp
parent104224b9022794fd9eff77154482630bcf18348c (diff)
more than the first entity is now selectable and properly get CompInstance from ECS
Diffstat (limited to 'src/ecs.cpp')
-rw-r--r--src/ecs.cpp29
1 files changed, 17 insertions, 12 deletions
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<GrBindsHandle_T>(ent->grBindsHandle)};
- InstanceHandle_T instanceHandle_t{static_cast<InstanceHandle_T>(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<InstanceHandle_T>(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 &comp;
+
+ GrBindsHandle_T grBindsHandle_t{static_cast<GrBindsHandle_T>(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;
}