private void UpdateNavigatorPosition() { try { _startPos = curveStart.transform.position; if (ReferenceEquals(null, _dickNavigator)) { return; } var benisScale = transform.localScale.z; var position = _dickNavigator.dickMidPoint.position; var distFactor = Vector3.Distance(position, _startPos) / (dockDistance * 1.25f * benisScale); var lerpFactor = 1f - Mathf.Clamp(distFactor - 1f, 0f, 1f); var up = curveStart.transform.up; _midPos = Vector3.Lerp(_startPos + up * (1f * benisScale), position, lerpFactor); _endPos = Vector3.Lerp(_startPos + up * (2f * benisScale), _dickNavigator.dickEndPoint.position, lerpFactor); } catch (MissingReferenceException) { _dickNavigator = null; } catch (NullReferenceException) { _dickNavigator = null; } }
private IEnumerator UpdateProxyInformation() { while (true) { if (useNearestNavigator) { if (DickNavigator.Instances.Count > 0) { dickNavigator = DickNavigator.Instances .OrderBy(x => Vector3.Distance(x.dickMidPoint.position, StartPos)) .First(); } } if (useNearestProxy) { if (DickPuller.Instances.Count > 0) { pullTransform = DickPuller.Instances .OrderBy(x => Vector3.Distance(x.transform.position, pullProxyRoot.transform.position)) .First().gameObject.transform; } else { pullTransform = pullProxy; } } // We don't need to find Nearest Proxies every single frame. yield return(new WaitForSeconds(.5f)); } }
private void AssignNearestDickNavigator() { if (!useNearestNavigator || DickNavigator.Instances.Count <= 0) { return; } _dickNavigator = DickNavigator.Instances .OrderBy(x => (x.dickMidPoint.position - _startPos).sqrMagnitude) .FirstOrDefault(); }