goonscape/game/camera.go

56 lines
1.2 KiB
Go
Raw Normal View History

2025-01-13 11:10:48 +01:00
package game
2024-10-31 01:06:39 +01:00
import (
"math"
rl "github.com/gen2brain/raylib-go/raylib"
)
2025-01-13 11:10:48 +01:00
var (
cameraDistance = float32(20.0)
cameraYaw = float32(145.0)
cameraPitch = float32(45.0)
)
2024-10-31 01:06:39 +01:00
func UpdateCamera(camera *rl.Camera3D, player rl.Vector3, deltaTime float32) {
wheelMove := rl.GetMouseWheelMove()
if wheelMove != 0 {
cameraDistance += -wheelMove * 5
if cameraDistance < 10 {
cameraDistance = 10
}
if cameraDistance > 250 {
cameraDistance = 250
}
}
if rl.IsKeyDown(rl.KeyRight) {
cameraYaw += 100 * deltaTime
}
if rl.IsKeyDown(rl.KeyLeft) {
cameraYaw -= 100 * deltaTime
}
if rl.IsKeyDown(rl.KeyUp) {
cameraPitch -= 50 * deltaTime
if cameraPitch < 20 {
cameraPitch = 20
}
}
if rl.IsKeyDown(rl.KeyDown) {
cameraPitch += 50 * deltaTime
if cameraPitch > 85 {
cameraPitch = 85
}
}
cameraYawRad := float64(cameraYaw) * rl.Deg2rad
cameraPitchRad := float64(cameraPitch) * rl.Deg2rad
2025-01-13 11:10:48 +01:00
camera.Position = rl.Vector3{
2024-10-31 01:06:39 +01:00
X: player.X + cameraDistance*float32(math.Cos(cameraYawRad))*float32(math.Cos(cameraPitchRad)),
Y: player.Y + cameraDistance*float32(math.Sin(cameraPitchRad)),
Z: player.Z + cameraDistance*float32(math.Sin(cameraYawRad))*float32(math.Cos(cameraPitchRad)),
}
2025-01-13 11:10:48 +01:00
camera.Target = player
2024-10-31 01:06:39 +01:00
}