extends Camera3D class_name DebugCamera3D @export_range(0, 10, 0.01) var sensitivity : float = 3 @export_range(0, 1000, 0.1) var default_velocity : float = 5 @export_range(0, 10, 0.01) var speed_scale : float = 1.17 @export_range(1, 100, 0.1) var boost_speed_multiplier : float = 3.0 @export var max_speed : float = 1000 @export var min_speed : float = 0.2 @onready var _velocity = default_velocity var main_cam : Camera3D func _ready() -> void: current = false name = "DebugCamera3D" main_cam = get_viewport().get_camera_3d() func _process(delta: float) -> void: if !current: position = main_cam.global_position rotation = main_cam.global_rotation return var direction = Vector3( float(Input.is_physical_key_pressed(KEY_D)) - float(Input.is_physical_key_pressed(KEY_A)), float(Input.is_physical_key_pressed(KEY_E)) - float(Input.is_physical_key_pressed(KEY_Q)), float(Input.is_physical_key_pressed(KEY_S)) - float(Input.is_physical_key_pressed(KEY_W)) ).normalized() if Input.is_physical_key_pressed(KEY_SHIFT): # boost translate(direction * _velocity * delta * boost_speed_multiplier) else: translate(direction * _velocity * delta) func _unhandled_input(event: InputEvent) -> void: # Toggle cameras if event.is_action_pressed(&"toggle_debug_camera"): var cam := main_cam cam.current = !cam.current current = !cam.current if not current: return if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED: if event is InputEventMouseMotion: rotation.y -= event.relative.x / 1000 * sensitivity rotation.x -= event.relative.y / 1000 * sensitivity rotation.x = clamp(rotation.x, PI/-2, PI/2) if event is InputEventMouseButton: match event.button_index: MOUSE_BUTTON_RIGHT: Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED if event.pressed else Input.MOUSE_MODE_VISIBLE) MOUSE_BUTTON_WHEEL_UP: # increase fly velocity _velocity = clamp(_velocity * speed_scale, min_speed, max_speed) MOUSE_BUTTON_WHEEL_DOWN: # decrease fly velocity _velocity = clamp(_velocity / speed_scale, min_speed, max_speed)