From b40beb5656b262349e08d958413a665e1d1fc6ed Mon Sep 17 00:00:00 2001 From: Klemen Plestenjak Date: Tue, 7 Nov 2023 17:25:49 +0100 Subject: [PATCH] Refactor game to use engine functions --- engine/breeze/game.h | 3 +- engine/tests/window_test.c | 2 +- game/main.c | 156 +++++++++++++++++++++---------------- 3 files changed, 90 insertions(+), 71 deletions(-) diff --git a/engine/breeze/game.h b/engine/breeze/game.h index 2ceb06b..5730541 100644 --- a/engine/breeze/game.h +++ b/engine/breeze/game.h @@ -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 @@ -73,6 +73,7 @@ int main(int argc, const char **argv) { // Deinitialize modules + CloseWindow(); bzLoggerDeinit(); return 0; diff --git a/engine/tests/window_test.c b/engine/tests/window_test.c index 4b9571a..f155876 100644 --- a/engine/tests/window_test.c +++ b/engine/tests/window_test.c @@ -1,4 +1,4 @@ -#define BZ_GAME_ENTRYPOINT +#define BZ_ENTRYPOINT #include #include diff --git a/game/main.c b/game/main.c index b0c5319..36cfc21 100644 --- a/game/main.c +++ b/game/main.c @@ -2,6 +2,8 @@ #include #include #include + +#define BZ_ENTRYPOINT #include #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; }