Proper layer rendering
This commit is contained in:
82
game/main.c
82
game/main.c
@@ -1,54 +1,21 @@
|
||||
#include <stdio.h>
|
||||
#include <flecs.h>
|
||||
|
||||
#include <cute_tiled.h>
|
||||
|
||||
#define BZ_ENTRYPOINT
|
||||
#include <breeze.h>
|
||||
|
||||
|
||||
static void drawTile(Texture2D texture, int tid, int tileSetWidth, int size, Vector2 pos) {
|
||||
Rectangle rec = {(tid % tileSetWidth) * size, (tid / tileSetWidth) * size, size, size};
|
||||
|
||||
DrawTextureRec(texture, rec, pos, WHITE);
|
||||
}
|
||||
|
||||
static void drawLayer(cute_tiled_layer_t *layer, BzTileset *tileset) {
|
||||
Vector2 pos = {layer->offsetx, layer->offsety};
|
||||
|
||||
for (int y = 0; y < layer->height; y++) {
|
||||
for (int x = 0; x < layer->width; x++) {
|
||||
int tile = layer->data[y * layer->width + x];
|
||||
if (tile - tileset->startID != -1) {
|
||||
Rectangle rec = bzTilesetGetTileRegion(tileset, tile);
|
||||
DrawTextureRec(tileset->tiles, rec, pos, WHITE);
|
||||
}
|
||||
pos.x += tileset->tileWidth;
|
||||
}
|
||||
pos.x = layer->offsetx;
|
||||
pos.y += tileset->tileHeight;
|
||||
}
|
||||
}
|
||||
|
||||
typedef struct Game {
|
||||
cute_tiled_map_t *map;
|
||||
Camera2D camera;
|
||||
BzTileset terrainTileset;
|
||||
BzTileset buildingsTileset;
|
||||
cute_tiled_layer_t *terrain;
|
||||
cute_tiled_layer_t *trees;
|
||||
cute_tiled_layer_t *trees2;
|
||||
cute_tiled_layer_t *buildings;
|
||||
BzTileMap map;
|
||||
} Game;
|
||||
|
||||
static Game GAME = {};
|
||||
|
||||
bool init(Game *game) {
|
||||
game->map = cute_tiled_load_map_from_file("assets/maps/test.tmj", NULL);
|
||||
cute_tiled_tileset_t *terrainSource = cute_tiled_load_external_tileset("assets/terrain.tsj", NULL);
|
||||
|
||||
cute_tiled_tileset_t *buildingsSource = cute_tiled_load_external_tileset("assets/buildings.tsj", NULL);
|
||||
|
||||
game->terrainTileset = bzTilesetCreate( &(BzTilesetDesc) {
|
||||
.path="assets/terrain.tsj",
|
||||
.texturePath="assets/terrain.png"
|
||||
@@ -58,42 +25,12 @@ bool init(Game *game) {
|
||||
.texturePath="assets/buildings.png"
|
||||
});
|
||||
|
||||
game->map = bzTileMapCreate(&(BzTileMapDesc) {
|
||||
.path="assets/maps/test.tmj",
|
||||
.tilesets[0]=game->terrainTileset,
|
||||
.tilesets[1]=game->buildingsTileset
|
||||
});
|
||||
|
||||
cute_tiled_tileset_t *tileset = game->map->tilesets;
|
||||
game->terrainTileset.startID = tileset->firstgid;
|
||||
tileset = tileset->next;
|
||||
game->buildingsTileset.startID = tileset->firstgid;
|
||||
|
||||
cute_tiled_free_external_tileset(terrainSource);
|
||||
cute_tiled_free_external_tileset(buildingsSource);
|
||||
|
||||
|
||||
|
||||
game->terrain = NULL;
|
||||
game->trees = NULL;
|
||||
game->trees2 = NULL;
|
||||
game->buildings = NULL;
|
||||
// loop over the map's layers
|
||||
cute_tiled_layer_t* layer = game->map->layers;
|
||||
while (layer)
|
||||
{
|
||||
int* data = layer->data;
|
||||
int data_count = layer->data_count;
|
||||
|
||||
if (strcmp("Terrain", layer->name.ptr) == 0) {
|
||||
game->terrain = layer;
|
||||
} else if (strcmp("Foliage", layer->name.ptr) == 0) {
|
||||
|
||||
} else if (strcmp("Trees", layer->name.ptr) == 0) {
|
||||
game->trees = layer;
|
||||
} else if (strcmp("TreesS", layer->name.ptr) == 0) {
|
||||
game->trees2 = layer;
|
||||
} else if (strcmp("Buildings", layer->name.ptr) == 0) {
|
||||
game->buildings = layer;
|
||||
}
|
||||
|
||||
layer = layer->next;
|
||||
}
|
||||
|
||||
int screenWidth = 1280;
|
||||
int screenHeight = 720;
|
||||
@@ -108,7 +45,7 @@ bool init(Game *game) {
|
||||
void deinit(Game *game) {
|
||||
bzTilesetDestroy(&game->terrainTileset);
|
||||
bzTilesetDestroy(&game->buildingsTileset);
|
||||
cute_tiled_free_map(game->map);
|
||||
bzTileMapDestroy(&game->map);
|
||||
}
|
||||
void render(float dt, Game *game) {
|
||||
Camera2D *camera = &game->camera;
|
||||
@@ -126,10 +63,7 @@ void render(float dt, Game *game) {
|
||||
BeginMode2D(*camera);
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
drawLayer(game->terrain, &game->terrainTileset);
|
||||
drawLayer(game->trees, &game->terrainTileset);
|
||||
drawLayer(game->trees2, &game->terrainTileset);
|
||||
drawLayer(game->buildings, &game->buildingsTileset);
|
||||
bzTileMapDraw(&game->map);
|
||||
|
||||
EndMode2D();
|
||||
EndDrawing();
|
||||
|
||||
Reference in New Issue
Block a user