Example #1
0
        public override void Process()
        {
            for (var j = 0; j < Pointers.Count; j++)
            {
                var pointer = Pointers[j];
                if (!pointer || pointer.Camera == null || !pointer.isActiveAndEnabled)
                {
                    continue;
                }

                pointer.CurrentUIElement = null;

                for (var i = 0; i < UICanvases.Count; i++)
                {
                    var canvas = UICanvases[i];
                    canvas.worldCamera = pointer.Camera;
                }


                pointer.Process();

                eventSystem.RaycastAll(pointer.PointerEventData, m_RaycastResultCache);
                pointer.PointerEventData.pointerCurrentRaycast = FindFirstRaycast(m_RaycastResultCache);

                m_RaycastResultCache.Clear();
                pointer.CurrentUIElement = pointer.PointerEventData.pointerCurrentRaycast.gameObject;

                // Removed continue because it causes lingering hover after pointer moves off of raycast-able objects
                //if (!pointer.PointerEventData.pointerCurrentRaycast.isValid)
                //    continue;

                var screenPosition = (Vector2)pointer.Camera.WorldToScreenPoint(pointer.PointerEventData.pointerCurrentRaycast.worldPosition);
                var delta          = screenPosition - pointer.PointerEventData.position;
                pointer.PointerEventData.position = screenPosition;
                pointer.PointerEventData.delta    = delta;

                var buttonState = HVRController.GetButtonState(pointer.HandSide, PressButton);

                ProcessMove(pointer.PointerEventData);

                if (buttonState.JustActivated && pointer.PointerEventData.pointerCurrentRaycast.isValid)
                {
                    ProcessPress(pointer);
                }
                else if (buttonState.Active && pointer.PointerEventData.pointerCurrentRaycast.isValid)
                {
                    ProcessDrag(pointer.PointerEventData);
                }
                else if (buttonState.JustDeactivated)
                {
                    ProcessRelease(pointer);
                }
            }

            for (var i = 0; i < UICanvases.Count; i++)
            {
                var canvas = UICanvases[i];
                canvas.worldCamera = null;
            }
        }
Example #2
0
        private void UpdateLeftController(InputDevice device)
        {
            // LeftHasTrackPad = false;

            LeftFeatures.Clear();

            var inputFeatures = new List <UnityEngine.XR.InputFeatureUsage>();

            if (device.TryGetFeatureUsages(inputFeatures))
            {
                foreach (var feature in inputFeatures)
                {
                    LeftFeatures.Add($"{feature.name}");
                    if (feature.name == "Secondary2DAxis")
                    {
                        // LeftHasTrackPad = true;
                    }
                }
            }

            LeftXRInputSystem = GetController(LeftDevice.manufacturer?.ToLower(), LeftDevice.name?.ToLower());
            LeftController    = UpdateController(LeftXRInputSystem, device, HVRHandSide.Left);
            if (device.isValid)
            {
                LeftControllerConnected.Invoke(LeftController);
            }
        }
        private void ControllerConnected(HVRController controller)
        {
            switch (controller.ControllerType)
            {
            case HVRControllerType.Oculus:
                CenterOfMass = Oculus;
                break;

            case HVRControllerType.WMRButtons:
            case HVRControllerType.WMR:
                CenterOfMass = WMR;
                break;

            case HVRControllerType.Vive:
                CenterOfMass = Vive;
                break;

            case HVRControllerType.Knuckles:
                CenterOfMass = Knuckles;
                break;

            default:
                CenterOfMass = Fallback;
                break;
            }

            if (!CenterOfMass)
            {
                CenterOfMass = Fallback;
            }
            if (!CenterOfMass)
            {
                CenterOfMass = transform;
            }
        }
Example #4
0
        protected virtual bool GetTeleportActivated()
        {
            if (HVRInputManager.Instance.RightController.ControllerType == HVRControllerType.Vive)
            {
                return(HVRController.GetButtonState(HVRHandSide.Right, HVRButtons.Menu).Active);
            }

            return(TeleportController.JoystickAxis.y < -.5f && Mathf.Abs(TeleportController.JoystickAxis.x) < .30);
        }
Example #5
0
        protected virtual bool GetTeleportDeactivated()
        {
            if (HVRInputManager.Instance.RightController.ControllerType == HVRControllerType.Vive)
            {
                return(HVRController.GetButtonState(HVRHandSide.Right, HVRButtons.Menu).JustDeactivated);
            }

            return(TeleportController.JoystickAxis.y > -.25f);
        }
Example #6
0
 protected override void CheckInput(HVRController controller)
 {
     if (controller.TrackpadButtonState.JustActivated)
     {
         Activated.Invoke();
     }
     else if (controller.TrackpadButtonState.JustDeactivated)
     {
         Deactivated.Invoke();
     }
 }
 protected override void CheckInput(HVRController controller)
 {
     if (controller.TrackPadRight.JustActivated)
     {
         Activated.Invoke();
     }
     else if (controller.TrackPadRight.JustDeactivated)
     {
         Deactivated.Invoke();
     }
 }
