extends CharacterBody3D

@export var mouse_sensitivity = 1
const SPEED = 5.0
const JUMP_VELOCITY = 4.5

var max_look_up = deg_to_rad(80)
var max_look_down = deg_to_rad(-80)

var pitch = 0

@onready var camera_pivot = $CameraPivot


func _ready() -> void:
	mouse_sensitivity = mouse_sensitivity * 0.001
	Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
	

func _unhandled_input(event: InputEvent) -> void:
	if event is InputEventMouseMotion:
		rotate_y(-event.relative.x * mouse_sensitivity)
		
		pitch -= event.relative.y * mouse_sensitivity
		pitch = clamp(pitch, max_look_down, max_look_up)
		camera_pivot.rotation.x = pitch

func _physics_process(delta: float) -> void:
	
	
	
	
	# Add the gravity.
	if not is_on_floor():
		velocity += get_gravity() * delta

	# Handle jump.
	if Input.is_action_just_pressed("ui_accept") and is_on_floor():
		velocity.y = JUMP_VELOCITY

	# Get the input direction and handle the movement/deceleration.
	# As good practice, you should replace UI actions with custom gameplay actions.
	var input_dir := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
	var direction := (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
	if direction:
		velocity.x = direction.x * SPEED
		velocity.z = direction.z * SPEED
	else:
		velocity.x = move_toward(velocity.x, 0, SPEED)
		velocity.z = move_toward(velocity.z, 0, SPEED)

	move_and_slide()
