Properly handle map collisions when placing/destroying buildings
This commit is contained in:
@@ -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, ®ion);
|
||||
|
||||
bzTileMapSetCollisions(&game->map, true, posX, posY, sizeX, sizeY);
|
||||
|
||||
switch (type) {
|
||||
case BUILDING_KEEP:
|
||||
ecs_add_id(ECS, building, Storage);
|
||||
|
||||
Reference in New Issue
Block a user