Fix spatial grid not calculating position correctly
This commit is contained in:
@@ -54,7 +54,7 @@ void *bzObjectPoolGetObject(BzObjectPool *pool, i32 idx) {
|
|||||||
return (void *) ((u8 *) pool->objects + idx * pool->stride);
|
return (void *) ((u8 *) pool->objects + idx * pool->stride);
|
||||||
}
|
}
|
||||||
i32 bzObjectPoolGetIdx(BzObjectPool *pool, void *object) {
|
i32 bzObjectPoolGetIdx(BzObjectPool *pool, void *object) {
|
||||||
size_t objectIdx = (size_t) object - (size_t) pool->numObjects;
|
size_t objectIdx = (size_t) object - (size_t) pool->objects;
|
||||||
return (i32) (objectIdx / pool->stride);
|
return (i32) (objectIdx / pool->stride);
|
||||||
}
|
}
|
||||||
void bzObjectPoolRelease(BzObjectPool *pool, void *object) {
|
void bzObjectPoolRelease(BzObjectPool *pool, void *object) {
|
||||||
|
|||||||
@@ -92,13 +92,13 @@ static void removeCell(BzSpatialGrid *grid, BzSpatialGridID id, i32 x, i32 y) {
|
|||||||
static BzSpatialGridIndex calculateGridIndex(BzSpatialGrid *grid, f32 posX, f32 posY, f32 sizeX, f32 sizeY) {
|
static BzSpatialGridIndex calculateGridIndex(BzSpatialGrid *grid, f32 posX, f32 posY, f32 sizeX, f32 sizeY) {
|
||||||
i32 minX = (i32) floorf(posX);
|
i32 minX = (i32) floorf(posX);
|
||||||
i32 minY = (i32) floorf(posY);
|
i32 minY = (i32) floorf(posY);
|
||||||
i32 maxX = (i32) floorf(posX + sizeX);
|
i32 maxX = (i32) ceilf(posX + sizeX);
|
||||||
i32 maxY = (i32) floorf(posY + sizeY);
|
i32 maxY = (i32) ceilf(posY + sizeY);
|
||||||
return (BzSpatialGridIndex) {
|
return (BzSpatialGridIndex) {
|
||||||
(i16) (minX / grid->width),
|
(i16) (minX / grid->cellWidth),
|
||||||
(i16) (minY / grid->height),
|
(i16) (minY / grid->cellHeight),
|
||||||
(i16) (maxX / grid->width),
|
(i16) (maxX / grid->cellWidth),
|
||||||
(i16) (maxY / grid->height),
|
(i16) (maxY / grid->cellHeight),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -211,11 +211,16 @@ void bzSpatialGridDrawDebugGrid(const BzSpatialGrid *grid) {
|
|||||||
for (i32 y = 0; y < grid->height; y++) {
|
for (i32 y = 0; y < grid->height; y++) {
|
||||||
for (i32 x = 0; x < grid->width; x++) {
|
for (i32 x = 0; x < grid->width; x++) {
|
||||||
BzSpatialGridID **cell = getCell(grid, x, y);
|
BzSpatialGridID **cell = getCell(grid, x, y);
|
||||||
i32 numEntries = 0;
|
i32 numEntries = bzArraySize(*cell);
|
||||||
if (*cell) numEntries = bzArraySize(*cell);
|
Color color = WHITE;
|
||||||
|
i32 tint = numEntries;
|
||||||
|
if (tint > 10) tint = 10;
|
||||||
|
tint = 10 - tint;
|
||||||
|
color.g = 25 * tint;
|
||||||
|
color.b = 25 * tint;
|
||||||
char buf[8];
|
char buf[8];
|
||||||
snprintf(buf, sizeof(buf), "%d", numEntries);
|
snprintf(buf, sizeof(buf), "%d", numEntries);
|
||||||
DrawText(buf, posX + 1, posY + 1, 6, WHITE);
|
DrawText(buf, posX + 1, posY + 1, 6, color);
|
||||||
|
|
||||||
posX += grid->cellWidth;
|
posX += grid->cellWidth;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ typedef struct BzSpatialGridDesc {
|
|||||||
BzSpatialGrid *bzSpatialGridCreate(const BzSpatialGridDesc *desc);
|
BzSpatialGrid *bzSpatialGridCreate(const BzSpatialGridDesc *desc);
|
||||||
void bzSpatialGridDestroy(BzSpatialGrid *grid);
|
void bzSpatialGridDestroy(BzSpatialGrid *grid);
|
||||||
|
|
||||||
//void *bzSpatialGridGetData(const BzSpatialGrid *grid, BzSpatialGridID id);
|
void *bzSpatialGridGetData(const BzSpatialGrid *grid, BzSpatialGridID id);
|
||||||
|
|
||||||
BzSpatialGridID bzSpatialGridInsert(BzSpatialGrid *grid, void *data, f32 posX, f32 posY, f32 sizeX, f32 sizeY);
|
BzSpatialGridID bzSpatialGridInsert(BzSpatialGrid *grid, void *data, f32 posX, f32 posY, f32 sizeX, f32 sizeY);
|
||||||
BzSpatialGridID bzSpatialGridUpdate(BzSpatialGrid *grid, BzSpatialGridID id, f32 posX, f32 posY, f32 sizeX, f32 sizeY);
|
BzSpatialGridID bzSpatialGridUpdate(BzSpatialGrid *grid, BzSpatialGridID id, f32 posX, f32 posY, f32 sizeX, f32 sizeY);
|
||||||
|
|||||||
Reference in New Issue
Block a user