extends CharacterBody3D


const SPEED = 5.0
const JUMP_VELOCITY = 4.5
var zoom = 0


var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")


func _physics_process(delta):

	if not is_on_floor():
		velocity.y -= gravity * delta


	if Input.is_action_just_pressed("jump") and is_on_floor():
		velocity.y = JUMP_VELOCITY
		
	var input_dir = Input.get_vector("left", "right", "forwards", "backwards")
	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()
	
func _input(event):
	if event is InputEventMouseMotion and (Input.is_action_pressed("cam_look") or $cam_y/Camera3D.position.z == 0):
		var camera_rotation = event.relative * 0.01
		if $cam_y.rotation.x <= 1.6 && camera_rotation.y <= 0:
			$cam_y.rotate(Vector3.RIGHT, -camera_rotation.y)
		elif $cam_y.rotation.x >= -1.6 && camera_rotation.y >= 0:
			$cam_y.rotate(Vector3.RIGHT, -camera_rotation.y)
		if $cam_y.rotation.x >= 1.6:
			$cam_y.rotation.x = 1.6
		elif $cam_y.rotation.x <= -1.6:
			$cam_y.rotation.x = -1.6
		rotate(Vector3.DOWN, camera_rotation.x)

func _unhandled_input(event):
	if event.is_action_pressed("zoom_in") && $cam_y/Camera3D.position.z > 0:
		zoom = -1
		$cam_y/Camera3D.position.z += zoom
	elif event.is_action_pressed("zoom_out") && $cam_y/Camera3D.position.z <= 20:
		zoom = 1
		$cam_y/Camera3D.position.z += zoom
	else:
		zoom = 0