private void GrabInteractedObject()
 {
     if (controllerAttachJoint == null && grabbedObject == null && IsObjectGrabbable(interactTouch.GetTouchedObject()))
     {
         InitGrabbedObject();
         SnapObjectToGrabToController(grabbedObject);
     }
 }
Example #2
0
        /* protected virtual void ToggleControllerVisibility(bool visible)
         * {
         *   if (grabbedObject != null)
         *   {
         *       ///[Obsolete]
         #pragma warning disable 0618
         *       VRTK_InteractControllerAppearance[] controllerAppearanceScript = grabbedObject.GetComponentsInParent<VRTK_InteractControllerAppearance>(true);
         #pragma warning restore 0618
         *       if (controllerAppearanceScript.Length > 0)
         *       {
         *           controllerAppearanceScript[0].ToggleControllerOnGrab(visible, controllerReference.model, grabbedObject);
         *       }
         *   }
         *   else if (visible)
         *   {
         *       VRTK_ObjectAppearance.SetRendererVisible(controllerReference.model, grabbedObject);
         *   }
         * } */

        protected virtual void InitUsedObject()
        {
            usedObject = (interactTongTouch != null ? interactTongTouch.GetTouchedObject() : null);
            if (usedObject != null)
            {
                OnControllerStartUseInteractableObject(interactTongTouch.SetControllerInteractEvent(usedObject));
                VRTK_InteractableObject usedObjectScript = usedObject.GetComponent <VRTK_InteractableObject>();
                ChooseUseSequence(usedObjectScript);
                // ToggleControllerVisibility(false);
                OnControllerUseInteractableObject(interactTongTouch.SetControllerInteractEvent(usedObject));
            }
        }
 // Update is called once per frame
 void Update()
 {
     if (controller.GetTouchedObject())
     {
         if (controller.GetTouchedObject().tag == "box")
         {
             ControllerTouching(controllerTag);
         }
     }
     else
     {
         ControllerNotTouching(controllerTag);
     }
 }
Example #4
0
    void Update()
    {
        if (checkingForRelease)
        {
            currentReleaseDifference += Time.deltaTime;

            if (currentReleaseDifference > releaseTolerance)
            {
                checkingForRelease = false;
                canShoot           = false;

                currentReleaseDifference = 0;

                Destroy(currentOrb);
                currentOrb = null;
            }
            else if (!rightHand.triggerPressed && !leftHand.triggerPressed)
            {
                canShoot           = true;
                checkingForRelease = false;
            }
        }
        else if (canShoot)
        {
            // Try to shoot
            Vector3 leftHandVelocity  = VRTK_DeviceFinder.GetControllerVelocity(VRTK_ControllerReference.GetControllerReference(leftHand.gameObject));
            Vector3 rightHandVelocity = VRTK_DeviceFinder.GetControllerVelocity(VRTK_ControllerReference.GetControllerReference(rightHand.gameObject));

            Vector3 averageVelocity = (leftHandVelocity + rightHandVelocity) / 2;

            if (Vector3.Angle(rightHandVelocity, leftHandVelocity) < 90 && averageVelocity.magnitude >= shootTolerance)
            {
                currentOrb.GetComponent <Rigidbody>().isKinematic = false;
                currentOrb.GetComponent <Rigidbody>().velocity    = averageVelocity * shootMultiplier;
                Destroy(currentOrb, 5);
            }
            else
            {
                Destroy(currentOrb);
            }

            currentOrb = null;
            canShoot   = false;
        }
        else if (!leftHandTouch.GetTouchedObject() && !rightHandTouch.GetTouchedObject())
        {
            if (leftHand.triggerPressed && rightHand.triggerPressed)
            {
                if (!currentOrb)
                {
                    currentOrb = Instantiate(magicOrbPrefab, Vector3.Lerp(leftHand.transform.position, rightHand.transform.position, 0.5f), Quaternion.identity);
                }
                else
                {
                    currentOrb.transform.position = Vector3.Lerp(leftHand.transform.position, rightHand.transform.position, 0.5f);
                }
            }
        }
    }
