@tool
class_name GUIDEInputMouseAxis1D
extends GUIDEInput

enum GUIDEInputMouseAxis {
	X,
	Y
}

@export var axis:GUIDEInputMouseAxis:
	set(value):
		if value == axis:
			return
		axis = value
		emit_changed()		

# we don't get mouse updates when the mouse is not moving, so this needs to be 
# reset every frame
func _needs_reset() -> bool:
	return true


func _begin_usage() -> void:
	# subscribe to mouse movement events
	_state.mouse_position_changed.connect(_refresh)
	_refresh()
	
func _end_usage() -> void:
	# unsubscribe from mouse movement events
	_state.mouse_position_changed.disconnect(_refresh)

func _refresh() -> void:
	var delta:Vector2 = _state.get_mouse_delta_since_last_frame()	
	match axis:
		GUIDEInputMouseAxis.X:
			_value.x = delta.x
		GUIDEInputMouseAxis.Y:
			_value.x = delta.y

		
func is_same_as(other:GUIDEInput):
	return other is GUIDEInputMouseAxis1D and other.axis == axis

func _to_string():
	return "(GUIDEInputMouseAxis1D: axis=" + str(axis) + ")"


func _editor_name() -> String:
	return "Mouse Axis 1D"
	
	
func _editor_description() -> String:
	return "Relative mouse movement on a single axis."
	

func _native_value_type() -> GUIDEAction.GUIDEActionValueType:
	return GUIDEAction.GUIDEActionValueType.AXIS_1D
