Esempio n. 1
0
    void OnTriggerStay(Collider collider)
    {
        //If object is an interactable item
        VRInteractableObject interactable = collider.GetComponent <VRInteractableObject>();

        if (interactable != null)
        {
            //If trigger button is down
            if (device.GetHairTriggerDown() && currentHeld == null)
            {
                //Pick up object
                interactable.Grab(this.gameObject);
                currentHeld = collider.gameObject;
                GetComponent <BoxCollider>().size = holdingTriggerSize;
            }
            if (device.GetHairTriggerUp())
            {
                //Pick up object

                interactable.Release(this.gameObject);
                if (currentHeld != interactable && currentHeld != null)
                {
                    GetComponent <BoxCollider>().size = regularTriggerSize;
                    currentHeld.GetComponent <VRInteractableObject>().Release(this.gameObject);
                    currentHeld = null;
                }
            }
        }
    }
Esempio n. 2
0
    private void OnTriggerStay(Collider collider)
    {
        VRInteractableObject interactableObject = collider.GetComponent <VRInteractableObject>();

        //Falls das Kollidierte Objekt bereits von dem anderen Controller gehalten wird und dieser Controller den Trigger betaetigt hat, soll das Objekt Skaliert werden
        if (interactableObject != null &&
            interactableObject.transform.parent.name != null &&
            interactableObject.transform.parent.name == otherController.name &&
            Device.GetPress(SteamVR_Controller.ButtonMask.Trigger))
        {
            scaleSelected(interactableObject.gameObject);
        }
        else
        if (interactableObject != null && Device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))
        {
            double distanceInteractableObj = Vector3.Distance(interactableObject.transform.position, transform.position);

            //if trigger button is down
            if (distanceInteractableObj < grabDistance &&
                heldObjects.Count < 1)
            {
                //Pick up object
                heldObjects.Add(interactableObject.Pickup(this));
            }
        }
    }
 protected void RayEnter(RaycastHit hit)
 {
     //Asign to class variable so it can be used in RayStay
     hitObjectObjectInteractable = hitObject.GetComponent <VRInteractableObject>();
     if (hitObjectObjectInteractable)
     {
         //If hit object is an Interactable, trigger RayEnter Method
         hitObjectObjectInteractable.RayEnter(hit, controllerInput ?? null);
     }
 }
Esempio n. 4
0
    void OnTriggerEnter(Collider collider)
    {
        Debug.Log("Trigger Entered");
        VRInteractableObject collidedItem = collider.GetComponent <VRInteractableObject>();

        if (collidedItem)
        {
            objectsHoveringOver.Add(collidedItem);
        }
    }
Esempio n. 5
0
    void OnCollisionEnter(Collision col)
    {
        //If object is an interactable item
        VRInteractableObject interactableObject = col.gameObject.GetComponent <VRInteractableObject>();

        if (interactableObject != null && interactableObject.tag == "SimulationObject")
        {
            Destroy(col.gameObject);
        }
    }
    protected void RayExit()
    {
        if (hitObjectObjectInteractable)
        {
            //If hit object is an Interactable, trigger RayExit Method
            hitObjectObjectInteractable.RayExit(controllerInput ?? null);

            //Clear class variables
            hitObjectObjectInteractable = null;
            hitObject = null;
        }
    }
 void OnTriggerExit(Collider collider)
 {
     if (collider.attachedRigidbody != null)
     {
         //If object is an interactable item
         VRInteractableObject[] interactables = collider.attachedRigidbody.GetComponents <VRInteractableObject>();
         for (int i = 0; i < interactables.Length; i++)
         {
             VRInteractableObject interactable = interactables[i];
             interactable.TriggerExit(this);
         }
     }
 }
Esempio n. 8
0
    void OnTriggerExit(Collider collider)
    {
        Debug.Log("Trigger Exited");
        VRInteractableObject collidedItem = collider.GetComponent <VRInteractableObject>();

        if (collidedItem)
        {
            objectsHoveringOver.Remove(collidedItem);
        }

        if (objectsHoveringOver.Count == 0)
        {
            closestItem = null;
        }
    }
Esempio n. 9
0
    // Update is called once per frame
    void Update()
    {
        if (controller == null)
        {
            Debug.Log("Controller not initialized!");
            return;
        }

        if (controller.GetPressDown(triggerButton))
        {
            float minDistance = float.MaxValue;
            float distance;

            foreach (VRInteractableObject item in objectsHoveringOver)
            {
                distance = (item.transform.position - transform.position).sqrMagnitude;
                if (distance < minDistance)
                {
                    minDistance = distance;
                    closestItem = item;
                }
            }

            interactingItem = closestItem;
            if (interactingItem)
            {
                if (interactingItem.CurrentlyInteracting)
                {
                    interactingItem.EndInteraction(this);
                }
                interactingItem.BeginInteraction(this);
            }
        }
        if (controller.GetPressUp(triggerButton) && interactingItem != null)
        {
            interactingItem.EndInteraction(this);
            interactingItem = null;
        }
    }
Esempio n. 10
0
    void OnTriggerStay(Collider collider)
    {
        //If collider has a rigid body to report to
        if (collider.attachedRigidbody != null)
        {
            //If rigidbody's object has interactable item scripts, iterate through them
            VRInteractableObject[] interactables = collider.attachedRigidbody.GetComponents <VRInteractableObject>();
            for (int i = 0; i < interactables.Length; i++)
            {
                VRInteractableObject interactable = interactables[i];
                for (int b = 0; b < buttonsTracked.Count; b++)
                {
                    //If a tracked button is pressed
                    EVRButtonId button = buttonsTracked[b];
                    if (device.GetPressDown(button))
                    {
                        //If we haven't already sent the button press message to this interactable
                        //Safeguard against objects that have multiple colliders for one interactable script
                        if (!pressDownObjects.ContainsKey(button) || !pressDownObjects[button].Contains(interactable))
                        {
                            //Send button press through to interactable script
                            interactable.ButtonPressDown(button, this);

                            //Add interactable script to a dictionary flagging it to recieve notice
                            //when that same button is released
                            if (!pressDownObjects.ContainsKey(button))
                            {
                                pressDownObjects.Add(button, new List <VRInteractableObject>());
                            }

                            pressDownObjects[button].Add(interactable);
                        }
                    }
                }
            }
        }
    }
    private VRInteractableObject clonePickup(VRControllerInput controller)
    {
        GameObject           newObject             = Instantiate(this.gameObject, this.transform.position, this.transform.rotation);
        VRInteractableObject newInteractableObject = newObject.GetComponent(typeof(VRInteractableObject)) as VRInteractableObject;

        newInteractableObject.transform.localScale = gameObject.transform.lossyScale;
        if (this.name != "HumanScale")
        {
            newObject.gameObject.name = this.name + "_" + index++;
        }
        else
        {
            newObject.gameObject.name = this.name;
        }
        newInteractableObject.GetComponent <Rigidbody>().isKinematic = true;
        newInteractableObject.GetComponent <Rigidbody>().useGravity  = true;
        newInteractableObject.GetComponent <Rigidbody>().constraints = RigidbodyConstraints.None;
        newInteractableObject.originalParent           = originalParent;
        newInteractableObject.originalKinematicState   = originalKinematicState;
        newInteractableObject.originalConstraintsState = originalConstraintsState;
        newInteractableObject.transform.SetParent(controller.gameObject.transform);
        newInteractableObject.clonedObject = true;
        return(newInteractableObject);
    }