#define NONSTD_IMPLEMENTATION #define VFS_IMPLEMENTATION #include "all.h" #include int main(int argc, char *argv[]) { stringb map_path; sb_init(&map_path, 256); sb_append_cstr(&map_path, "maps/demo3.map"); bool skip_title = false; int target_fps = -1; static struct option long_options[] = { {"map", required_argument, 0, 'm'}, {"fps", required_argument, 0, 'f'}, {0, 0, 0, 0} }; int opt; int option_index = 0; while ((opt = getopt_long_only(argc, argv, "m:f:", long_options, &option_index)) != -1) { switch (opt) { case 'm': sb_free(&map_path); sb_init(&map_path, 256); sb_append_cstr(&map_path, optarg); skip_title = true; break; case 'f': target_fps = atoi(optarg); break; } } unsigned int flags = FLAG_WINDOW_RESIZABLE | FLAG_WINDOW_HIGHDPI; if (target_fps < 0) flags |= FLAG_VSYNC_HINT; SetConfigFlags(flags); InitWindow(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_TITLE); int monitor = GetCurrentMonitor(); SetWindowPosition((GetMonitorWidth(monitor) - GetScreenWidth()) / 2, (GetMonitorHeight(monitor) - GetScreenHeight()) / 2); vfs_init(VFS_DATA_PAK); InitGame(); SetMap(map_path.data); if (target_fps >= 0) { game.target_fps = target_fps; game.vsync = false; SetTargetFPS(game.target_fps); } else { game.vsync = true; SetTargetFPS(GetMonitorRefreshRate(monitor)); } if (skip_title) { if (LoadMap(game.map_path)) { game.mode = STATE_PLAYING; game.cursor_captured = true; DisableCursor(); } } game.vsync = true; while (!WindowShouldClose()) { // Global Map Switching (Debug/Demo) if (IsKeyPressed(KEY_ONE)) { if (LoadMap("maps/demo1.map")) { game.mode = STATE_PLAYING; game.cursor_captured = true; DisableCursor(); } } if (IsKeyPressed(KEY_TWO)) { if (LoadMap("maps/demo2.map")) { game.mode = STATE_PLAYING; game.cursor_captured = true; DisableCursor(); } } if (IsKeyPressed(KEY_THREE)) { if (LoadMap("maps/demo3.map")) { game.mode = STATE_PLAYING; game.cursor_captured = true; DisableCursor(); } } // Game State Switcher switch (game.mode) { case STATE_MENU: UpdateMenu(); DrawMenu(); break; case STATE_PLAYING: UpdateGame(); DrawGame(); break; } } UnloadMap(); UnloadAssets(); vfs_shutdown(); CloseWindow(); sb_free(&map_path); return 0; }