Example #8
0
 protected override void CheckInput(HVRController controller)
 {
     if (controller.TriggerTouchState.JustActivated)
     {
         Activated.Invoke();
     }
     else if (controller.TriggerTouchState.JustDeactivated)
     {
         Deactivated.Invoke();
     }
 }
        protected override void CheckInput(HVRController controller)
        {
            Value = controller.Trigger;

            if (controller.TriggerButtonState.JustActivated)
            {
                Activated.Invoke();
            }
            else if (controller.TriggerButtonState.JustDeactivated)
            {
                Deactivated.Invoke();
            }
        }
        private void ControllerConnected(HVRController controller)
        {
            if (controller.InputMap)
            {
                //Debug.Log($"offsetting based on {controller.InputMap.name},{controller.InputMap.ControllerRotationOffset},{controller.InputMap.ControllerPositionOffset}");
                var angles = transform.localEulerAngles = controller.InputMap.ControllerRotationOffset;
                transform.localPosition = controller.InputMap.ControllerPositionOffset;
                if (HandSide == HVRHandSide.Left)
                {
                    var position = transform.localPosition;
                    position.x *= -1;
                    transform.localPosition = position;

                    angles.y *= -1;
                    angles.z *= -1;

                    transform.localEulerAngles = angles;
                }
            }
        }
Example #11
0
        private void UpdateBlend(HVRHandPoseBlend blend)
        {
            var blendTarget = 0f;

            if (blend.Type == BlendType.Immediate)
            {
                blendTarget = 1f;
            }
            else if (blend.ButtonParameter)
            {
                var button = HVRController.GetButtonState(Hand.Side, blend.Button);
                if (blend.Type == BlendType.BooleanParameter)
                {
                    blendTarget = button.Active ? 1f : 0f;
                }
                else if (blend.Type == BlendType.FloatParameter)
                {
                    blendTarget = button.Value;
                }
            }
            else if (!string.IsNullOrWhiteSpace(blend.AnimationParameter) && blend.AnimationParameter != "None")
            {
                if (blend.Type == BlendType.BooleanParameter)
                {
                    blendTarget = HVRAnimationParameters.GetBoolParameter(Hand.Side, blend.AnimationParameter) ? 1f : 0f;
                }
                else if (blend.Type == BlendType.FloatParameter)
                {
                    blendTarget = HVRAnimationParameters.GetFloatParameter(Hand.Side, blend.AnimationParameter);
                }
            }

            if (blend.Speed > .1f)
            {
                blend.Value = Mathf.Lerp(blend.Value, blendTarget, Time.deltaTime * blend.Speed);
            }
            else
            {
                blend.Value = blendTarget;
            }
        }
        protected override void CheckInput(HVRController controller)
        {
            var release = false;


            if (controller.ControllerType == HVRControllerType.WMR)
            {
                release = controller.Side == HVRHandSide.Right ? controller.TrackPadLeft.JustActivated : controller.TrackPadRight.JustActivated;
            }
            else if (controller.ControllerType == HVRControllerType.Vive)
            {
                release = HVRInputManager.Instance.RightController.TrackPadDown.JustActivated;
            }
            else
            {
                release = controller.PrimaryButtonState.JustActivated;
            }

            if (release)
            {
                HVRRayCastGun.ReleaseAmmo();
            }
        }
Example #13
0
 protected abstract void CheckInput(HVRController controller);
