Buildings as entities instead of map layer
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
#include <flecs.h>
|
||||
|
||||
#include "buildings.h"
|
||||
#include "components.h"
|
||||
#include "entity_factory.h"
|
||||
#include "game_state.h"
|
||||
@@ -60,40 +61,24 @@ bool initBuildingsLayer(BzTileMap *map, BzTileLayer *layer) {
|
||||
BzTileset *buildingTileset = bzTileLayerGetTileset(map, buildingLayer);
|
||||
BzTile *data = layer->data;
|
||||
BzTile *buildingData = buildingLayer->data;
|
||||
BZ_ASSERT(ownershipLayer->tilesetIdx == buildingLayer->tilesetIdx);
|
||||
|
||||
for (i32 y = 0; y < layer->height; y++) {
|
||||
for (i32 x = 0; x < layer->width; x++) {
|
||||
BzTile ownerTile = data[y * layer->width + x];
|
||||
BzTile ownerRawTile = data[y * layer->width + x];
|
||||
BzTileID owner = bzTilesetGetTileID(buildingTileset, ownerRawTile);
|
||||
BzTile buildingRawTile = buildingData[y * layer->width + x];
|
||||
BzTile buildingTile = bzTilesetGetTileID(buildingTileset, buildingRawTile);
|
||||
buildingTile = getTileBuilding(buildingTile);
|
||||
if (buildingTile == BUILDING_NONE || ownerTile == 0) continue;
|
||||
// We have a building
|
||||
TileSize tileSize = {};
|
||||
getBuildingSize(buildingTile, &tileSize.sizeX, &tileSize.sizeY);
|
||||
bzTileLayerSetTile(ownershipLayer, 0, x, y, tileSize.sizeX, tileSize.sizeY);
|
||||
BzTile buildingType = bzTilesetGetTileID(buildingTileset, buildingRawTile);
|
||||
buildingType = getTileBuilding(buildingType);
|
||||
if (buildingType <= BUILDING_NONE || buildingType >= BUILDING_COUNT)
|
||||
continue;
|
||||
placeBuilding(game, buildingType, x, y, (Owner) {owner});
|
||||
|
||||
const i32 tileWidth = map->tileWidth;
|
||||
const i32 tileHeight = map->tileHeight;
|
||||
ecs_entity_t e = entityCreateEmpty();
|
||||
Size size = {.x = tileSize.sizeX * tileWidth, .y = tileSize.sizeY * tileHeight };
|
||||
ecs_set_ptr(ECS, e, Size, &size);
|
||||
ecs_set(ECS, e, Position, {
|
||||
.x = x * tileWidth + size.x * 0.5f,
|
||||
.y = y * tileHeight + size.y * 0.5f
|
||||
});
|
||||
ownerTile = bzTilesetGetTileID(buildingTileset, ownerTile);
|
||||
ownerTile = getTileBuilding(ownerTile);
|
||||
ecs_set(ECS, e, Owner, {.playerID=ownerTile});
|
||||
ecs_add_id(ECS, e, Selectable);
|
||||
//if (buildingTile == BUILDINGS_WAREHOUSE) {
|
||||
// ecs_set(ECS, e, Storage, {});
|
||||
//}
|
||||
if (buildingTile == BUILDING_KEEP) {
|
||||
ecs_add_id(ECS, e, Storage);
|
||||
}
|
||||
|
||||
//bzTileMapUpdateCollider(&GAME.map, x, y);
|
||||
i32 sizeX = 1;
|
||||
i32 sizeY = 1;
|
||||
getBuildingSize(buildingType, &sizeX, &sizeY);
|
||||
x += sizeX - 1;
|
||||
y += sizeY - 1;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user