Files
godot-demo-projects/3d/physics_tests/utils/camera_orbit.gd
A Thousand Ships 82913393a8 Improve code style (#1021)
* Remove unnecessary use of `self`
* Connect to signals directly over `connect("name")`
* Use `call_deferred` on callables over `call_deferred("name"))`
* Emit signals directly over `emit_signal("name"...)`
2024-03-25 17:06:52 +01:00

36 lines
828 B
GDScript

extends Camera3D
const ROTATION_COEFF = 0.02
var _rotation_enabled = false
var _rotation_pivot
func _ready():
_initialize_pivot.call_deferred()
func _unhandled_input(event):
var mouse_button_event = event as InputEventMouseButton
if mouse_button_event:
if mouse_button_event.button_index == MOUSE_BUTTON_RIGHT:
_rotation_enabled = mouse_button_event.pressed
return
if not _rotation_enabled:
return
var mouse_motion_event = event as InputEventMouseMotion
if mouse_motion_event:
var rotation_delta = mouse_motion_event.relative.x
_rotation_pivot.rotate(Vector3.UP, -rotation_delta * ROTATION_COEFF)
func _initialize_pivot():
_rotation_pivot = Node3D.new()
var camera_parent = get_parent()
camera_parent.add_child(_rotation_pivot)
camera_parent.remove_child(self)
_rotation_pivot.add_child(self)