34 lines
889 B
GDScript
34 lines
889 B
GDScript
class_name CameraRig
|
|
extends Node3D
|
|
|
|
@export var sensitivity := 0.005
|
|
@export var follow_speed := 5.0
|
|
@export var cam: Camera3D
|
|
|
|
var target: Node3D # Controlled by PlayerController
|
|
|
|
var _dragging := false
|
|
|
|
|
|
func _unhandled_input(event: InputEvent) -> void:
|
|
if event is InputEventMouseButton:
|
|
match event.button_index:
|
|
MOUSE_BUTTON_LEFT:
|
|
_dragging = event.pressed
|
|
MOUSE_BUTTON_WHEEL_UP:
|
|
cam.position.z = maxf(cam.position.z - 1.0, 3.0)
|
|
MOUSE_BUTTON_WHEEL_DOWN:
|
|
cam.position.z = minf(cam.position.z + 1.0, 30.0)
|
|
elif event is InputEventMouseMotion and _dragging:
|
|
rotation.y -= event.relative.x * sensitivity
|
|
rotation.x = clampf(
|
|
rotation.x - event.relative.y * sensitivity,
|
|
deg_to_rad(-80.0),
|
|
deg_to_rad(-10.0)
|
|
)
|
|
|
|
|
|
func _process(delta: float) -> void:
|
|
if target:
|
|
global_position = global_position.lerp(target.global_position, follow_speed * delta)
|