Example #5
0
    private GameObject GetGrabbableObject()
    {
        GameObject obj = interactTouch.GetTouchedObject();

        if (obj != null && interactTouch.IsObjectInteractable(obj))
        {
            return(obj);
        }
        return(null);
        //return grabbedObject;
    }
    private void DoStartUseObject(object sender, ControllerClickedEventArgs e)
    {
        GameObject touchedObject = interactTouch.GetTouchedObject();

        if (touchedObject != null && interactTouch.IsObjectInteractable(touchedObject))
        {
            UseInteractedObject(touchedObject);
            if (!IsObjectHoldOnUse(usingObject))
            {
                SetObjectUsingState(usingObject, GetObjectUsingState(usingObject) + 1);
            }
        }
    }
Example #7
0
    public void TryAutoGrab()
    {
        if (gs.autoGrab)
        {
            if (interactTouch.GetTouchedObject() == null)
            {
                Block block = BlockManager.AutoGrabBlock();
                block.transform.SetPositionAndRotation(transform.position, transform.rotation);
                interactTouch.ForceTouch(block.gameObject);

                interactGrab.AttemptGrab();
            }
        }
    }
Example #8
0
        void doTouch()
        {
            var go = Fsm.GetOwnerDefaultTarget(gameObject);

            if (go == null)
            {
                return;
            }

            touchedObject.Value = touch.GetTouchedObject();
            if (touchedObject.Value == null)
            {
                isTouching.Value     = false;
                isInteractable.Value = false;
            }

            else
            {
                isTouching.Value     = true;
                isInteractable.Value = touch.IsObjectInteractable(touchedObject.Value);
            }
        }
Example #9
0
 public static int GetViewIDOfTouchedObject(VRTK_InteractTouch interactTouch)
 {
     return(interactTouch.GetTouchedObject().GetPhotonView().ViewID);
 }
    // Update is called once per frame
    void Update()
    {
        if (isLocalPlayer)
        {
            GameObject leftObjectGrab  = leftInteractGrab.GetGrabbedObject();
            GameObject rightObjectGrab = rightInteractGrab.GetGrabbedObject();

            GameObject leftObjectTouch  = leftTouch.GetTouchedObject();
            GameObject rightObjectTouch = rightTouch.GetTouchedObject();

            //TOUCH EVENTS
            if (leftObjectTouch != null && isTouchLeft == false && leftObjectGrab == null)
            {
                isTouchLeft     = true;
                curLeftObjTouch = leftObjectTouch;
                Debug.Log("Left Controller Touch : " + leftObjectTouch);
                CmdTouchGameObject(curLeftObjTouch);
            }

            if ((leftObjectTouch != curLeftObjTouch && isTouchLeft == true) || (isTouchLeft == true && leftObjectGrab != null))
            {
                isTouchLeft = false;
                Debug.Log("Left Controller Untouch : " + leftObjectTouch);
                CmdUntouchGameObject(curLeftObjTouch);
                curLeftObjTouch = null;
            }

            if (rightObjectTouch != null && isTouchRight == false && rightObjectGrab == null)
            {
                isTouchRight     = true;
                curRightObjTouch = rightObjectTouch;
                Debug.Log("right Controller Touch : " + rightObjectTouch);
                CmdTouchGameObject(curRightObjTouch);
            }

            if ((rightObjectTouch != curRightObjTouch && isTouchRight == true) || (isTouchRight == true && rightObjectGrab != null))
            {
                isTouchRight = false;
                Debug.Log("right Controller Untouch : " + curRightObjTouch);
                CmdUntouchGameObject(curRightObjTouch);
                curRightObjTouch = null;
            }



            //GRAB EVENTS
            if (leftObjectGrab != null && isGrabLeft == false)
            {
                isGrabLeft     = true;
                curLeftObjGrab = leftObjectGrab;
                CmdGrabGameObject(curLeftObjGrab, 0);
            }
            else if (leftObjectGrab == null && isGrabLeft == true)
            {
                isGrabLeft = false;
                CmdUngrabGameObject(curLeftObjGrab, 0);
                curLeftObjGrab = null;
            }

            if (rightObjectGrab != null && isGrabRight == false)
            {
                isGrabRight     = true;
                curRightObjGrab = rightObjectGrab;
                CmdGrabGameObject(curRightObjGrab, 1);
            }
            else if (rightObjectGrab == null && isGrabRight == true)
            {
                isGrabRight = false;
                CmdUngrabGameObject(curRightObjGrab, 1);
                curRightObjGrab = null;
            }
        }
    }
