diff --git a/modules/actors/player/scripts/camera.gd b/modules/actors/player/scripts/camera.gd new file mode 100644 index 0000000..93da4ff --- /dev/null +++ b/modules/actors/player/scripts/camera.gd @@ -0,0 +1,32 @@ +extends Node3D + +@export var sensitivity: float = 0.2 + +@onready var player: CharacterBody3D = $".." +@onready var fps_camera_parent: Node3D = $"." +@onready var fps_camera: Camera3D = $MainCamera + +@onready var state_machine: StateMachine = $"../../StateMachine" + +func _ready(): + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + +func _input(event): + if event is InputEventMouseButton: + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + + if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED: + _handle_camera_rotation(event) + + if event is InputEventKey and Input.is_key_pressed(KEY_ESCAPE): + get_tree().quit(0) + +func _handle_camera_rotation(event: InputEvent): + if event is InputEventMouseMotion: + player.rotate_y(deg_to_rad(-event.relative.x * sensitivity)) + + fps_camera_parent.rotate_x(deg_to_rad(-event.relative.y * sensitivity)) + fps_camera_parent.rotation.x = clamp(fps_camera_parent.rotation.x, deg_to_rad(-90), deg_to_rad(90)) + +func _process(_delta): + fps_camera_parent.position.y = player.head_height