Clamped camera to be bounded by map dims

This commit is contained in:
2026-07-21 06:22:43 +02:00
parent d072c56ca5
commit 7dc5746f4a
+24 -4
View File
@@ -1,5 +1,6 @@
package game
import "core:math/linalg"
import rl "vendor:raylib"
camera_init :: proc(player: ^Player, camera_zoom: f32) -> rl.Camera2D {
@@ -13,9 +14,28 @@ camera_init :: proc(player: ^Player, camera_zoom: f32) -> rl.Camera2D {
}
}
update_camera :: proc(player: ^Player, camera: ^rl.Camera2D) {
update_camera :: proc(player: ^Player, camera: ^rl.Camera2D, map_width: f32, map_height: f32) {
player_pos := get_player_center(player)
// camera.target = linalg.lerp(camera.target, player_pos, 0.18)
camera_target := get_player_center(player)
camera.target = camera_target
new_camera_target := get_player_center(player)
visible_w := f32(GAME_WIDTH) / camera.zoom
visible_h := f32(GAME_HEIGHT) / camera.zoom
half_w := visible_w * 0.5
half_h := visible_h * 0.5
if visible_w >= map_width {
new_camera_target.x = map_width * 0.5;
} else {
new_camera_target.x = clamp(new_camera_target.x, half_w, map_width - half_w)
}
if visible_h >= map_height {
new_camera_target.y = map_height * 0.5
} else {
new_camera_target.y = clamp(new_camera_target.y, half_h, map_height - half_h)
}
// Current target to new derived position
camera.target = linalg.lerp(camera.target, new_camera_target, 0.25)
}