You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
3.7 KiB
C#

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.XR;
//using UnityEngine.XR.OpenXR.Input;
namespace Autohand.Demo {
[HelpURL("https://app.gitbook.com/s/5zKO0EvOjzUDeT2aiFk3/auto-hand/controller-input")]
public class OpenXRHandControllerLink : HandControllerLink {
public InputActionProperty grabAxis;
public InputActionProperty squeezeAxis;
public InputActionProperty grabAction;
public InputActionProperty releaseAction;
public InputActionProperty squeezeAction;
public InputActionProperty stopSqueezeAction;
public InputActionProperty hapticAction;
private bool squeezing;
private bool grabbing;
private void Start() {
if(hand.left)
handLeft = this;
else
handRight = this;
}
public void OnEnable(){
if (grabAction == squeezeAction){
Debug.LogError("AUTOHAND: You are using the same button for grab and squeeze on HAND CONTROLLER LINK, this will create conflict or errors", this);
}
if(grabAxis.action != null) grabAxis.action.Enable();
if(squeezeAxis.action != null) squeezeAxis.action.Enable();
if(hapticAction.action != null) hapticAction.action.Enable();
if(grabAction.action != null) grabAction.action.performed += Grab;
if (grabAction.action != null) grabAction.action.Enable();
if (grabAction.action != null) grabAction.action.performed += Grab;
if (releaseAction.action != null) releaseAction.action.Enable();
if (releaseAction.action != null) releaseAction.action.performed += Release;
if (squeezeAction.action != null) squeezeAction.action.Enable();
if (squeezeAction.action != null) squeezeAction.action.performed += Squeeze;
if (stopSqueezeAction.action != null) stopSqueezeAction.action.Enable();
if (stopSqueezeAction.action != null) stopSqueezeAction.action.performed += StopSqueeze;
}
private void OnDisable(){
if (grabAction.action != null) grabAction.action.performed -= Grab;
if (releaseAction.action != null) releaseAction.action.performed -= Release;
if (squeezeAction.action != null) squeezeAction.action.performed -= Squeeze;
if (stopSqueezeAction.action != null) stopSqueezeAction.action.performed -= StopSqueeze;
}
private void Update() {
hand.SetGrip(grabAxis.action.ReadValue<float>(), squeezeAxis.action.ReadValue<float>());
}
private void Grab(InputAction.CallbackContext grab){
if (!grabbing){
hand.Grab();
grabbing = true;
}
}
private void Release(InputAction.CallbackContext grab){
if (grabbing){
hand.Release();
grabbing = false;
}
}
private void Squeeze(InputAction.CallbackContext grab){
if (!squeezing){
hand.Squeeze();
squeezing = true;
}
}
private void StopSqueeze(InputAction.CallbackContext grab){
if (squeezing){
hand.Unsqueeze();
squeezing = false;
}
}
public override void TryHapticImpulse(float duration, float amp, float freq = 10)
{
//OpenXRInput.SendHapticImpulse(hapticAction.action, amp, duration, hand.left ? UnityEngine.InputSystem.XR.XRController.leftHand : UnityEngine.InputSystem.XR.XRController.rightHand);
base.TryHapticImpulse(duration, amp, freq);
}
}
}