Add object layer rendering
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user