45 lines
1.3 KiB
GDScript3
45 lines
1.3 KiB
GDScript3
|
extends Node3D
|
||
|
|
||
|
|
||
|
@export_range(0.0, 1.0) var sensitivity: float = 0.25
|
||
|
|
||
|
# Mouse state
|
||
|
var _mouse_position = Vector2(0.0, 0.0)
|
||
|
var _total_pitch = 0.0
|
||
|
var _vel_multiplier = 4
|
||
|
|
||
|
|
||
|
func _input(event):
|
||
|
# Receives mouse motion
|
||
|
if event is InputEventMouseMotion:
|
||
|
_mouse_position = event.relative
|
||
|
# Receives mouse button input
|
||
|
if event is InputEventMouseButton:
|
||
|
match event.button_index:
|
||
|
MOUSE_BUTTON_RIGHT: # Only allows rotation if right click down
|
||
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED if event.pressed else Input.MOUSE_MODE_VISIBLE)
|
||
|
MOUSE_BUTTON_WHEEL_UP: # Increases max velocity
|
||
|
_vel_multiplier = clamp(_vel_multiplier * 1.1, 0.2, 20)
|
||
|
MOUSE_BUTTON_WHEEL_DOWN: # Decereases max velocity
|
||
|
_vel_multiplier = clamp(_vel_multiplier / 1.1, 0.2, 20)
|
||
|
|
||
|
# Updates mouselook and movement every frame
|
||
|
func _process(_update):
|
||
|
_update_mouselook()
|
||
|
|
||
|
|
||
|
func _update_mouselook():
|
||
|
# Only rotates mouse if the mouse is captured
|
||
|
if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
|
||
|
_mouse_position *= sensitivity
|
||
|
var yaw = _mouse_position.x
|
||
|
#var pitch = _mouse_position.y
|
||
|
_mouse_position = Vector2(0, 0)
|
||
|
|
||
|
# Prevents looking up/down too far
|
||
|
#pitch = clamp(pitch, -90 - _total_pitch, 90 - _total_pitch)
|
||
|
#_total_pitch += pitch
|
||
|
|
||
|
rotate_y(deg_to_rad(-yaw))
|
||
|
#rotate_object_local(Vector3(1,0,0), deg_to_rad(-pitch))
|