summaryrefslogtreecommitdiff
path: root/src/ecs.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2023-09-01 10:10:51 -0400
committerJonathan Bradley <jcb@pikum.xyz>2023-09-06 17:24:27 -0400
commitb9f90793c8c0468d5f35d7af976a6e3bcd206aad (patch)
treebff30852d5bb594c7ad84c5f7f3d5a385e18fc4a /src/ecs.cpp
parent092e287ba5669f6ed40b721c0bdf2450dae95af8 (diff)
add first graphics binding component
Diffstat (limited to 'src/ecs.cpp')
-rw-r--r--src/ecs.cpp41
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;
+}