mirror of
https://github.com/godotengine/godot-demo-projects.git
synced 2026-01-04 15:00:09 +01:00
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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user