Overhaul tilemap, add building ownership layer

This commit is contained in:
2023-11-09 15:46:35 +01:00
parent dd96b23d32
commit f32c19dc3d
15 changed files with 324 additions and 103 deletions

11
game/components.h Normal file
View File

@@ -0,0 +1,11 @@
#ifndef PIXELDEFENSE_COMPONENTS_H
#define PIXELDEFENSE_COMPONENTS_H
#include <breeze.h>
typedef struct {
f32 x;
f32 y;
} Position, Velocity;
#endif //PIXELDEFENSE_COMPONENTS_H

View File

@@ -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;
}