40 lines
1.3 KiB
GDScript
40 lines
1.3 KiB
GDScript
extends Node3D
|
|
|
|
@onready var spring_arm: SpringArm3D = $SpringArm3D
|
|
var _desired_length: float = 7.0
|
|
|
|
|
|
func _ready() -> void:
|
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
|
_desired_length = DP.f("cam_spring_length")
|
|
spring_arm.spring_length = _desired_length
|
|
|
|
|
|
func _unhandled_input(event: InputEvent) -> void:
|
|
var sensitivity: float = DP.f("cam_sensitivity")
|
|
var min_vert: float = deg_to_rad(DP.f("cam_min_vert_angle"))
|
|
var max_vert: float = deg_to_rad(DP.f("cam_max_vert_angle"))
|
|
var min_zoom: float = DP.f("cam_min_zoom")
|
|
var max_zoom: float = DP.f("cam_max_zoom")
|
|
|
|
if event is InputEventMouseMotion:
|
|
rotation.y -= event.relative.x * sensitivity
|
|
rotation.y = wrapf(rotation.y, 0.0, TAU)
|
|
rotation.x -= event.relative.y * sensitivity
|
|
rotation.x = clamp(rotation.x, min_vert, max_vert)
|
|
|
|
if event.is_action_pressed("zoom_in"):
|
|
_desired_length = clamp(_desired_length - 1.0, min_zoom, max_zoom)
|
|
if event.is_action_pressed("zoom_out"):
|
|
_desired_length = clamp(_desired_length + 1.0, min_zoom, max_zoom)
|
|
|
|
if event.is_action_pressed("toggle_mouse_capture"):
|
|
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
|
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
|
else:
|
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
|
|
|
|
|
func _process(_delta: float) -> void:
|
|
spring_arm.spring_length = _desired_length
|