first commit
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
## Free-fly camera: WASD + QE up/down, RMB hold to look, Shift to speed up
|
||||
extends Camera3D
|
||||
|
||||
@export var speed : float = 200.0
|
||||
@export var fast_mult : float = 5.0
|
||||
@export var sensitivity: float = 0.003
|
||||
|
||||
var _captured := false
|
||||
|
||||
func _ready() -> void:
|
||||
current = true
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
if event is InputEventMouseButton:
|
||||
if event.button_index == MOUSE_BUTTON_RIGHT:
|
||||
_captured = event.pressed
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED if _captured else Input.MOUSE_MODE_VISIBLE
|
||||
|
||||
if _captured and event is InputEventMouseMotion:
|
||||
rotate_y(-event.relative.x * sensitivity)
|
||||
rotate_object_local(Vector3.RIGHT, -event.relative.y * sensitivity)
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if not _captured:
|
||||
return
|
||||
var move := Vector3.ZERO
|
||||
if Input.is_key_pressed(KEY_W): move -= basis.z
|
||||
if Input.is_key_pressed(KEY_S): move += basis.z
|
||||
if Input.is_key_pressed(KEY_A): move -= basis.x
|
||||
if Input.is_key_pressed(KEY_D): move += basis.x
|
||||
if Input.is_key_pressed(KEY_E): move += Vector3.UP
|
||||
if Input.is_key_pressed(KEY_Q): move -= Vector3.UP
|
||||
var s := speed * (fast_mult if Input.is_key_pressed(KEY_SHIFT) else 1.0)
|
||||
position += move.normalized() * s * delta
|
||||
Reference in New Issue
Block a user