@tool
class_name XRToolsDesktopMouseCapture
extends XRToolsMovementProvider

## XR Tools Mouse Capture
##
## This script provides support for desktop mouse capture. This script works
## with the PlayerBody attached to the players XROrigin3D.


## Movement provider order
@export var order : int = 1

## Our directional input
@export var escape_action : String = "ui_cancel"

#Last mouse capture status and should it be auto captured
@export var capture : bool = true


# XRStart node
@onready var xr_start_node = XRTools.find_xr_child(
	XRTools.find_xr_ancestor(self,
	"*Staging",
	"XRToolsStaging"),"StartXR","Node")


# Add support for is_xr_class on XRTools classes
func is_xr_class(name : String) -> bool:
	return name == "XRToolsDesktopMouseCapture" or super(name)


# Perform jump movement
func physics_movement(_delta: float, player_body: XRToolsPlayerBody, _disabled: bool):
	# Skip if the player body isn't active
	var check1 :bool= (xr_start_node.is_xr_active() and Input.mouse_mode==Input.MOUSE_MODE_CAPTURED)
	if !player_body.enabled or check1:
		return


	if Input.is_action_just_pressed("ui_cancel"):
		capture=!capture

	#print(Input.mouse_mode==Input.MOUSE_MODE_CAPTURED)

	if Input.mouse_mode==Input.MOUSE_MODE_CAPTURED and (xr_start_node.is_xr_active() or !capture):
		Input.mouse_mode=Input.MOUSE_MODE_VISIBLE
	elif (!xr_start_node.is_xr_active() and capture):
		Input.mouse_mode=Input.MOUSE_MODE_CAPTURED
	return