#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; int width = WINDOW_WIDTH; int height = WINDOW_HEIGHT; static struct option long_options[] = { {"map", required_argument, 0, 'm'}, {"fps", required_argument, 0, 'f'}, {"width", required_argument, 0, 'w'}, {"height", required_argument, 0, 'h'}, {0, 0, 0, 0} }; int opt; int option_index = 0; while ((opt = getopt_long_only(argc, argv, "m:f:w:h:", 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; case 'w': width = atoi(optarg); break; case 'h': height = atoi(optarg); break; } } unsigned int flags = FLAG_WINDOW_RESIZABLE | FLAG_WINDOW_HIGHDPI; if (target_fps < 0) flags |= FLAG_VSYNC_HINT; SetConfigFlags(flags); InitWindow(width, height, WINDOW_TITLE); int monitor = GetCurrentMonitor(); SetWindowPosition((GetMonitorWidth(monitor) - GetScreenWidth()) / 2, (GetMonitorHeight(monitor) - GetScreenHeight()) / 2); vfs_init(VFS_DATA_PAK); InitGame(); game.screen_width = width; game.screen_height = height; 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; }