Exemple #1
0
 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);
         }
     }
 }
Exemple #2
0
        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;
            }
        }
Exemple #3
0
        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;
            }
        }
Exemple #4
0
 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);
 }