From 08eada80a4fd13028f2a19108788f76752cc459b Mon Sep 17 00:00:00 2001 From: Mitja Felicijan Date: Fri, 1 May 2026 03:44:54 +0200 Subject: Custom FPS cli argument --- main.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 9f32ecc..1ca42bd 100644 --- a/main.c +++ b/main.c @@ -10,15 +10,17 @@ int main(int argc, char *argv[]) { 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:", long_options, &option_index)) != -1) { + while ((opt = getopt_long_only(argc, argv, "m:f:", long_options, &option_index)) != -1) { switch (opt) { case 'm': sb_free(&map_path); @@ -26,20 +28,34 @@ int main(int argc, char *argv[]) { sb_append_cstr(&map_path, optarg); skip_title = true; break; + case 'f': + target_fps = atoi(optarg); + break; } } - SetConfigFlags(FLAG_VSYNC_HINT | FLAG_WINDOW_RESIZABLE | FLAG_WINDOW_HIGHDPI); + 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); - SetTargetFPS(GetMonitorRefreshRate(monitor)); 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; -- cgit v1.2.3