lav-sdl

SDL верзија програма Лавиринт
git clone https://git.sr.ht/~strahinja/lav-sdl
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување 5ef6fe89d46ab8e3bbacf869d49d822f8ba64855
родитељ 0591ce4e2739043d764b7e719d71b05c1a1c6d00
Аутор: Страхиња Радић <sr@strahinja.org>
Датум:   Thu, 10 Jul 2025 15:00:20 +0200

Restructure animation logic (fixed numbers => FPS, speed); draw status at screen bottom

Diffstat:
Mlav-sdl.c | 45++++++++++++++++++++++++++++++---------------
измењених датотека: 1, додавања: 30(+), брисања: 15(-)

diff --git a/lav-sdl.c b/lav-sdl.c @@ -12,7 +12,12 @@ #include "local.h" -#define ANIM_STEPS 10 +#define ANIM_SPEED \ + 100 /* how long does it take for the animation to go \ + * from start to finish (ms) */ +#define FPS 60 +#define ANIM_STEPS (ANIM_SPEED * FPS / 1000) + #define BUFSIZE 4096 #define CELL_SIZE 32 #define DEFAULT_WIDTH 1280 @@ -24,7 +29,6 @@ #define LOCATION_STACK_MAX (LABYRINTH_MAXWIDTH * LABYRINTH_MAXHEIGHT) #define PRINT_BUFSIZE 4096 #define PROGNAME "lav-sdl" -#define SEARCHING_DELAY 5 #define TER12_WIDTH 6 #define TER12_HEIGHT 12 #define WIN_TITLE "Lavirint (SDL version)" @@ -270,8 +274,9 @@ draw(void) SDL_RenderTexture(renderer, sprites, &cell_rect, &dest_rect); /* Render status */ - draw_text(startx, starty + bg_rect.h, TER12_WIDTH, TER12_HEIGHT, - ter12_texture, + // draw_text(startx, starty + bg_rect.h, TER12_WIDTH, TER12_HEIGHT, + draw_text(0, screen_height - text_scale_factor * TER12_HEIGHT, + TER12_WIDTH, TER12_HEIGHT, ter12_texture, "Column: %2d, Row: %2d F1 = Help Status: %s", hero.x + 1, hero.y + 1, state_descriptions[state]); @@ -910,6 +915,7 @@ main(int argc, char** argv) { SDL_Event event; float px, py; + unsigned int last_time, current_time; char datafile_pathname[BUFSIZE]; atexit(&cleanup); @@ -921,16 +927,17 @@ main(int argc, char** argv) } if (!SDL_CreateWindowAndRenderer(WIN_TITLE, DEFAULT_WIDTH, - DEFAULT_HEIGHT, SDL_WINDOW_MAXIMIZED | SDL_WINDOW_RESIZABLE, - &window, &renderer)) + DEFAULT_HEIGHT, + SDL_WINDOW_FULLSCREEN | SDL_WINDOW_BORDERLESS, &window, + &renderer)) { print_error("SDL_CreateWindowAndRenderer failed: %s", SDL_GetError()); exit(1); } - SDL_SetWindowFullscreenMode(window, NULL); - SDL_SetWindowFullscreen(window, 1); + // SDL_SetWindowFullscreenMode(window, NULL); + // SDL_SetWindowFullscreen(window, 1); SDL_SetHintWithPriority(SDL_HINT_RENDER_VSYNC, "1", SDL_HINT_OVERRIDE); SDL_SetRenderLogicalPresentation(renderer, DEFAULT_WIDTH, DEFAULT_HEIGHT, SDL_LOGICAL_PRESENTATION_LETTERBOX); @@ -946,7 +953,11 @@ main(int argc, char** argv) if (argc > 1) { if (load_labyrinth(*(argv + 1)) < 0) + { + print_error("load_labyrinth failed: %s (%s)", + strerror(errno), *(argv + 1)); exit(1); + } } else { @@ -975,15 +986,18 @@ main(int argc, char** argv) SDL_GetMouseState(&px, &py); pointer.x = px; pointer.y = py; + last_time = SDL_GetTicks(); while (running) { - while (SDL_PollEvent(&event)) - handle_event(&event); - + current_time = SDL_GetTicks(); if (animation.active) { - draw(); - step_animation(); + if (current_time > last_time + 1000 / 60) + { + draw(); + step_animation(); + last_time = current_time; + } } else { @@ -998,8 +1012,9 @@ main(int argc, char** argv) redraw = 0; } } - /* TODO: More sophisticated framerate/vsync/delay handling */ - SDL_Delay(SEARCHING_DELAY); + + while (SDL_PollEvent(&event)) + handle_event(&event); } return 0;