diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-09-01 10:10:51 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-09-06 17:24:27 -0400 |
| commit | b9f90793c8c0468d5f35d7af976a6e3bcd206aad (patch) | |
| tree | bff30852d5bb594c7ad84c5f7f3d5a385e18fc4a /src/ecs.cpp | |
| parent | 092e287ba5669f6ed40b721c0bdf2450dae95af8 (diff) | |
add first graphics binding component
Diffstat (limited to 'src/ecs.cpp')
| -rw-r--r-- | src/ecs.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/ecs.cpp b/src/ecs.cpp index aa85873..33fec2b 100644 --- a/src/ecs.cpp +++ b/src/ecs.cpp @@ -7,6 +7,9 @@ const uint64_t bucketItemCount = 256; struct EntityBucket{ Entity entities[bucketItemCount]; }; +struct GrBindsBucket{ + CompGrBinds compGrBinds[bucketItemCount]; +}; uint64_t entityBucketIncrementer = 2; EntityHandle_T entityBucketCounter{0}; @@ -15,8 +18,17 @@ EntityBucket *entityBuckets = nullptr; DynArray<EntityHandle> entitiesMarkedForRemoval{16}; DynArray<EntityHandle> EntitiesToBeRemoved{16}; +BucketContainer<GrBindsBucket, GrBindsHandle_T> Comp_GrBinds_BucketContainer{}; + +void ECS_GetEntity_Inner(EntityHandle entHandle, Entity*& ent) { + EntityHandle_T entHandle_t{static_cast<EntityHandle_T>(entHandle)}; + assert(entHandle_t == ECS_UNSET_VAL && "Unknown entity handle"); + ent = &entityBuckets[Buckets_GetBucketIndex(entHandle_t)].entities[Buckets_GetItemIndex(entHandle_t)]; +} + void ECS_Init() { entityBuckets = Pke_New<EntityBucket>(entityBucketIncrementer); + Buckets_Init(Comp_GrBinds_BucketContainer); } EntityHandle ECS_CreateEntity_Inner(EntityHandle parentEntityHandle) { @@ -69,3 +81,32 @@ void ECS_Tick(double delta) { } entitiesMarkedForRemoval.Resize(0); } + +CompGrBinds &ECS_CreateGrBinds(EntityHandle handle) { + Entity *ent = nullptr; + ECS_GetEntity_Inner(handle, ent); + GrBindsHandle_T newHandle{Buckets_NewHandle(bucketItemCount, Comp_GrBinds_BucketContainer)}; + ent->grBindsHandle = GrBindsHandle{newHandle}; + return Comp_GrBinds_BucketContainer.buckets[Buckets_GetBucketIndex(newHandle)].compGrBinds[Buckets_GetItemIndex(newHandle)]; +} + +CompGrBinds *ECS_GetGrBinds(EntityHandle entHandle) { + Entity *ent = nullptr; + ECS_GetEntity_Inner(entHandle, ent); + GrBindsHandle_T grBindsHandle_t{static_cast<GrBindsHandle_T>(ent->grBindsHandle)}; + if (grBindsHandle_t == ECS_UNSET_VAL) return nullptr; + return &Comp_GrBinds_BucketContainer.buckets[Buckets_GetBucketIndex(grBindsHandle_t)].compGrBinds[Buckets_GetItemIndex(grBindsHandle_t)]; +} + +uint64_t ECS_GetGrBinds_BucketCount() { + return Comp_GrBinds_BucketContainer.bucketCounter; +} + +CompGrBinds *ECS_GetGrBinds(uint64_t bucketIndex, uint64_t &itemCount) { + if (bucketIndex == Comp_GrBinds_BucketContainer.bucketCounter) { + itemCount = Comp_GrBinds_BucketContainer.itemCounter; + } else { + itemCount = bucketItemCount; + } + return Comp_GrBinds_BucketContainer.buckets[bucketIndex].compGrBinds; +} |
