Add object layer rendering

This commit is contained in:
2023-11-09 11:11:47 +01:00
parent 185c9ded6e
commit af3a911f88
3 changed files with 54 additions and 8 deletions

View File

@@ -146,7 +146,10 @@ BzTileMap bzTileMapCreate(const BzTileMapDesc *desc) {
BzTileLayer *layer = map.layers + slot;
const BzTileLayerDesc *layerDesc = desc->layers + slot;
handleTileLayer(layer, cuteLayer);
if (layerDesc->handler) layerDesc->handler(layer);
if (layerDesc->handler && !layerDesc->handler(layer)) {
bzFree(layer->data);
layer->dataCount = 0;
}
map.layerCount++;
} else {
BzTileObjectLayer *objectLayer = map.objectLayers + slot;
@@ -155,7 +158,10 @@ BzTileMap bzTileMapCreate(const BzTileMapDesc *desc) {
if (!hashFunc)
hashFunc = bzStringDefaultHash;
handleTileObjectLayer(objectLayer, cuteLayer, hashFunc);
if (objectLayerDesc->handler) objectLayerDesc->handler(objectLayer);
if (objectLayerDesc->handler && !objectLayerDesc->handler(objectLayer)) {
bzFree(objectLayer->objects);
objectLayer->objectCount = 0;
}
map.objectLayerCount++;
}
@@ -228,15 +234,42 @@ static void drawLayer(BzTileLayer *layer, BzTileset *tileset) {
}
static void drawObjectLayer(BzTileObjectLayer *objectLayer) {
Color color = ORANGE;
for (int i = 0; i < objectLayer->objectCount; i++) {
BzTileShape shape = objectLayer->objects[i].shape;
switch (shape.type) {
case BZ_TILE_SHAPE_NONE:
break;
case BZ_TILE_SHAPE_POINT:
DrawCircle(shape.x, shape.y, 2.0f, color);
break;
case BZ_TILE_SHAPE_RECT:
DrawRectangle(shape.x, shape.y, shape.sizeX, shape.sizeY, color);
break;
case BZ_TILE_SHAPE_ELLIPSE:
DrawEllipse(shape.x, shape.y, shape.sizeX, shape.sizeY, color);
break;
}
}
}
void bzTileMapDraw(BzTileMap *map) {
for (i32 i = 0; i < map->layerCount; i++) {
BzTileLayer *layer = map->layers + i;
if (!layer->data) continue;
BzTileset *tileset = NULL;
if (layer->tilesetIdx != -1) {
tileset = map->tilesets + layer->tilesetIdx;
}
drawLayer(map->layers + i, tileset);
}
for (i32 i = 0; i < map->objectLayerCount; i++) {
BzTileObjectLayer *objectLayer = map->objectLayers + i;
if (!objectLayer->objects) continue;
drawObjectLayer(objectLayer);
}
}
void bzTileMapDrawColliders(BzTileMap *map) {