Clamped camera to be bounded by map dims
This commit is contained in:
+24
-4
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user