Overhaul tilemap, add building ownership layer
This commit is contained in:
51
game/main.c
51
game/main.c
@@ -15,7 +15,7 @@ typedef struct Game {
|
||||
|
||||
static Game GAME = {};
|
||||
|
||||
bool handleGameObjects(BzTileObjectLayer *objectLayer) {
|
||||
bool handleGameObjects(BzTileObjectGroup *objectLayer, BzTileObject *objects, i32 objectCount) {
|
||||
for (i32 i = 0; i < objectLayer->objectCount; i++) {
|
||||
BzTileObject object = objectLayer->objects[i];
|
||||
if (bzStringDefaultHash("camera") == object.id) {
|
||||
@@ -24,11 +24,19 @@ bool handleGameObjects(BzTileObjectLayer *objectLayer) {
|
||||
GAME.camera.target.y = object.shape.y;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool handleBuildLayer(BzTileLayer *layer) {
|
||||
return false;
|
||||
bool handleBuildLayer(BzTileLayer *layer, BzTile *data, i32 dataCount) {
|
||||
for (i32 y = 0; y < layer->height; y++) {
|
||||
for (i32 x = 0; x < layer->width; x++) {
|
||||
BzTile *tile = data + y * layer->width + x;
|
||||
if (*tile == 0) continue;
|
||||
*tile = 0;
|
||||
bzTileMapUpdateCollider(&GAME.map, x, y);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool canBuildOn(BzTileMap *map, i32 tileX, i32 tileY, i32 sizeX, i32 sizeY) {
|
||||
@@ -82,6 +90,20 @@ bool canBuildOn(BzTileMap *map, i32 tileX, i32 tileY, i32 sizeX, i32 sizeY) {
|
||||
return true;
|
||||
}
|
||||
|
||||
typedef enum Layers {
|
||||
LAYER_TERRAIN = 0,
|
||||
LAYER_FOLIAGE,
|
||||
LAYER_TREES,
|
||||
LAYER_TREES2,
|
||||
LAYER_BUILDINGS,
|
||||
LAYER_BUILDING_OWNER,
|
||||
} Layers;
|
||||
|
||||
typedef enum ObjectGroup {
|
||||
OBJECTS_GAME = 0,
|
||||
OBJECTS_ENTITIES,
|
||||
} ObjectGroup;
|
||||
|
||||
bool init(Game *game) {
|
||||
int screenWidth = 1280;
|
||||
int screenHeight = 720;
|
||||
@@ -106,16 +128,23 @@ bool init(Game *game) {
|
||||
.tilesets[0]=game->terrainTileset,
|
||||
.tilesets[1]=game->buildingsTileset,
|
||||
|
||||
.layers[0]=(BzTileLayerDesc) {"Terrain", NULL},
|
||||
.layers[1]=(BzTileLayerDesc) {"Foliage", NULL},
|
||||
.layers[2]=(BzTileLayerDesc) {"Trees", NULL},
|
||||
.layers[3]=(BzTileLayerDesc) {"TreesS", NULL},
|
||||
.layers[4]=(BzTileLayerDesc) {"Buildings", handleBuildLayer},
|
||||
.layers[LAYER_TERRAIN]=(BzTileLayerDesc) {"Terrain"},
|
||||
.layers[LAYER_FOLIAGE]=(BzTileLayerDesc) {"Foliage"},
|
||||
.layers[LAYER_TREES]=(BzTileLayerDesc) {"Trees"},
|
||||
.layers[LAYER_TREES2]=(BzTileLayerDesc) {"TreesS"},
|
||||
.layers[LAYER_BUILDINGS]=(BzTileLayerDesc) {"Buildings"},
|
||||
.layers[LAYER_BUILDING_OWNER]=(BzTileLayerDesc) {"BuildingOwnership"},
|
||||
|
||||
.objectLayers[0]=(BzTileObjectsDesc) {"Game", handleGameObjects},
|
||||
.objectLayers[1]=(BzTileObjectsDesc ) {"Entities", NULL}
|
||||
.objectGroups[OBJECTS_GAME]=(BzTileObjectsDesc) {"Game"},
|
||||
.objectGroups[OBJECTS_ENTITIES]=(BzTileObjectsDesc ) {"Entities"}
|
||||
});
|
||||
|
||||
bzTileMapOverrideLayer(&game->map, LAYER_BUILDINGS, handleBuildLayer);
|
||||
bzTileMapOverrideLayer(&game->map, LAYER_BUILDING_OWNER, BZ_TILE_LAYER_CLEAR);
|
||||
|
||||
bzTileMapOverrideObjectGroup(&game->map, OBJECTS_GAME, handleGameObjects);
|
||||
bzTileMapOverrideObjectGroup(&game->map, OBJECTS_ENTITIES, BZ_TILE_OBJECTS_CLEAR);
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user