Properly handle map collisions when placing/destroying buildings

This commit is contained in:
2024-01-08 15:27:58 +01:00
parent c08fca9670
commit 88cbfe4a37
8 changed files with 56 additions and 7 deletions

View File

@@ -34,7 +34,7 @@ bool canPlaceBuilding(Game *game, BuildingType type, BzTile tileX, BzTile tileY)
}
ecs_entity_t placeBuilding(Game *game, BuildingType type,
BzTile tileX, BzTile tileY, Owner owner) {
BzTile posX, BzTile posY, Owner owner) {
if (type <= BUILDING_NONE || type >= BUILDING_COUNT)
return 0;
i32 sizeX, sizeY;
@@ -45,9 +45,15 @@ ecs_entity_t placeBuilding(Game *game, BuildingType type,
// Create entity
ecs_entity_t building = entityCreateEmpty();
ecs_add_id(ECS, building, Selectable);
ecs_set(ECS, building, Building, {
.type = type,
.pos = (Vec2i) { posX, posY },
.size = (Vec2i) { sizeX, sizeY }
});
Position pos = {
.x = tileX * tileWidth + sizeX * tileWidth * 0.5f,
.y = tileY * tileHeight + sizeY * tileHeight * 0.5f
.x = posX * tileWidth + sizeX * tileWidth * 0.5f,
.y = posY * tileHeight + sizeY * tileHeight * 0.5f
};
Size size = {
.x = sizeX * tileWidth,
@@ -72,6 +78,8 @@ ecs_entity_t placeBuilding(Game *game, BuildingType type,
region.rec.height *= sizeY;
ecs_set_ptr(ECS, building, TextureRegion, &region);
bzTileMapSetCollisions(&game->map, true, posX, posY, sizeX, sizeY);
switch (type) {
case BUILDING_KEEP:
ecs_add_id(ECS, building, Storage);