using System;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.XR;
using UnityEngine.XR.Interaction.Toolkit.Inputs;
namespace MagicLeap.Examples
{
public class MagicLeapController
{
private static MagicLeapController instance;
public static MagicLeapController Instance
{
get
{
instance ??= new MagicLeapController();
return instance;
}
}
private readonly InputActionAsset inputActionsAsset;
private readonly InputActionMap inputMap;
private readonly InputAction triggerAction, triggerValueAction, trackpadClickAction, trackpadForceAction, bumperAction, menuButtonAction, trackpadAction, positionAction,
rotationAction, trackingStatusAction, isTrackedAction, pointerPositionAction, pointerRotationAction, velocityAction, angularVelocityAction;
private MagicLeapController()
{
var manager = UnityEngine.Object.FindObjectOfType<InputActionManager>();
if (manager == null)
throw new System.NullReferenceException("Could not find an InputActionManager to initialize a MagicLeapController from");
inputActionsAsset = manager.actionAssets[0];
if (inputActionsAsset == null)
throw new System.NullReferenceException("Could not find an InputActionAsset");
inputActionsAsset.Enable();
inputMap = inputActionsAsset.FindActionMap("Controller");
triggerAction = inputMap.FindAction("Trigger");
bumperAction = inputMap.FindAction("Bumper");
menuButtonAction = inputMap.FindAction("MenuButton");
trackpadClickAction = inputMap.FindAction("TrackpadClick");
isTrackedAction = inputMap.FindAction("IsTracked");
positionAction = inputMap.FindAction("Position");
rotationAction = inputMap.FindAction("Rotation");
pointerPositionAction = inputMap.FindAction("PointerPosition");
pointerRotationAction = inputMap.FindAction("PointerRotation");
velocityAction = inputMap.FindAction("Velocity");
angularVelocityAction = inputMap.FindAction("AngularVelocity");
trackingStatusAction = inputMap.FindAction("Status");
triggerAction = inputMap.FindAction("Trigger");
triggerValueAction = inputMap.FindAction("TriggerValue");
trackpadAction = inputMap.FindAction("Trackpad");
trackpadForceAction ??= inputMap.FindAction("TrackpadForce");
}
~MagicLeapController()
{
if (inputActionsAsset != null && instance == this)
inputActionsAsset.Disable();
}
public event Action<InputAction.CallbackContext> TriggerPressed
{
add => triggerAction.performed += value;
remove => triggerAction.performed -= value;
}
public event Action<InputAction.CallbackContext> BumperPressed
{
add => bumperAction.performed += value;
remove => bumperAction.performed -= value;
}
public event Action<InputAction.CallbackContext> MenuPressed
{
add => menuButtonAction.performed += value;
remove => menuButtonAction.performed -= value;
}
public event Action<InputAction.CallbackContext> TrackpadClicked
{
add => trackpadClickAction.performed += value;
remove => trackpadClickAction.performed -= value;
}
public bool IsTracked => isTrackedAction.IsPressed();
public Vector3 Position => positionAction.ReadValue<Vector3>();
public Quaternion Rotation => rotationAction.ReadValue<Quaternion>();
public Vector3 PointerPosition => pointerPositionAction.ReadValue<Vector3>();
public Quaternion PointerRotation => pointerRotationAction.ReadValue<Quaternion>();
public Vector3 Velocity => velocityAction.ReadValue<Vector3>();
public Vector3 AngularVelocity => angularVelocityAction.ReadValue<Vector3>();
public InputTrackingState TrackingState => (InputTrackingState)trackingStatusAction.ReadValue<int>();
public bool TriggerIsPressed => triggerAction.IsPressed();
public float TriggerValue => triggerValueAction.ReadValue<float>();
public bool BumperIsPressed => bumperAction.IsPressed();
public bool MenuIsPressed => menuButtonAction.IsPressed();
public Vector2 TouchPosition => trackpadAction.ReadValue<Vector2>();
public float TouchPressure => trackpadForceAction.ReadValue<float>();
}
}