Example #1
0
 public virtual void OnPointerOut(DepthPointerEventArgs e)
 {
     if (PointerOut != null)
     {
         PointerOut(this, e);
     }
 }
Example #2
0
 public virtual void OnPointStay(DepthPointerEventArgs e)
 {
     if (PointerStay != null)
     {
         PointerStay(this, e);
     }
 }
Example #3
0
    void Update()
    {
        holder.transform.RotateAround(transform.position, transform.right, rotateAngle - priorRotate);
        priorRotate = rotateAngle;
        holder.transform.localPosition = new Vector3(0, shiftDistance, 0);

        if (isDepthMeasured && !priorMeasured)
        {
            holder.SetActive(true);
            pointer.SetActive(true);
            hint.SetActive(true);
            priorMeasured = isDepthMeasured;
            return;
        }
        else if (!isDepthMeasured && priorMeasured)
        {
            holder.SetActive(false);
            pointer.SetActive(false);
            hint.SetActive(false);
            priorMeasured = isDepthMeasured;
        }
        else if (!isDepthMeasured)
        {
            return;
        }

        float dist = 100f;

        Ray        raycast = new Ray(holder.transform.position, pointer.transform.forward);
        RaycastHit hit;
        bool       bHit = Physics.Raycast(raycast, out hit, Mathf.Infinity);

        hint.transform.position = hit.point;

        if (previousContact && previousContact == hit.transform)
        {
            count++;
            if (count == 20)
            {
                DepthPointerEventArgs args = new DepthPointerEventArgs();
                args.distance = hit.distance;
                args.flags    = 0;
                args.target   = previousContact;
                OnPointStay(args);
            }
        }
        else
        {
            count = 0;
        }

        if (previousContact && previousContact != hit.transform)
        {
            DepthPointerEventArgs args = new DepthPointerEventArgs();
            args.distance = 0f;
            args.flags    = 0;
            args.target   = previousContact;
            OnPointerOut(args);
            previousContact = null;
        }
        if (bHit && previousContact != hit.transform)
        {
            DepthPointerEventArgs argsIn = new DepthPointerEventArgs();
            argsIn.distance = hit.distance;
            argsIn.flags    = 0;
            argsIn.target   = hit.transform;
            OnPointerIn(argsIn);
            previousContact = hit.transform;
        }
        if (!bHit)
        {
            previousContact = null;
        }
        if (bHit)
        {
            dist = hit.distance;
        }



        bool actionWasActivated = SteamVR_Actions.seeingVR_default_MakeLaserThicker.stateDown;

        if (actionWasActivated)
        {
            pointer.transform.localScale = new Vector3(thickness * 5f, thickness * 5f, dist);
        }
        else if (SteamVR_Actions.seeingVR_default_MakeLaserThicker.stateUp)
        {
            pointer.transform.localScale = new Vector3(thickness, thickness, dist);
        }
        pointer.transform.localPosition = new Vector3(0f, 0f, dist / 2f);

        pointer.GetComponent <Renderer>().material.color = color;
        hint.GetComponent <Renderer>().material.color    = color;
    }