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