Use InputEventMouseMotion.screen_relative where relevant in all demos (#1232)

This provides mouse sensitivity that is independent of the viewport
size, without needing to query for project settings.

This also inverts the mouse motion direction in the 3D navigation demo
to better match expectations, and increases mouse sensitivity in the
Window Management demo to be closer to other demos.
This commit is contained in:
Hugo Locurcio
2025-10-02 03:54:19 +02:00
committed by GitHub
parent bdc33d1568
commit 5f4a9e409f
21 changed files with 38 additions and 51 deletions

View File

@@ -8,7 +8,6 @@ var tester_index := 0
var rot_x := deg_to_rad(-22.5) # This must be kept in sync with RotationX.
var rot_y := deg_to_rad(90) # This must be kept in sync with CameraHolder.
var zoom := 2.5
var base_height := int(ProjectSettings.get_setting("display/window/size/viewport_height"))
@onready var testers: Node3D = $Testers
@onready var camera_holder: Node3D = $CameraHolder # Has a position and rotates on Y.
@@ -36,8 +35,8 @@ func _unhandled_input(event: InputEvent) -> void:
zoom = clamp(zoom, 1.5, 4)
if event is InputEventMouseMotion and event.button_mask & MAIN_BUTTONS:
# Compensate motion speed to be resolution-independent (based on the window height).
var relative_motion: Vector2 = event.relative * DisplayServer.window_get_size().y / base_height
# Use `screen_relative` to make mouse sensitivity independent of viewport resolution.
var relative_motion: Vector2 = event.screen_relative
rot_y -= relative_motion.x * ROT_SPEED
rot_x -= relative_motion.y * ROT_SPEED
rot_x = clamp(rot_x, deg_to_rad(-90), 0)