Skip to content

Commit 5f4a9e4

Browse files
authored
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.
1 parent bdc33d1 commit 5f4a9e4

File tree

21 files changed

+38
-51
lines changed

21 files changed

+38
-51
lines changed

2d/glow/beach_cave.gd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ var glow_map := preload("res://glow_map.webp")
88

99
func _unhandled_input(event: InputEvent) -> void:
1010
if event is InputEventMouseMotion and event.button_mask > 0:
11-
cave.position.x = clampf(cave.position.x + event.relative.x, -CAVE_LIMIT, 0)
11+
cave.position.x = clampf(cave.position.x + event.screen_relative.x, -CAVE_LIMIT, 0)
1212

1313
if event.is_action_pressed("toggle_glow_map"):
1414
if $WorldEnvironment.environment.glow_map:

3d/antialiasing/anti_aliasing.gd

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ var tester_index := 0
88
var rot_x := -TAU / 16 # This must be kept in sync with RotationX.
99
var rot_y := TAU / 8 # This must be kept in sync with CameraHolder.
1010
var camera_distance := 2.0
11-
var base_height := int(ProjectSettings.get_setting("display/window/size/viewport_height"))
1211

1312
@onready var testers: Node3D = $Testers
1413
@onready var camera_holder: Node3D = $CameraHolder # Has a position and rotates on Y.
@@ -40,8 +39,8 @@ func _unhandled_input(event: InputEvent) -> void:
4039
camera_distance = clamp(camera_distance, 1.5, 6)
4140

4241
if event is InputEventMouseMotion and event.button_mask & MAIN_BUTTONS:
43-
# Compensate motion speed to be resolution-independent (based on the window height).
44-
var relative_motion: Vector2 = event.relative * DisplayServer.window_get_size().y / base_height
42+
# Use `screen_relative` to make mouse sensitivity independent of viewport resolution.
43+
var relative_motion: Vector2 = event.screen_relative
4544
rot_y -= relative_motion.x * ROT_SPEED
4645
rot_x -= relative_motion.y * ROT_SPEED
4746
rot_x = clamp(rot_x, -1.57, 0)

3d/csg/csg.gd

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ var tester_index := 0
88
var rot_x := -TAU / 16 # This must be kept in sync with RotationX.
99
var rot_y := TAU / 8 # This must be kept in sync with CameraHolder.
1010
var camera_distance := 4.0
11-
var base_height := int(ProjectSettings.get_setting("display/window/size/viewport_height"))
1211

1312
@onready var testers: Node3D = $Testers
1413
@onready var camera_holder: Node3D = $CameraHolder # Has a position and rotates on Y.
@@ -35,8 +34,8 @@ func _unhandled_input(event: InputEvent) -> void:
3534
camera_distance = clamp(camera_distance, 1.5, 6)
3635

3736
if event is InputEventMouseMotion and event.button_mask & MAIN_BUTTONS:
38-
# Compensate motion speed to be resolution-independent (based on the window height).
39-
var relative_motion: Vector2 = event.relative * DisplayServer.window_get_size().y / base_height
37+
# Use `screen_relative` to make mouse sensitivity independent of viewport resolution.
38+
var relative_motion: Vector2 = event.screen_relative
4039
rot_y -= relative_motion.x * ROT_SPEED
4140
rot_x -= relative_motion.y * ROT_SPEED
4241
rot_x = clamp(rot_x, -1.57, 0)

3d/decals/tester.gd

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ var tester_index := 0
88
var rot_x := deg_to_rad(-22.5) # This must be kept in sync with RotationX.
99
var rot_y := deg_to_rad(90) # This must be kept in sync with CameraHolder.
1010
var zoom := 1.5
11-
var base_height: = int(ProjectSettings.get_setting("display/window/size/viewport_height"))
1211

1312
@onready var testers: Node3D = $Testers
1413
@onready var camera_holder: Node3D = $CameraHolder # Has a position and rotates on Y.
@@ -49,8 +48,8 @@ func _unhandled_input(event: InputEvent) -> void:
4948
zoom = clampf(zoom, 1.5, 4)
5049

5150
if event is InputEventMouseMotion and event.button_mask & MAIN_BUTTONS:
52-
# Compensate motion speed to be resolution-independent (based on the window height).
53-
var relative_motion: Vector2 = event.relative * DisplayServer.window_get_size().y / base_height
51+
# Use `screen_relative` to make mouse sensitivity independent of viewport resolution.
52+
var relative_motion: Vector2 = event.screen_relative
5453
rot_y -= relative_motion.x * ROT_SPEED
5554
rot_x -= relative_motion.y * ROT_SPEED
5655
rot_x = clampf(rot_x, deg_to_rad(-90), 0)

3d/global_illumination/camera.gd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ func _input(event: InputEvent) -> void:
1414
# Mouse look (only if the mouse is captured).
1515
if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
1616
# Horizontal mouse look.
17-
rot.y -= event.relative.x * MOUSE_SENSITIVITY
17+
rot.y -= event.screen_relative.x * MOUSE_SENSITIVITY
1818
# Vertical mouse look.
19-
rot.x = clamp(rot.x - event.relative.y * MOUSE_SENSITIVITY, -1.57, 1.57)
19+
rot.x = clamp(rot.x - event.screen_relative.y * MOUSE_SENSITIVITY, -1.57, 1.57)
2020
transform.basis = Basis.from_euler(rot)
2121

