protected void UpdateHandRetracting(DHUI_HoverEventArgs _hoverEventArgs) { if (handRetracting) { float dist = StaticContactPlane.GetDistance(_hoverEventArgs.InteractorPhysicalPosition); if (internal_touchableState != TouchableInternalStates.Touch && ((Time.time >= lastTouchedUp + _maxRetractionTime) || dist >= _retargetingActivationDistance)) { handRetracting = false; OnRetractionEnd?.Invoke(_hoverEventArgs); } } }
protected virtual void HapticRetargeting_Encapsulate() { List <Transform> droneBoundingBox = m_interactionManager.DroneController.contactFaceBoundingBox; float closestDronePointDist = float.MaxValue; int closestDronePointIndex = 0; List <Vector3> droneProjectedPoints = new List <Vector3>(); bool inside = true; foreach (Transform t in droneBoundingBox) { droneProjectedPoints.Add(StaticContactPlane.GetProjectedPoint(t.position)); } foreach (Transform t in m_touchableBounds) { Vector3 touchablePP = StaticContactPlane.GetProjectedPoint(t.position); if (touchablePP.x > droneProjectedPoints[0].x && touchablePP.y < droneProjectedPoints[0].y && touchablePP.x <droneProjectedPoints[droneProjectedPoints.Count - 1].x && touchablePP.y> droneProjectedPoints[droneProjectedPoints.Count - 1].y) { continue; } else { inside = false; break; } } if (inside) { HapticRetargeting_ZOnly(); } else { for (int dronePointCounter = 0; dronePointCounter < droneBoundingBox.Count; dronePointCounter++) { float dist = Vector3.Distance(CenterPoint, droneBoundingBox[dronePointCounter].position); if (dist < closestDronePointDist) { closestDronePointIndex = dronePointCounter; closestDronePointDist = dist; } } m_hapticRetargeting_virtualTarget.position = m_touchableBounds[closestDronePointIndex].position; m_hapticRetargeting_physicalTarget.position = droneBoundingBox[closestDronePointIndex].position; } }
protected virtual void UpdateTouchableStates(DHUI_HoverEventArgs _hoverEvent) { float dist = StaticContactPlane.GetDistance(_hoverEvent.InteractorVirtualPosition); if (dist <= _touchThreshold) { TouchableInternalState = TouchableInternalStates.Touch; } else if (dist <= _nearTouchThreshold) { TouchableInternalState = TouchableInternalStates.NearTouch; } else { TouchableInternalState = TouchableInternalStates.Hover; } }
protected virtual void HapticRetargeting_ZOnly() { m_hapticRetargeting_virtualTarget.position = m_centerPoint.position; m_hapticRetargeting_physicalTarget.position = m_centerPoint.position + m_interactionManager.DroneController.contactPointTransform.position - StaticContactPlane.GetProjectedPoint(m_interactionManager.DroneController.contactPointTransform.position); }