map: maps now only render partially
authorLukas Krickl <lukas@krickl.dev>
Fri, 27 Feb 2026 16:53:01 +0000 (17:53 +0100)
committerLukas Krickl <lukas@krickl.dev>
Fri, 27 Feb 2026 16:53:01 +0000 (17:53 +0100)
If target fps is 0 the program does not crash anymore.

src/r_assets.c
src/t_map.c
src/u_time.c

index f407f757b3acfba63840974f2da8f098ef87b542..f805170740b5ca455d624d5a0cf886b0cf63bf6e 100644 (file)
@@ -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);
 
index 46cf2988611a7599dedc2a60634dff15f059a6d0..8e09900b1f82e5decde2b3c655583c87bf04c796 100644 (file)
@@ -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++) {
index 544bdac3d39ca84c417745be9ccbef14950bfac0..95423694ba3994ffc4ade611d0ab325ff79cc589 100644 (file)
@@ -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);