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