public void HandleTriggerUp(object sender, ClickedEventArgs e) { if (m_isTeleporting) { return; } if (PadUp != null) { PadUp(GetTouchpadAxis()); } // reset if (previousContact) { OoniPointerEventArgs args = new OoniPointerEventArgs(); args.controllerIndex = controller.controllerIndex; args.distance = 0f; args.flags = 0; args.target = previousContact; args.targetCollider = previousContact.GetComponent <Collider>(); OnPointerOut(args); // update previousContact = null; } OnPointerOutByTriggerUp(); isActive = false; holder.SetActive(false); }
public virtual void OnPointerOn(OoniPointerEventArgs e) { if (PointerOn != null) { PointerOn(this, e); } }
// Pointer On (anything) public void OnPointerOn(object sender, OoniPointerEventArgs e) { if (grabSomething) { if (!e.targetCollider.CompareTag("Art")) { artTargetPos = e.hitPoint; artTargetRot = e.target.localRotation; hittingWall = true; } } if (inStretchMode) { // check if the object is still be lasered if (!m_CurrentInteractible.IsLasering) { //if not, exit stretch mode inStretchMode = false; stretchObj = null; } else { //stretchObj != null if (e.targetCollider.gameObject == stretchObj) { ScaleAroundPoint(e.target, e.hitPoint); } } } }
public void OnPointerOn(object sender, OoniPointerEventArgs e) { if (!teleportModeOn) { return; } if (e.targetCollider.CompareTag("Floor")) { dot.transform.position = e.hitPoint; } }
public void OnPointerOut(object sender, OoniPointerEventArgs e) { if (laserPointer.OnToArt) { return; } if (!teleportModeOn) { return; } if (e.targetCollider.CompareTag("Floor")) { teleportModeOn = false; dot.SetActive(false); //Debug.Log ("teleport mode off"); } }
// -------------------- Laser Pointer Callback -------------------- public void OnPointerIn(object sender, OoniPointerEventArgs e) { if (laserPointer.OnToArt) { return; } // if other laser are doing teleporting if (dot.activeInHierarchy) { return; } if (e.targetCollider.CompareTag("Floor")) { teleportModeOn = true; dot.transform.position = e.hitPoint; dot.SetActive(true); //Debug.Log ("teleport mode on"); } }
void Update() { if (!isActive) { return; } if (m_isTeleporting) { return; } float dist = 100f; Ray raycast = new Ray(transform.position, transform.forward); RaycastHit hit; bool bHit; if (OnToArt) { bHit = Physics.Raycast(raycast, out hit, dist, noArtLayer); } else { bHit = Physics.Raycast(raycast, out hit); } // Pointer Out if (previousContact && previousContact != hit.transform) { OoniPointerEventArgs args = new OoniPointerEventArgs(); args.controllerIndex = controller.controllerIndex; args.distance = 0f; args.flags = 0; args.target = previousContact; args.targetCollider = previousContact.GetComponent <Collider>(); args.hitPoint = hit.point; OnPointerOut(args); // update previousContact = null; } // Pointer In if (bHit && previousContact != hit.transform) { OoniPointerEventArgs argsIn = new OoniPointerEventArgs(); argsIn.controllerIndex = controller.controllerIndex; argsIn.distance = hit.distance; argsIn.flags = 0; argsIn.target = hit.transform; argsIn.hitPoint = hit.point; argsIn.targetCollider = hit.collider; OnPointerIn(argsIn); // update previousContact = hit.transform; } // Pointer On else if (bHit && previousContact == hit.transform) { OoniPointerEventArgs argsOn = new OoniPointerEventArgs(); argsOn.controllerIndex = controller.controllerIndex; argsOn.distance = hit.distance; argsOn.flags = 0; argsOn.target = hit.transform; argsOn.hitPoint = hit.point; argsOn.targetCollider = hit.collider; OnPointerOn(argsOn); // update // if(testDot) // testDot.transform.position = hit.point; previousContact = hit.transform; } if (!bHit) { previousContact = null; } if (bHit && hit.distance < 100f) { dist = hit.distance; } // if (controller.triggerPressed) // { // pointer.transform.localScale = new Vector3(thickness * 5f, thickness * 5f, dist); // } // else // { // pointer.transform.localScale = new Vector3(thickness, thickness, dist); // } pointer.transform.localScale = new Vector3(thickness, thickness, dist); pointer.transform.localPosition = new Vector3(0f, 0f, dist / 2f); }
// -------------------- Laser Pointer Callback -------------------- public void OnPointerIn(object sender, OoniPointerEventArgs e) { // prepare to grab // ignore if already grabbing something if (grabSomething) { return; } // ignore if already stretching something if (inStretchMode) { return; } // if it's Art if (e.targetCollider.CompareTag("Art")) { if (currArt == null) { GameObject c_art = e.targetCollider.gameObject; m_CurrentInteractible = c_art.GetComponent <VRInteractiveObject> (); // if this Art is already being lasered if (m_CurrentInteractible.IsLasering) { // Stretch mode! inStretchMode = true; stretchObj = c_art; originalScale = stretchObj.transform.localScale; // distance between two lasers: 1.targetPos, 2.hitpoint currLasersDistance = prevLasersDistance = (e.hitPoint - e.target.position).sqrMagnitude; //Debug.Log ("pointer onto art & stretch start!"); } else { // Grab mode! m_CurrentInteractible.LaserDown(laserPointer); // Let laser shoot through Art // v.1 // e.targetCollider.enabled = false; //v.2 laserPointer.OnToArt = true; currArt = e.target.gameObject; if (prevArt != currArt) { posPercentage = 1f; } grabSomething = true; //Debug.Log ("pointer onto art & grab start!"); } laserPointer.DeviceVibrate(); } } }