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)); } }
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()); } }