示例#1
0
        IEnumerator RepositionElement(IAdaptPosition adaptiveElement)
        {
            var adaptiveTransform = adaptiveElement.adaptiveTransform;
            var currentPosition   = adaptiveTransform.position;
            var targetPosition    = m_GazeTransform.position;

            targetPosition = targetPosition + this.GetViewerScale() * m_GazeTransform.forward * adaptiveElement.adaptivePositionRestDistance;
            if (!adaptiveElement.resetAdaptivePosition)
            {
                this.Pulse(Node.None, m_MovingPulse);
                const float kTransitionSpeedScalar = 4f;
                adaptiveElement.beingMoved = true;
                var transitionAmount = 0f;
                while (transitionAmount < 1f)
                {
                    var smoothTransition = MathUtilsExt.SmoothInOutLerpFloat(transitionAmount);
                    smoothTransition          *= smoothTransition;
                    adaptiveTransform.position = Vector3.Lerp(currentPosition, targetPosition, smoothTransition);
                    transitionAmount          += Time.deltaTime * kTransitionSpeedScalar;
                    adaptiveTransform.LookAt(m_GazeTransform);
                    yield return(null);
                }
            }

            adaptiveTransform.position = targetPosition;
            adaptiveTransform.LookAt(m_GazeTransform);
            adaptiveElement.adaptiveElementRepositionCoroutine = null;
            adaptiveElement.beingMoved            = false;
            adaptiveElement.resetAdaptivePosition = false;
        }
示例#2
0
 /// <summary>
 /// Implementers are removed from the AdaptivePositionModuleConnector's DisconnectInterface() function
 /// </summary>
 /// <param name="adaptiveElement">Implementer that will be removed from the AdaptivePositionElements collection</param>
 public void FreeObject(IAdaptPosition adaptiveElement)
 {
     if (m_AdaptivePositionElements.Contains(adaptiveElement))
     {
         m_AdaptivePositionElements.Remove(adaptiveElement);
     }
 }
示例#3
0
        /// <summary>
        /// Implementers are assigned in the AdaptivePositionModuleConnector's ConnectInterface() function
        /// </summary>
        /// <param name="adaptiveElement">Implementer that will be added to the AdaptivePositionElements collection</param>
        public void ControlObject(IAdaptPosition adaptiveElement)
        {
            if (m_AdaptivePositionElements.Contains(adaptiveElement))
            {
                return;
            }

            var adaptiveTransform = adaptiveElement.adaptiveTransform;

            adaptiveTransform.localPosition = new Vector3(0f, 0f, adaptiveElement.adaptivePositionRestDistance); // push the object away from the HMD
            adaptiveTransform.parent        = m_WorldspaceAnchorTransform;
            adaptiveTransform.rotation      = Quaternion.identity;

            m_AdaptivePositionElements.Add(adaptiveElement);
        }