From 4a3dddd695eb67d6b137fc9f9ebff9a564cb672c Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Fri, 27 Feb 2026 17:53:01 +0100 Subject: [PATCH] map: maps now only render partially If target fps is 0 the program does not crash anymore. --- src/r_assets.c | 2 -- src/t_map.c | 17 +++++++++-------- src/u_time.c | 14 ++++++++------ 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/r_assets.c b/src/r_assets.c index f407f75..f805170 100644 --- a/src/r_assets.c +++ b/src/r_assets.c @@ -13,8 +13,6 @@ void r_asset_init_fallback_tile(void) { const r_color border_mask = 0x222222FF; u_memset(r_asset_fallback_tile, 0, R_TILE_W * R_TILE_H); - LRTS_UNUSED(border_mask); - for (i = 0; i < R_TILE_H/2; i++) { draw_end = 4 * (i + 1); diff --git a/src/t_map.c b/src/t_map.c index 46cf298..8e09900 100644 --- a/src/t_map.c +++ b/src/t_map.c @@ -25,15 +25,16 @@ void t_map_draw(struct t_map *m) { i32 i, j; struct u_vec2 start; struct u_vec2 end; - - start.x = 0; - start.y = 0; - - end.x = m->width; - end.y = m->height; - - /* find start tile that is inside of camera viewport */ + /* estimate the viewport based on the orthogonal map + * This is not perfect, but it is good enough to avoid drawing a + * full size map. + */ + start.x = t_main_camera.x / R_TILE_W; + start.y = t_main_camera.y / R_TILE_H; + + end.x = ((t_main_camera.x + t_main_camera.viewport_x) / R_TILE_W) * 2; + end.y = ((t_main_camera.y + t_main_camera.viewport_y) / R_TILE_H) * 2; for (i = start.x; i < end.x; i++) { for (j = start.y; j < end.y; j++) { diff --git a/src/u_time.c b/src/u_time.c index 544bdac..9542369 100644 --- a/src/u_time.c +++ b/src/u_time.c @@ -11,15 +11,17 @@ u32 u_cap_fps(void) { struct lrts_config* cfg = lrts_cfg(); target_fps = cfg->target_fps; - per_frame = in_sec / target_fps; - - delta = u_timer_delta(&u_fps_timer); - delay = per_frame - delta; /* 0 target fps means we do not delay */ - if (target_fps > 0 && delta < per_frame) { - p_delay(delay); + if (target_fps > 0) { + per_frame = in_sec / target_fps; + + delta = u_timer_delta(&u_fps_timer); + delay = per_frame - delta; + if (delta < per_frame) { + p_delay(delay); + } } delta = u_timer_end(&u_fps_timer); -- 2.30.2