Example #14
0
        private HVRController UpdateController(XRInputSystem sdk, InputDevice device, HVRHandSide side)
        {
            HVRInputSettings  inputMap = null;
            Vector2           deadZone = Vector2.zero;
            HVRControllerType controllerType;

            //var hasTrackPad = side == HVRHandSide.Left ? LeftHasTrackPad : RightHasTrackPad;
            var wasNone = CurrentSDK == InputSDK.None;

            GetSDK();

            if (CurrentSDK == InputSDK.Oculus)
            {
#if !HVR_OCULUS
                Debug.LogWarning($"OVRInputs cannot be used because HVR_OCULUS define symbol is missing. Oculus Asset and the Hurricane Oculus Integration is required to use OVRInputs." +
                                 $"Falling back to XRInputs.");
                CurrentSDK = InputSDK.XRInput;
#endif
            }

            if (wasNone && CurrentSDK != InputSDK.None)
            {
                Debug.Log($"InputSDK : {CurrentSDK}");
            }

            switch (sdk)
            {
            case XRInputSystem.WMROpenVR:
                inputMap       = WMROpenVRInputMap;
                deadZone       = WMRDeadzone;
                controllerType = HVRControllerType.WMR;
                break;

            case XRInputSystem.ReverbG2:
                deadZone       = WMRDeadzone;
                inputMap       = WMRWithButtonsInputMap;
                controllerType = HVRControllerType.WMRButtons;
                break;

            case XRInputSystem.WMR:
                inputMap       = WMRInputMap;
                deadZone       = WMRDeadzone;
                controllerType = HVRControllerType.WMR;
                break;

            case XRInputSystem.OculusOpenVR:
                inputMap       = OculusOpenVRInputMap;
                deadZone       = OculusDeadzone;
                controllerType = HVRControllerType.Oculus;
                break;

            case XRInputSystem.Oculus:
                inputMap       = OculusInputMap;
                deadZone       = OculusDeadzone;
                controllerType = HVRControllerType.Oculus;
                break;

            case XRInputSystem.Vive:
                deadZone       = ViveDeadzone;
                inputMap       = ViveInputMap;
                controllerType = HVRControllerType.Vive;
                break;

            case XRInputSystem.Knuckles:
                deadZone       = KnucklesDeadzone;
                inputMap       = KnucklesInputMap;
                controllerType = HVRControllerType.Knuckles;
                break;

            case XRInputSystem.Cosmos:
                inputMap       = CosmosInputMap;
                deadZone       = CosmosDeadzone;
                controllerType = HVRControllerType.Cosmos;
                break;

            case XRInputSystem.None:
                inputMap       = OculusInputMap;
                controllerType = HVRControllerType.None;
                break;

            default:
                inputMap       = OculusInputMap;
                deadZone       = OculusDeadzone;
                controllerType = HVRControllerType.Oculus;
                break;
            }


            if (!inputMap)
            {
                inputMap = OculusInputMap;
            }


            HVRController controller = null;

            if (side == HVRHandSide.Left)
            {
                if (LeftOculusController)
                {
                    LeftOculusController.enabled = false;
                }
                if (LeftSteamController)
                {
                    LeftSteamController.enabled = false;
                }
                if (LeftXRInputController)
                {
                    LeftXRInputController.enabled = false;
                }
                if (LeftInputSystemController)
                {
                    LeftInputSystemController.enabled = false;
                }
            }
            else
            {
                if (RightOculusController)
                {
                    RightOculusController.enabled = false;
                }
                if (RightSteamController)
                {
                    RightSteamController.enabled = false;
                }
                if (RightXRInputController)
                {
                    RightXRInputController.enabled = false;
                }
                if (RightInputSystemController)
                {
                    RightInputSystemController.enabled = false;
                }
            }

            switch (CurrentSDK)
            {
            case InputSDK.None:
            case InputSDK.XRInput:

                controller = side == HVRHandSide.Left ? LeftXRInputController : RightXRInputController;

                HVRXRInputController xrController = controller as HVRXRInputController;

                if (!controller)
                {
                    xrController = gameObject.AddComponent <HVRXRInputController>();
                    controller   = xrController;

                    if (side == HVRHandSide.Left)
                    {
                        LeftXRInputController = controller;
                    }
                    else
                    {
                        RightXRInputController = controller;
                    }
                }

                break;

            case InputSDK.Oculus:

#if HVR_OCULUS
                controller = side == HVRHandSide.Left ? LeftOculusController : RightOculusController;

                if (!controller)
                {
                    var oculusController = gameObject.AddComponent <HVROculusController>();
                    controller = oculusController;
                    oculusController.OVRHaptics = OVRHaptics;

                    if (side == HVRHandSide.Left)
                    {
                        LeftOculusController = controller;
                    }
                    else
                    {
                        RightOculusController = controller;
                    }
                }
#endif

                break;

            case InputSDK.SteamVR:

#if HVR_STEAMVR
                controller = side == HVRHandSide.Left ? LeftSteamController : RightSteamController;
                if (!controller)
                {
                    var steamController = gameObject.AddComponent <HVRSteamVRController>();
                    controller = steamController;
                    if (side == HVRHandSide.Left)
                    {
                        LeftSteamController = steamController;
                    }
                    else
                    {
                        RightSteamController = steamController;
                    }
                }
#endif
                break;

            case InputSDK.InputSystem:
#if ENABLE_INPUT_SYSTEM
                controller = side == HVRHandSide.Left ? LeftInputSystemController : RightInputSystemController;
                if (!controller)
                {
                    var inputSystemController = gameObject.AddComponent <HVRInputSystemController>();
                    controller = inputSystemController;
                    if (side == HVRHandSide.Left)
                    {
                        LeftInputSystemController = inputSystemController;
                    }
                    else
                    {
                        RightInputSystemController = inputSystemController;
                    }
                }
#endif
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            if (OverrideDeadzone)
            {
                deadZone = DeadzoneOverride;
            }

            if (controller != null)
            {
                controller.XRNode             = side == HVRHandSide.Left ? XRNode.LeftHand : XRNode.RightHand;
                controller.ThumbstickDeadZone = deadZone;
                controller.Side           = side;
                controller.InputMap       = inputMap;
                controller.enabled        = true;
                controller.ControllerType = controllerType;
            }

            controller.FingerSettings = FingerSettings;

            return(controller);
        }