55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"math"
|
||
|
|
||
|
rl "github.com/gen2brain/raylib-go/raylib"
|
||
|
)
|
||
|
|
||
|
func UpdateCamera(camera *rl.Camera3D, player rl.Vector3, deltaTime float32) {
|
||
|
// Update camera based on mouse wheel
|
||
|
wheelMove := rl.GetMouseWheelMove()
|
||
|
if wheelMove != 0 {
|
||
|
cameraDistance += -wheelMove * 5
|
||
|
if cameraDistance < 10 {
|
||
|
cameraDistance = 10
|
||
|
}
|
||
|
if cameraDistance > 250 {
|
||
|
cameraDistance = 250
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Orbit camera around the player using arrow keys
|
||
|
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
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Calculate the new camera position using spherical coordinates
|
||
|
cameraYawRad := float64(cameraYaw) * rl.Deg2rad
|
||
|
cameraPitchRad := float64(cameraPitch) * rl.Deg2rad
|
||
|
cameraPos := rl.Vector3{
|
||
|
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)),
|
||
|
}
|
||
|
|
||
|
// Update the camera's position and target
|
||
|
camera.Position = cameraPos
|
||
|
camera.Target = rl.NewVector3(player.X, player.Y, player.Z)
|
||
|
}
|