diff --git a/assets/game.png b/assets/game.png index 07aaed5..513c727 100644 Binary files a/assets/game.png and b/assets/game.png differ diff --git a/game/map_init.c b/game/map_init.c index 25a0e0d..a69fb49 100644 --- a/game/map_init.c +++ b/game/map_init.c @@ -97,6 +97,40 @@ bool initBuildingsLayer(BzTileMap *map, BzTileLayer *layer) { } +bool initRocksLayer(BzTileMap *map, BzTileLayer *layer) { + Game *game = ecs_singleton_get_mut(ECS, Game); + BzTileset *tileset = bzTileLayerGetTileset(map, layer); + + for (i32 y = 0; y < layer->height; y++) { + for (i32 x = 0; x < layer->width; x++) { + BzTile tile = layer->data[y * layer->width + x]; + BzTile layerTile = tile; + tile = bzTilesetGetTileID(tileset, tile); + if (tile == -1) continue; // Not a tree + + f32 sizeX = tileset->tileWidth; + f32 sizeY = tileset->tileHeight; + f32 posX = layer->offsetX + x * sizeX; + f32 posY = layer->offsetY + y * sizeY; + ecs_entity_t e = entityCreateEmpty(); + SpatialGridID gridID = bzSpatialGridInsert(game->entityGrid, &e, posX, posY, sizeX, sizeY); + ecs_set(ECS, e, SpatialGridID, {gridID}); + posX += sizeX * 0.5f; + posY += sizeY * 0.5f; + ecs_set(ECS, e, Position, {posX, posY}); + ecs_set(ECS, e, Size, {sizeX, sizeY}); + ecs_set(ECS, e, Rotation, {0}); + BzTile tileID = bzTilesetGetTileID(tileset, layerTile); + ecs_set(ECS, e, TextureRegion, {tileset->tiles, bzTilesetGetTileRegion(tileset, tileID)}); + ecs_set(ECS, e, Resource, {RES_GOLD, 80}); + ecs_add_id(ECS, e, Selectable); + ecs_add_id(ECS, e, Harvestable); + + } + } + return true; +} + bool initTreesLayer(BzTileMap *map, BzTileLayer *layer) { Game *game = ecs_singleton_get_mut(ECS, Game); @@ -169,8 +203,8 @@ void loadMap(Game *game, const char *path) { .tilesets[0]=game->tileset, .layers[LAYER_TERRAIN]=(BzTileLayerDesc) {"terrain", .renderer=terrainRender, .applyColliders=true}, - .layers[LAYER_ROCKS]=(BzTileLayerDesc) {"rocks"}, - .layers[LAYER_ROCKS2]=(BzTileLayerDesc) {"rocks_s"}, + .layers[LAYER_ROCKS]=(BzTileLayerDesc) {"rocks", BZ_TILE_LAYER_SKIP_RENDER}, + .layers[LAYER_ROCKS2]=(BzTileLayerDesc) {"rocks_s", BZ_TILE_LAYER_SKIP_RENDER}, .layers[LAYER_TREES]=(BzTileLayerDesc) {"trees", BZ_TILE_LAYER_SKIP_RENDER}, .layers[LAYER_TREES2]=(BzTileLayerDesc) {"trees_s", BZ_TILE_LAYER_SKIP_RENDER}, .layers[LAYER_BUILDINGS]=(BzTileLayerDesc) {"buildings", BZ_TILE_LAYER_SKIP_RENDER}, @@ -198,6 +232,9 @@ void loadMap(Game *game, const char *path) { bzTileMapOverrideLayer(&game->map, LAYER_TREES, initTreesLayer); bzTileMapOverrideLayer(&game->map, LAYER_TREES2, initTreesLayer); + bzTileMapOverrideLayer(&game->map, LAYER_ROCKS, initRocksLayer); + bzTileMapOverrideLayer(&game->map, LAYER_ROCKS2, initRocksLayer); + bzTileMapOverrideLayer(&game->map, LAYER_BUILDING_OWNER, initBuildingsLayer); bzTileMapOverrideLayer(&game->map, LAYER_BUILDINGS, BZ_TILE_LAYER_CLEAR); diff --git a/game/map_init.h b/game/map_init.h index 4f7628c..de6cf16 100644 --- a/game/map_init.h +++ b/game/map_init.h @@ -12,6 +12,8 @@ bool initEntityObjectsLayer(BzTileMap *map, BzTileObjectGroup *objectGroup); bool initBuildingsLayer(BzTileMap *map, BzTileLayer *layer); +bool initRocksLayer(BzTileMap *map, BzTileLayer *layer); + bool initTreesLayer(BzTileMap *map, BzTileLayer *layer); typedef struct Game Game;