Example #11
0
        private void InitGestureEvent()
        {
            //*********************************************************************************
            //possitive event
            pointer.ActivationButtonPressed += (sender, e) =>
            {
                if (interactTouch.GetTouchedObject() == null)
                {
                    //TransitToPointerGesture();
                    TransitToGestureByHandGestureType(EnumHandGestureType.Point);
                }
            };
            pointer.ActivationButtonReleased += (sender, e) =>
            {
                if (interactTouch.GetTouchedObject() == null)
                {
                    //TransitToIdleGesture();
                    TransitToGestureByHandGestureType(EnumHandGestureType.Idle);
                }
            };
            interactGrab.GrabButtonPressed += (sender, e) =>
            {
                if (interactTouch.GetTouchedObject() == null)
                {
                    TransitToGestureByHandGestureType(EnumHandGestureType.Grasp);
                    //TransitToGraspGesture();
                }
            };
            interactGrab.GrabButtonReleased += (sender, e) =>
            {
                if (interactTouch.GetTouchedObject() == null)
                {
                    TransitToGestureByHandGestureType(EnumHandGestureType.Idle);
                    //TransitToIdleGesture();
                }
            };
            //**********************************************************************************
            //passive event
            interactTouch.ControllerTouchInteractableObject += (sender, e) =>
            {
                VRTK_BasicGestureObject objectWithGesture = ((ObjectInteractEventArgs)e).target.GetComponent <VRTK_BasicGestureObject>();
                if (objectWithGesture)
                {
                    if (objectWithGesture.LeftTouchGesture != null)
                    {
                        objectWithGesture.ToggleTouchGesture(handType, true);
                        ToggleHandModelActive(false);
                    }
                    else
                    {
                        if (interactGrab.GetGrabbedObject() == null)
                        {
                            TransitToGestureByHandGestureType(objectWithGesture.m_defaulttouchGesture);
                        }
                    }
                }
                else
                { //NO VRTK_BasicGestureObject
                    if (interactGrab.GetGrabbedObject() == null)
                    {
                        //TransitToGestureByHandGestureType(EnumHandGestureType.Stretch);
                    }
                }
            };
            interactTouch.ControllerUntouchInteractableObject += (sender, e) =>
            {
                VRTK_BasicGestureObject objectWithGesture = ((ObjectInteractEventArgs)e).target.GetComponent <VRTK_BasicGestureObject>();
                if (objectWithGesture)
                {
                    if (objectWithGesture.LeftTouchGesture != null)
                    {
                        objectWithGesture.ToggleTouchGesture(handType, false);
                        ToggleHandModelActive(true);
                    }
                    else
                    {
                        if (interactGrab.GetGrabbedObject() == null)
                        {
                            //TransitToIdleGestureLater();
                            TransitToGestureByHandGestureType(EnumHandGestureType.Idle);//*********************
                        }
                    }
                }
                else
                { //NO VRTK_BasicGestureObject
                    if (interactGrab.GetGrabbedObject() == null)
                    {
                        //TransitToIdleGesture();
                        TransitToIdleGestureLater();
                    }
                }

                /*
                 * foreach (Collider coll in GetComponentsInChildren<Collider>() ) {
                 *  coll.isTrigger = true;
                 * }
                 */
            };
            interactGrab.ControllerGrabInteractableObject += (sender, e) =>
            {
                VRTK_BasicGestureObject objectWithGesture = ((ObjectInteractEventArgs)e).target.GetComponent <VRTK_BasicGestureObject>();
                if (objectWithGesture)
                {
                    if (objectWithGesture.LeftGrabGesture != null)
                    {
                        if (objectWithGesture.LeftTouchGesture != null)
                        {
                            objectWithGesture.ToggleTouchGesture(handType, false);
                        }
                        objectWithGesture.ToggleGrabGesture(handType, true);
                        ToggleHandModelActive(false);
                    }
                    else
                    {
                        TransitToGestureByHandGestureType(objectWithGesture.m_defaultGrabGesture);
                    }
                }
                else
                { //NO VRTK_BasicGestureObject
                  //TransitToGraspGesture();
                    TransitToGestureByHandGestureType(EnumHandGestureType.Grasp);
                }
            };
            interactGrab.ControllerUngrabInteractableObject += (sender, e) =>
            {
                VRTK_BasicGestureObject objectWithGesture = ((ObjectInteractEventArgs)e).target.GetComponent <VRTK_BasicGestureObject>();
                if (objectWithGesture)
                {
                    if (objectWithGesture.LeftGrabGesture != null)
                    {
                        objectWithGesture.ToggleGrabGesture(handType, false);
                        if (objectWithGesture.LeftTouchGesture != null)
                        {
                            objectWithGesture.ToggleTouchGesture(handType, true);
                        }
                        else
                        {
                            ToggleHandModelActive(true);
                        }
                    }
                    else
                    {
                        TransitToGestureByHandGestureType(EnumHandGestureType.Idle);
                    }
                }
                else
                { //NO VRTK_BasicGestureObject
                    // TransitToIdleGesture();
                    TransitToGestureByHandGestureType(EnumHandGestureType.Idle);
                }
            };

            interactUsed.ControllerUseInteractableObject += (sender, e) =>
            {
                VRTK_BasicGestureObject objectWithGesture = ((ObjectInteractEventArgs)e).target.GetComponent <VRTK_BasicGestureObject>();
                if (objectWithGesture)
                {
                    if (objectWithGesture.LeftUseGesture != null)
                    {
                        if (objectWithGesture.LeftGrabGesture != null)
                        {
                            objectWithGesture.ToggleGrabGesture(handType, false);
                        }
                        objectWithGesture.ToggleUseGesture(handType, true);
                        ToggleHandModelActive(false);
                    }
                    else
                    {
                        TransitToGestureByHandGestureType(objectWithGesture.m_defaultUseGesture);
                    }
                }
                else
                { //NO VRTK_BasicGestureObject
                    //TransitToPullTriggerGresture();
                    TransitToGestureByHandGestureType(EnumHandGestureType.PullTrigger);
                }
            };
            interactUsed.ControllerUnuseInteractableObject += (sender, e) =>
            {
                try
                {
                    VRTK_BasicGestureObject objectWithGesture = ((ObjectInteractEventArgs)e).target.GetComponent <VRTK_BasicGestureObject>();
                    if (objectWithGesture)
                    {
                        if (objectWithGesture.LeftUseGesture != null)
                        {
                            objectWithGesture.ToggleUseGesture(handType, false);
                            if (objectWithGesture.LeftGrabGesture != null)
                            {
                                objectWithGesture.ToggleGrabGesture(handType, true);
                            }
                            else
                            {
                                ToggleHandModelActive(true);
                            }
                        }
                        else
                        {
                            TransitToGestureByHandGestureType(objectWithGesture.m_defaultGrabGesture);
                        }
                    }
                    else
                    { //NO VRTK_BasicGestureObject
                        //TransitToGraspGesture();
                        TransitToGestureByHandGestureType(EnumHandGestureType.Grasp);
                    }
                }
                catch (NullReferenceException e1)
                {
                    print(e1.Message);
                }
            };
        }