Add animations to terrain layer
This commit is contained in:
@@ -465,6 +465,9 @@ void bzTileMapDraw(BzTileMap *map) {
|
|||||||
if (layer->tilesetIdx != -1) {
|
if (layer->tilesetIdx != -1) {
|
||||||
tileset = map->tilesets + layer->tilesetIdx;
|
tileset = map->tilesets + layer->tilesetIdx;
|
||||||
}
|
}
|
||||||
|
if (layer->desc.renderer)
|
||||||
|
layer->desc.renderer(map, layer);
|
||||||
|
else
|
||||||
drawLayer(map->layers + i, tileset);
|
drawLayer(map->layers + i, tileset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
33
game/main.c
33
game/main.c
@@ -46,6 +46,37 @@ bool bzMain(BzAppDesc *appDesc, int argc, const char **argv) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void terrainRender(BzTileMap *map, BzTileLayer *layer) {
|
||||||
|
BzTileset *tileset = bzTileLayerGetTileset(map, layer);
|
||||||
|
|
||||||
|
|
||||||
|
Vector2 drawPos = {layer->offsetX, layer->offsetY};
|
||||||
|
|
||||||
|
static f32 elapsed = 0.0f;
|
||||||
|
elapsed += GetFrameTime();
|
||||||
|
|
||||||
|
for (i32 y = 0; y < layer->height; y++) {
|
||||||
|
for (i32 x = 0; x < layer->width; x++) {
|
||||||
|
BzTile tile = bzTileLayerGetTile(layer, x, y);
|
||||||
|
tile = bzTilesetGetTile(tileset, tile);
|
||||||
|
if (tile != -1) {
|
||||||
|
if (terrainHasAnimation(tile)) {
|
||||||
|
f32 frameDuration = terrainGetAnimationFrame(tile, 0).duration / 1000.0f;
|
||||||
|
i32 numFrames = terrainGetAnimationSequence(tile).frameCount;
|
||||||
|
i32 frameIdx = (i32) (elapsed / frameDuration) % numFrames;
|
||||||
|
tile = terrainGetAnimationFrame(tile, frameIdx).frame;
|
||||||
|
}
|
||||||
|
tile += tileset->startID;
|
||||||
|
Rectangle rec = bzTilesetGetTileRegion(tileset, tile);
|
||||||
|
DrawTextureRec(tileset->tiles, rec, drawPos, WHITE);
|
||||||
|
}
|
||||||
|
drawPos.x += (float) tileset->tileWidth;
|
||||||
|
}
|
||||||
|
drawPos.x = layer->offsetX;
|
||||||
|
drawPos.y += (float) tileset->tileHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool init(void *userData) {
|
bool init(void *userData) {
|
||||||
BZ_UNUSED(userData);
|
BZ_UNUSED(userData);
|
||||||
SetExitKey(0);
|
SetExitKey(0);
|
||||||
@@ -103,7 +134,7 @@ bool init(void *userData) {
|
|||||||
.generateCollisionMap=true,
|
.generateCollisionMap=true,
|
||||||
.tilesets[0]=game->tileset,
|
.tilesets[0]=game->tileset,
|
||||||
|
|
||||||
.layers[LAYER_TERRAIN]=(BzTileLayerDesc) {"terrain", .applyColliders=true},
|
.layers[LAYER_TERRAIN]=(BzTileLayerDesc) {"terrain", .renderer=terrainRender, .applyColliders=true},
|
||||||
.layers[LAYER_ROCKS]=(BzTileLayerDesc) {"rocks"},
|
.layers[LAYER_ROCKS]=(BzTileLayerDesc) {"rocks"},
|
||||||
.layers[LAYER_ROCKS2]=(BzTileLayerDesc) {"rocks_s"},
|
.layers[LAYER_ROCKS2]=(BzTileLayerDesc) {"rocks_s"},
|
||||||
.layers[LAYER_TREES]=(BzTileLayerDesc) {"trees"},
|
.layers[LAYER_TREES]=(BzTileLayerDesc) {"trees"},
|
||||||
|
|||||||
Reference in New Issue
Block a user