extends Node3D class_name RotateCamera @export var camera_rotate_sensitivity: float = 0.005 @export var camera_zoom_sensititivy: float = 0.01 @export var zoom_max: float = 10. @export var zoom_min: float = 0.1 @onready var camera: Camera3D = $Camera3D var camera_rotate_diff: Vector3 = Vector3() var camera_zoom_weight: float = .15 var enable_rotate: bool = false func _process(delta): self._update_rotation() self._update_zoom() func _unhandled_input(event): if self.enable_rotate and event is InputEventMouseMotion: self.camera_rotate_diff.y -= event.relative.x self.camera_rotate_diff.x -= event.relative.y elif event is InputEventMouseButton: if event.is_action_pressed("camera_rotate_button"): self.enable_rotate = true elif event.is_action_released("camera_rotate_button"): self.enable_rotate = false elif event.is_action_pressed("camera_zoom_in"): self.camera_zoom_weight = clampf(self.camera_zoom_weight - camera_zoom_sensititivy, 0., 1.) elif event.is_action_pressed("camera_zoom_out"): self.camera_zoom_weight = clampf(self.camera_zoom_weight + camera_zoom_sensititivy, 0., 1.) func _update_rotation(): if self.enable_rotate: self.rotation += self.camera_rotate_diff * camera_rotate_sensitivity self.camera_rotate_diff = Vector3.ZERO func _update_zoom(): var from = self.global_position var to = self.global_position + self.camera.get_global_transform().basis.z * zoom_max var new_cam_pos = lerp(from, to, camera_zoom_weight) self.camera.global_position = new_cam_pos