Exemple #1
0
 public virtual void Update()
 {
     if (stereoParamsTouchpad && (stereoParamsTouchpad.tap > 0))
     {
         showParamGui = !showParamGui;
         toggleStereoParamGui(showParamGui);
         stereoParamsTouchpad.reset();
         if (showParamGui)
         {
             interaxialStart = camera3D.interaxial;
             zeroPrlxStart   = camera3D.zeroPrlxDist;
             hitStart        = camera3D.H_I_T;
         }
         else
         {
             // showParamGui has just been dismissed, write new values to disk
             if (saveStereoParamsToDisk)
             {
                 PlayerPrefs.SetFloat(Application.loadedLevelName + "_interaxial", camera3D.interaxial);
                 PlayerPrefs.SetFloat(Application.loadedLevelName + "_zeroPrlxDist", camera3D.zeroPrlxDist);
                 PlayerPrefs.SetFloat(Application.loadedLevelName + "_H_I_T", camera3D.H_I_T);
             }
             interaxialStart = camera3D.interaxial;
             zeroPrlxStart   = camera3D.zeroPrlxDist;
             hitStart        = camera3D.H_I_T;
         }
     }
     if (showParamGui)
     {
         // touchpad should be set to moveLikeJoystick = false, actLikeJoystick = true
         // so that a tapdown generates a position change
         // grab position while touchpad is being dragged - because when we actually get the tap (at TouchPhase.Ended)
         // or the click (on Input.GetMouseButtonUp), position has already been reset to 0
         if (interaxialTouchpad.position.x != 0f)
         {
             // position values are between -1.0 and 1.0 - values < 1.0 are converted to -1.0, values > 1.0 are converted to 1.0
             interaxialInc = Mathf.Round(interaxialTouchpad.position.x + (0.49f * Mathf.Sign(interaxialTouchpad.position.x)));
         }
         if (interaxialTouchpad.tap > 0)
         {
             camera3D.interaxial = camera3D.interaxial + interaxialInc;
             camera3D.interaxial = Mathf.Max(camera3D.interaxial, 0);
             interaxialTouchpad.reset();
         }
         if (zeroPrlxTouchpad.position.x != 0f)
         {
             zeroPrlxInc = Mathf.Round(zeroPrlxTouchpad.position.x + (0.49f * Mathf.Sign(zeroPrlxTouchpad.position.x))) * 0.25f;
         }
         if (zeroPrlxTouchpad.tap > 0)
         {
             camera3D.zeroPrlxDist = camera3D.zeroPrlxDist + zeroPrlxInc;
             camera3D.zeroPrlxDist = Mathf.Max(camera3D.zeroPrlxDist, 1f);
             zeroPrlxTouchpad.reset();
         }
         if (hitTouchpad.position.x != 0f)
         {
             hitInc = Mathf.Round(hitTouchpad.position.x + (0.49f * Mathf.Sign(hitTouchpad.position.x))) * 0.1f;
         }
         if (hitTouchpad.tap > 0)
         {
             camera3D.H_I_T = camera3D.H_I_T + hitInc;
             hitTouchpad.reset();
         }
         stereoReadoutText.setText((((("Interaxial: " + (Mathf.Round(camera3D.interaxial * 10) / 10)) + "mm \nZero Prlx: ") + (Mathf.Round(camera3D.zeroPrlxDist * 10) / 10)) + "M \nH.I.T.: ") + (Mathf.Round(camera3D.H_I_T * 10) / 10));
     }
 }
Exemple #2
0
    public virtual void castForObjects()
    {
        Vector2       dPosition = default(Vector2);
        RaycastHit    hit       = default(RaycastHit);
        s3dInteractor actScript = null;

        if ((camera3D.format3D == (mode3D)0) && !camera3D.sideBySideSqueezed)
        {
            dPosition = new Vector2((s3dTexture.obPosition.x / 2) + 0.25f, s3dTexture.obPosition.y); // 0 = left, 0.5 = center, 1 = right
        }
        else
        {
            dPosition = s3dTexture.obPosition;
        }
        Ray ray = camera3D.GetComponent <Camera>().ViewportPointToRay(dPosition);

        if (Physics.Raycast(ray, out hit, 100f))
        {
            Debug.DrawRay(ray.origin, ray.direction * hit.distance, new Color(0, 1, 0, 0));
            // if there's currently an activeObj, notify it of hit position
            if (activeObj && followActiveObject)
            {
                actScript = (s3dInteractor)activeObj.GetComponent(typeof(s3dInteractor));
                if (actScript)
                {
                    actScript.updatePosition(hit.point);
                }
                // if activeObj, tell any attached aimObject.js scripts to point at it
                gameObject.SendMessage("PointAt", activeObj.transform.position, SendMessageOptions.DontRequireReceiver);
            }
            else
            {
                // if no activeObj, tell any attached aimObject.js scripts to point at hitpoint
                gameObject.SendMessage("PointAt", hit.point, SendMessageOptions.DontRequireReceiver);
            }
        }
        // next, raycast against objects in interactive layer (for taps)
        ray = camera3D.GetComponent <Camera>().ViewportPointToRay(dPosition);
        if (trackMouseXYPosition)
        {
            if (Physics.Raycast(ray, out hit, clickDistance, (int)interactiveLayerMask))
            {
                if (Input.GetMouseButtonDown(0))
                {
                    processTap(hit, true, 1); // tapped on object
                }
                else
                {
                    processRollover(hit, true); // rolled over object
                }
            }
            else
            {
                if (Input.GetMouseButtonDown(0))
                {
                    processTap(hit, false, 1); // if there's no hit, process clicks anyway to deactivate active objects
                }
                else
                {
                    if (prevRolloverObject != null)
                    {
                        processRollover(hit, false); // lost rolled over object
                    }
                }
            }
        }
        if (useTouchpad && readyForTap)
        {
            if (Physics.Raycast(ray, out hit, clickDistance, (int)interactiveLayerMask))
            {
                if (touchpad.tap > 0)
                {
                    processTap(hit, true, touchpad.tap); // tapped on object
                }
                else
                {
                    processRollover(hit, true); // rolled over object
                }
            }
            else
            {
                if (touchpad.tap > 0)
                {
                    processTap(hit, false, touchpad.tap); // if there's no hit, process clicks anyway to deactivate active objects
                }
                else
                {
                    if (prevRolloverObject != null)
                    {
                        processRollover(hit, false); // lost rolled over object
                    }
                }
            }
            touchpad.reset();
            readyForTap = false;
            StartCoroutine(pauseAfterTap());
        }
    }