Remove entity map in favor of spatial grid

This commit is contained in:
2023-11-16 16:31:19 +01:00
parent 6974a80611
commit 3ec6e9ad47
12 changed files with 310 additions and 255 deletions

View File

@@ -9,10 +9,6 @@ typedef struct BzObjectPool {
i32 firstFree;
} BzObjectPool;
static i32 *bzObjectPoolGetObject(const BzObjectPool *pool, size_t idx) {
return (i32 *) ((u8 *) pool->objects + idx * pool->stride);
}
BzObjectPool *bzObjectPoolCreate(const BzObjectPoolDesc *desc) {
BZ_ASSERT(desc->objectSize > 0);
@@ -53,9 +49,16 @@ void *bzObjectPool(BzObjectPool *pool) {
pool->firstFree = *object;
return object;
}
void *bzObjectPoolGetObject(BzObjectPool *pool, i32 idx) {
BZ_ASSERT(idx >= 0 && (size_t) idx < pool->numObjects);
return (void *) ((u8 *) pool->objects + idx * pool->stride);
}
i32 bzObjectPoolGetIdx(BzObjectPool *pool, void *object) {
size_t objectIdx = (size_t) object - (size_t) pool->numObjects;
return (i32) (objectIdx / pool->stride);
}
void bzObjectPoolRelease(BzObjectPool *pool, void *object) {
size_t objectIdx = (size_t) object - (size_t) pool->objects;
objectIdx /= pool->stride;
size_t objectIdx = bzObjectPoolGetIdx(pool, object);
BZ_ASSERT(objectIdx < pool->numObjects);
*(i32 *) ((u8 *) pool->objects + objectIdx * pool->stride) = pool->firstFree;
pool->firstFree = (i32) objectIdx;