Refactor game to use engine functions
This commit is contained in:
@@ -24,7 +24,7 @@ typedef struct BzAppDesc {
|
||||
|
||||
extern bool bzMain(BzAppDesc *appDesc, int argc, const char **argv);
|
||||
|
||||
#ifdef BZ_GAME_ENTRYPOINT
|
||||
#ifdef BZ_ENTRYPOINT
|
||||
#include <raylib.h>
|
||||
|
||||
|
||||
@@ -73,6 +73,7 @@ int main(int argc, const char **argv) {
|
||||
|
||||
// Deinitialize modules
|
||||
|
||||
CloseWindow();
|
||||
bzLoggerDeinit();
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#define BZ_GAME_ENTRYPOINT
|
||||
#define BZ_ENTRYPOINT
|
||||
#include <breeze.h>
|
||||
|
||||
#include <raylib.h>
|
||||
|
||||
156
game/main.c
156
game/main.c
@@ -2,6 +2,8 @@
|
||||
#include <raylib.h>
|
||||
#include <cute_tiled.h>
|
||||
#include <flecs.h>
|
||||
|
||||
#define BZ_ENTRYPOINT
|
||||
#include <breeze.h>
|
||||
#include "world/tileset.h"
|
||||
|
||||
@@ -28,106 +30,122 @@ static void drawLayer(cute_tiled_layer_t *layer, Tileset *tileset) {
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
typedef struct Game {
|
||||
cute_tiled_map_t *map;
|
||||
Camera2D camera;
|
||||
Tileset terrainTileset;
|
||||
Tileset buildingsTileset;
|
||||
cute_tiled_layer_t *terrain;
|
||||
cute_tiled_layer_t *trees;
|
||||
cute_tiled_layer_t *trees2;
|
||||
cute_tiled_layer_t *buildings;
|
||||
} Game;
|
||||
|
||||
const int screenWidth = 1280;
|
||||
const int screenHeight = 720;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "PixelDefense");
|
||||
SetTargetFPS(60);
|
||||
|
||||
cute_tiled_map_t* map = cute_tiled_load_map_from_file("assets/maps/test.tmj", NULL);
|
||||
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);
|
||||
|
||||
Tileset terrainTileset = tilesetCreate( &(TilesetDesc) {
|
||||
.source=terrainSource,
|
||||
.assetDir="assets"
|
||||
game->terrainTileset = tilesetCreate( &(TilesetDesc) {
|
||||
.source=terrainSource,
|
||||
.assetDir="assets"
|
||||
});
|
||||
Tileset buildingsTileset = tilesetCreate(&(TilesetDesc) {
|
||||
.source=buildingsSource,
|
||||
.assetDir="assets"
|
||||
game->buildingsTileset = tilesetCreate(&(TilesetDesc) {
|
||||
.source=buildingsSource,
|
||||
.assetDir="assets"
|
||||
});
|
||||
|
||||
cute_tiled_tileset_t *tileset = map->tilesets;
|
||||
terrainTileset.startID = tileset->firstgid;
|
||||
|
||||
cute_tiled_tileset_t *tileset = game->map->tilesets;
|
||||
game->terrainTileset.startID = tileset->firstgid;
|
||||
tileset = tileset->next;
|
||||
buildingsTileset.startID = tileset->firstgid;
|
||||
game->buildingsTileset.startID = tileset->firstgid;
|
||||
|
||||
cute_tiled_free_external_tileset(terrainSource);
|
||||
cute_tiled_free_external_tileset(buildingsSource);
|
||||
|
||||
|
||||
|
||||
cute_tiled_layer_t *terrain = NULL;
|
||||
cute_tiled_layer_t *trees = NULL;
|
||||
cute_tiled_layer_t *trees2 = NULL;
|
||||
cute_tiled_layer_t *buildings = NULL;
|
||||
game->terrain = NULL;
|
||||
game->trees = NULL;
|
||||
game->trees2 = NULL;
|
||||
game->buildings = NULL;
|
||||
// loop over the map's layers
|
||||
cute_tiled_layer_t* layer = map->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) {
|
||||
terrain = layer;
|
||||
game->terrain = layer;
|
||||
} else if (strcmp("Foliage", layer->name.ptr) == 0) {
|
||||
|
||||
} else if (strcmp("Trees", layer->name.ptr) == 0) {
|
||||
trees = layer;
|
||||
game->trees = layer;
|
||||
} else if (strcmp("TreesS", layer->name.ptr) == 0) {
|
||||
trees2 = layer;
|
||||
game->trees2 = layer;
|
||||
} else if (strcmp("Buildings", layer->name.ptr) == 0) {
|
||||
buildings = layer;
|
||||
game->buildings = layer;
|
||||
}
|
||||
|
||||
layer = layer->next;
|
||||
}
|
||||
|
||||
Camera2D camera = { 0 };
|
||||
camera.target = (Vector2) {0, 0};
|
||||
camera.offset = (Vector2) {screenWidth / 2.0f, screenHeight / 2.0f};
|
||||
camera.rotation = 0.0f;
|
||||
camera.zoom = 1.0f;
|
||||
int screenWidth = 1280;
|
||||
int screenHeight = 720;
|
||||
|
||||
|
||||
|
||||
while (!WindowShouldClose()) {
|
||||
if (IsKeyPressed(KEY_ESCAPE)) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (IsKeyDown(KEY_W)) camera.target.y -= 20;
|
||||
if (IsKeyDown(KEY_S)) camera.target.y += 20;
|
||||
if (IsKeyDown(KEY_A)) camera.target.x -= 20;
|
||||
if (IsKeyDown(KEY_D)) camera.target.x += 20;
|
||||
|
||||
if (IsKeyDown(KEY_Q)) camera.rotation--;
|
||||
if (IsKeyDown(KEY_E)) camera.rotation++;
|
||||
|
||||
camera.zoom += ((float)GetMouseWheelMove()*0.05f);
|
||||
|
||||
BeginDrawing();
|
||||
BeginMode2D(camera);
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
drawLayer(terrain, &terrainTileset);
|
||||
drawLayer(trees, &terrainTileset);
|
||||
drawLayer(trees2, &terrainTileset);
|
||||
drawLayer(buildings, &buildingsTileset);
|
||||
|
||||
EndMode2D();
|
||||
EndDrawing();
|
||||
|
||||
}
|
||||
|
||||
tilesetDestroy(&terrainTileset);
|
||||
tilesetDestroy(&buildingsTileset);
|
||||
cute_tiled_free_map(map);
|
||||
|
||||
CloseWindow();
|
||||
|
||||
return 0;
|
||||
game->camera = (Camera2D){ 0 };
|
||||
game->camera.target = (Vector2) {0, 0};
|
||||
game->camera.offset = (Vector2) {screenWidth / 2.0f, screenHeight / 2.0f};
|
||||
game->camera.rotation = 0.0f;
|
||||
game->camera.zoom = 1.0f;
|
||||
return true;
|
||||
}
|
||||
void deinit(Game *game) {
|
||||
tilesetDestroy(&game->terrainTileset);
|
||||
tilesetDestroy(&game->buildingsTileset);
|
||||
cute_tiled_free_map(game->map);
|
||||
}
|
||||
void render(float dt, Game *game) {
|
||||
Camera2D *camera = &game->camera;
|
||||
if (IsKeyDown(KEY_W)) camera->target.y -= 20;
|
||||
if (IsKeyDown(KEY_S)) camera->target.y += 20;
|
||||
if (IsKeyDown(KEY_A)) camera->target.x -= 20;
|
||||
if (IsKeyDown(KEY_D)) camera->target.x += 20;
|
||||
|
||||
if (IsKeyDown(KEY_Q)) camera->rotation--;
|
||||
if (IsKeyDown(KEY_E)) camera->rotation++;
|
||||
|
||||
camera->zoom += ((float)GetMouseWheelMove() * 0.05f);
|
||||
|
||||
BeginDrawing();
|
||||
BeginMode2D(*camera);
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
drawLayer(game->terrain, &game->terrainTileset);
|
||||
drawLayer(game->trees, &game->terrainTileset);
|
||||
drawLayer(game->trees2, &game->terrainTileset);
|
||||
drawLayer(game->buildings, &game->buildingsTileset);
|
||||
|
||||
EndMode2D();
|
||||
EndDrawing();
|
||||
}
|
||||
|
||||
bool bzMain(BzAppDesc *appDesc, int argc, const char **argv) {
|
||||
appDesc->width = 1280;
|
||||
appDesc->height = 720;
|
||||
appDesc->title = "PixelDefense";
|
||||
appDesc->fps = 60;
|
||||
|
||||
appDesc->init = (BzAppInitFunc) init;
|
||||
appDesc->deinit = (BzAppDeinitFunc) deinit;
|
||||
appDesc->render = (BzAppRenderFunc) render;
|
||||
|
||||
appDesc->userData = &GAME;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user