2222
if event.is_action_pressed("toggle_mouse_capture"):

3d/ik/fps/example_player.gd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,8 +204,8 @@ func process_movement(delta):
204204
# Mouse based camera movement
205205
func _input(event):
206206
if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
207-
rotate_y(deg_to_rad(event.relative.x * MOUSE_SENSITIVITY * -1))
208-
camera_holder.rotate_x(deg_to_rad(event.relative.y * MOUSE_SENSITIVITY))
207+
rotate_y(deg_to_rad(event.screen_relative.x * MOUSE_SENSITIVITY * -1))
208+
camera_holder.rotate_x(deg_to_rad(event.screen_relative.y * MOUSE_SENSITIVITY))
209209

210210
# We need to clamp the camera's rotation so we cannot rotate ourselves upside down
211211
var camera_rot = camera_holder.rotation_degrees

3d/labels_and_texts/3d_labels_and_texts.gd

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ var tester_index := 0
88
var rot_x := -TAU / 16 # This must be kept in sync with RotationX.
99
var rot_y := TAU / 8 # This must be kept in sync with CameraHolder.
1010
var camera_distance := 2.0
11-
var base_height: = int(ProjectSettings.get_setting("display/window/size/viewport_height"))
1211

1312
@onready var testers: Node3D = $Testers
1413
@onready var camera_holder: Node3D = $CameraHolder # Has a position and rotates on Y.
@@ -36,8 +35,8 @@ func _unhandled_input(event: InputEvent) -> void:
3635
camera_distance = clamp(camera_distance, 1.5, 6)
3736

3837
if event is InputEventMouseMotion and event.button_mask & MAIN_BUTTONS:
39-
# Compensate motion speed to be resolution-independent (based on the window height).
40-
var relative_motion: Vector2 = event.relative * DisplayServer.window_get_size().y / base_height
38+
# Use `screen_relative` to make mouse sensitivity independent of viewport resolution.
39+
var relative_motion: Vector2 = event.screen_relative
4140
rot_y -= relative_motion.x * ROT_SPEED
4241
rot_x -= relative_motion.y * ROT_SPEED
4342
rot_x = clamp(rot_x, -1.57, 0)

3d/lights_and_shadows/tester.gd

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ var tester_index := 0
88
var rot_x := deg_to_rad(-22.5) # This must be kept in sync with RotationX.
99
var rot_y := deg_to_rad(90) # This must be kept in sync with CameraHolder.
1010
var zoom := 2.5
11-
var base_height := int(ProjectSettings.get_setting("display/window/size/viewport_height"))
1211

1312
@onready var testers: Node3D = $Testers
1413
@onready var camera_holder: Node3D = $CameraHolder # Has a position and rotates on Y.
@@ -36,8 +35,8 @@ func _unhandled_input(event: InputEvent) -> void:
3635
zoom = clamp(zoom, 1.5, 4)
3736

3837
if event is InputEventMouseMotion and event.button_mask & MAIN_BUTTONS:
39-
# Compensate motion speed to be resolution-independent (based on the window height).
40-
var relative_motion: Vector2 = event.relative * DisplayServer.window_get_size().y / base_height
38+
# Use `screen_relative` to make mouse sensitivity independent of viewport resolution.
39+
var relative_motion: Vector2 = event.screen_relative
4140
rot_y -= relative_motion.x * ROT_SPEED
4241
rot_x -= relative_motion.y * ROT_SPEED
4342
rot_x = clamp(rot_x, deg_to_rad(-90), 0)

3d/material_testers/tester.gd

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ var tester_index := 0
1010
var rot_x := -0.5 # This must be kept in sync with RotationX.
1111
var rot_y := -0.5 # This must be kept in sync with CameraHolder.
1212
var zoom := 5.0
13-
var base_height := int(ProjectSettings.get_setting("display/window/size/viewport_height"))
1413

1514
var backgrounds: Array[Dictionary] = [
1615
{ path = "res://backgrounds/schelde.hdr", name = "Riverside" },
@@ -49,8 +48,8 @@ func _unhandled_input(event: InputEvent) -> void:
4948
camera.position.z = zoom
5049

5150
if event is InputEventMouseMotion and event.button_mask & MAIN_BUTTONS:
52-
# Compensate motion speed to be resolution-independent (based on the window height).
53-
var relative_motion: Vector2 = event.relative * DisplayServer.window_get_size().y / base_height
51+
# Use `screen_relative` to make mouse sensitivity independent of viewport resolution.
52+
var relative_motion: Vector2 = event.screen_relative
5453
rot_y -= relative_motion.x * ROT_SPEED
5554
rot_y = clamp(rot_y, -1.95, 1.95)
5655
rot_x -= relative_motion.y * ROT_SPEED

3d/navigation/navmesh.gd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@ func _unhandled_input(event: InputEvent) -> void:
2424

2525
elif event is InputEventMouseMotion:
2626
if event.button_mask & (MOUSE_BUTTON_MASK_MIDDLE + MOUSE_BUTTON_MASK_RIGHT):
27-
_cam_rotation += event.relative.x * 0.005
27+
_cam_rotation -= event.screen_relative.x * 0.005
2828
$CameraBase.set_rotation(Vector3.UP * _cam_rotation)

0 commit comments

Comments
 (0)