Tweak spatial grid size, add colliders rendering
This commit is contained in:
@@ -101,8 +101,8 @@ bool init(void *userData) {
|
||||
game->entityGrid = bzSpatialGridCreate(&(BzSpatialGridDesc) {
|
||||
.maxWidth=game->map.width * game->map.tileWidth,
|
||||
.maxHeight=game->map.height * game->map.tileHeight,
|
||||
.cellWidth=game->map.tileWidth * 5,
|
||||
.cellHeight=game->map.tileHeight * 5,
|
||||
.cellWidth=game->map.tileWidth * 4,
|
||||
.cellHeight=game->map.tileHeight * 4,
|
||||
.userDataSize=sizeof(ecs_entity_t)
|
||||
});
|
||||
|
||||
@@ -118,12 +118,15 @@ bool init(void *userData) {
|
||||
ECS_SYSTEM(ECS, updateAnimations, EcsOnUpdate, Animation, TextureRegion);
|
||||
ECS_SYSTEM(ECS, updatePos, EcsOnUpdate, Position, TargetPosition, TextureRegion);
|
||||
ECS_SYSTEM(ECS, entityUpdatePhysics, EcsOnUpdate, Position, Size, SpatialGridID);
|
||||
|
||||
ECS_SYSTEM(ECS, drawDebugPath, EcsOnUpdate, Path);
|
||||
|
||||
ECS_SYSTEM(ECS, renderTerrain, EcsOnUpdate, Position, Size, Rotation, TextureRegion, TextureTerrain);
|
||||
ECS_SYSTEM(ECS, renderBuildings, EcsOnUpdate, Position, Size, Rotation, TextureRegion, TextureBuildings);
|
||||
ECS_SYSTEM(ECS, renderEntities, EcsOnUpdate, Position, Size, Rotation, TextureRegion, TextureEntities);
|
||||
|
||||
ECS_SYSTEM(ECS, renderColliders, EcsOnUpdate, Position, Size);
|
||||
|
||||
ECS_OBSERVER(ECS, targetFinish, EcsOnRemove, TargetPosition);
|
||||
ECS_OBSERVER(ECS, startPath, EcsOnSet, Path);
|
||||
return true;
|
||||
|
||||
@@ -100,9 +100,12 @@ bool initTreesLayer(BzTileMap *map, BzTileLayer *layer) {
|
||||
|
||||
f32 sizeX = tileset->tileWidth;
|
||||
f32 sizeY = tileset->tileHeight;
|
||||
f32 posX = layer->offsetX + x * sizeX + sizeX * 0.5f;
|
||||
f32 posY = layer->offsetY + y * sizeY + sizeY * 0.5f;
|
||||
f32 posX = layer->offsetX + x * sizeX;
|
||||
f32 posY = layer->offsetY + y * sizeY;
|
||||
ecs_entity_t e = ecs_new_id(ECS);
|
||||
bzSpatialGridInsert(game->entityGrid, &e, posX, posY, sizeX, sizeY);;
|
||||
posX += sizeX * 0.5f;
|
||||
posY += sizeY * 0.5f;
|
||||
ecs_add(ECS, e, TextureTerrain);
|
||||
ecs_set(ECS, e, Position, {posX, posY});
|
||||
ecs_set(ECS, e, Size, {sizeX, sizeY});
|
||||
|
||||
@@ -35,6 +35,12 @@ void renderTerrain(ecs_iter_t *it);
|
||||
void renderBuildings(ecs_iter_t *it);
|
||||
void renderEntities(ecs_iter_t *it);
|
||||
|
||||
/*
|
||||
* 1: Position
|
||||
* 2: Size
|
||||
*/
|
||||
void renderColliders(ecs_iter_t *it);
|
||||
|
||||
//void renderEntities(ecs_iter_t *it);
|
||||
void updateAnimations(ecs_iter_t *it);
|
||||
void updatePos(ecs_iter_t *it);
|
||||
|
||||
@@ -22,8 +22,9 @@ void entityUpdatePhysics(ecs_iter_t *it) {
|
||||
//bzSpatialGridUpdate(game->entityGrid, spatialID[i], pos[i].x, pos[i].y, size[i].x, size[i].y);
|
||||
ecs_entity_t *e = bzSpatialGridGetData(game->entityGrid, spatialID[i]);
|
||||
BZ_ASSERT(*e == it->entities[i]);
|
||||
bzSpatialGridRemove(game->entityGrid, spatialID[i]);
|
||||
spatialID[i] = bzSpatialGridInsert(game->entityGrid, &(it->entities[i]), pos[i].x, pos[i].y, size[i].x, size[i].y);
|
||||
f32 posX = pos[i].x - size[i].x * 0.5f;
|
||||
f32 posY = pos[i].y - size[i].y * 0.5f;
|
||||
bzSpatialGridUpdate(game->entityGrid, spatialID[i], posX, posY, size[i].x, size[i].y);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -59,7 +60,6 @@ static void render(ecs_iter_t *it) {
|
||||
if (t[i].flipX) src.width *= -1.0f;
|
||||
if (t[i].flipY) src.height *= -1.0f;
|
||||
DrawTexturePro(t[i].texture, src, dst, origin, r[i], WHITE);
|
||||
//DrawRectangleLines(dst.x - dst.width * 0.5f, dst.y - dst.height * 0.5f, dst.width, dst.height, RED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,6 +73,17 @@ void renderEntities(ecs_iter_t *it) {
|
||||
render(it);
|
||||
}
|
||||
|
||||
void renderColliders(ecs_iter_t *it) {
|
||||
Position *pos = ecs_field(it, Position, 1);
|
||||
Size *size = ecs_field(it, Size, 2);
|
||||
|
||||
for (i32 i = 0; i < it->count; i++) {
|
||||
f32 posX = pos[i].x - size[i].x * 0.5f;
|
||||
f32 posY = pos[i].y - size[i].y * 0.5f;
|
||||
DrawRectangleLines(posX, posY, size[i].x, size[i].y, RED);
|
||||
}
|
||||
}
|
||||
|
||||
void updatePos(ecs_iter_t *it) {
|
||||
Position *pos = ecs_field(it, Position, 1);
|
||||
TargetPosition *target = ecs_field(it, TargetPosition, 2);
|
||||
|
||||
Reference in New Issue
Block a user