#include "map_init.h" #include "components.h" #include "game_state.h" #include bool initGameObjectsLayer(BzTileMap *map, BzTileObjectGroup *objectGroup) { for (i32 i = 0; i < objectGroup->objectCount; i++) { BzTileObject object = objectGroup->objects[i]; if (bzStringDefaultHash("camera") == object.id) { GAME->camera.target.x = object.shape.x; GAME->camera.target.y = object.shape.y; } } return true; } bool initEntityObjectsLayer(BzTileMap *map, BzTileObjectGroup *objectGroup) { ECS_COMPONENT(ECS, Position); ECS_COMPONENT(ECS, Size); ECS_COMPONENT(ECS, Rotation); ECS_COMPONENT(ECS, TextureRegion); BzTileset *objectTileset = bzTileObjectGroupGetTileset(&GAME->map, objectGroup); if (!objectTileset) return true; for (i32 i = 0; i < objectGroup->objectCount; i++) { BzTileObject object = objectGroup->objects[i]; ecs_entity_t e = ecs_new_id(ECS); ecs_set(ECS, e, Position, {object.shape.x, object.shape.y}); ecs_set(ECS, e, Size, {object.shape.sizeX, object.shape.sizeY}); ecs_set(ECS, e, Rotation, {0.0f}); ecs_set(ECS, e, TextureRegion, {objectTileset->tiles, bzTilesetGetTileRegion(objectTileset, object.gid)}); } return true; } bool initBuildingsLayer(BzTileMap *map, BzTileLayer *layer) { ECS_COMPONENT(ECS, TilePosition); ECS_COMPONENT(ECS, TileSize); ECS_COMPONENT(ECS, Owner); GAME->entityMap = bzCalloc(sizeof(*GAME->entityMap), layer->width * layer->height); BzTileLayer *ownershipLayer = layer; BzTileLayer *buildingLayer = bzTileMapGetLayer(map, LAYER_BUILDINGS); BzTileset *buildingTileset = bzTileLayerGetTileset(map, buildingLayer); BzTile *data = layer->data; BzTile *buildingData = buildingLayer->data; for (i32 y = 0; y < layer->height; y++) { for (i32 x = 0; x < layer->width; x++) { BzTile ownerTile = data[y * layer->width + x]; BzTile buildingRawTile = buildingData[y * layer->width + x]; BzTile buildingTile = bzTilesetGetTile(buildingTileset, buildingRawTile); buildingTile = getTileBuilding(buildingTile); if (buildingTile == BUILDINGS_NONE || ownerTile == 0) continue; // We have a building TileSize size = {}; getBuildingSize(buildingTile, &size.sizeX, &size.sizeY); bzTileLayerSetTile(ownershipLayer, 0, x, y, size.sizeX, size.sizeY); bzLogInfo("Got size: %2d %2d", size.sizeX, size.sizeY); ecs_entity_t e = ecs_new_id(ECS); ecs_set(ECS, e, TilePosition, {.x=x, .y=y}); ecs_set(ECS, e, TileSize, {.sizeX=size.sizeX, .sizeY=size.sizeY}); ownerTile = bzTilesetGetTile(buildingTileset, ownerTile); ownerTile = getTileBuilding(ownerTile); ecs_set(ECS, e, Owner, {.playerID=ownerTile}); for (i32 yIdx = y; yIdx < y + size.sizeY; yIdx++) { for (i32 xIdx = x; xIdx < x + size.sizeX; xIdx++) { GAME->entityMap[yIdx * layer->width + xIdx] = e; } } //bzTileMapUpdateCollider(&GAME.map, x, y); } } return true; }