Clamped camera to be bounded by map dims
This commit is contained in:
+24
-4
@@ -1,5 +1,6 @@
|
|||||||
package game
|
package game
|
||||||
|
|
||||||
|
import "core:math/linalg"
|
||||||
import rl "vendor:raylib"
|
import rl "vendor:raylib"
|
||||||
|
|
||||||
camera_init :: proc(player: ^Player, camera_zoom: f32) -> rl.Camera2D {
|
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)
|
player_pos := get_player_center(player)
|
||||||
// camera.target = linalg.lerp(camera.target, player_pos, 0.18)
|
new_camera_target := get_player_center(player)
|
||||||
camera_target := get_player_center(player)
|
|
||||||
camera.target = camera_target
|
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