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#
		
	
			
		
		
	
	
			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);
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
}
 |