Properly handle map collisions when placing/destroying buildings
This commit is contained in:
@@ -508,7 +508,19 @@ bool bzTileMapHasCollision(BzTileMap *map, i32 x, i32 y) {
|
||||
i32 idx = y * map->width + x;
|
||||
return map->collisionMap[idx];
|
||||
}
|
||||
void bzTileMapSetCollisions(BzTileMap *map, bool collision, i32 startX, i32 startY, i32 sizeX, i32 sizeY) {
|
||||
i32 endX = startX + sizeX;
|
||||
i32 endY = startY + sizeY;
|
||||
BZ_ASSERT(map->collisionMap);
|
||||
BZ_ASSERT(startX >= 0 && endX <= map->width &&
|
||||
startY >= 0 && endY <= map->height);
|
||||
|
||||
for (i32 y = startY; y < endY; y++) {
|
||||
for (i32 x = startX; x < endX; x++) {
|
||||
map->collisionMap[y * map->width + x] = collision;
|
||||
}
|
||||
}
|
||||
}
|
||||
void bzTileMapUpdateCollisions(BzTileMap *map, i32 x, i32 y, i32 sizeX, i32 sizeY) {
|
||||
if (!map->collisionMap) return;
|
||||
updateCollisionMap(map, x, y, x + sizeX, y + sizeY);
|
||||
|
||||
@@ -131,6 +131,7 @@ bool bzTileMapCanRayCastLine(BzTileMap *map, Vector2 from, Vector2 to);
|
||||
void bzTileMapDraw(BzTileMap *map);
|
||||
void bzTileMapDrawCollisions(BzTileMap *map);
|
||||
bool bzTileMapHasCollision(BzTileMap *map, i32 x, i32 y);
|
||||
void bzTileMapSetCollisions(BzTileMap *map, bool collision, i32 startX, i32 startY, i32 sizeX, i32 sizeY);
|
||||
void bzTileMapUpdateCollisions(BzTileMap *map, i32 x, i32 y, i32 sizeX, i32 sizeY);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user