private float OuterRadialLength(IRadial outerRadial, float radius) { if (outerRadial.IsActive == false) { return(0); } var annulusSize = outerRadial.OuterRadius - outerRadial.InnerRadius; var linePosition = Vector3.MoveTowards(Target.position, LineToRadial.position, (radius + annulusSize / 2f) * Canvas.scaleFactor); return(outerRadial.IsPositionWithinRadial(linePosition, false) ? annulusSize : 0); }
public void UpdateLines(IRadial outerRadial, int radius) { if (BranchPosition.IsWorldPosition == false) { return; } UpdateDirection(); var originPos = Origin.anchoredPosition; var targetPos = Target.anchoredPosition; var distanceToRadial = lineSize.x + radius; var relativePos = originPos - targetPos; if (distanceToRadial * distanceToRadial > relativePos.sqrMagnitude) { SetLinesActive(false); return; } SetLinesActive(true); var absDeltaY = Mathf.Abs(relativePos.y); float length = 0; if (absDeltaY < distanceToRadial) { var lineAngle = RightAngle - Mathf.Asin(absDeltaY * SineRightAngle / distanceToRadial); length = distanceToRadial * Mathf.Sin(lineAngle) / SineRightAngle; } var xPos = targetPos.x + (length * CurrentQuadrant.x); var yPos = originPos.y + (LineToRadial.rect.height / 2) * CurrentQuadrant.y; var newPos = new Vector2(xPos, yPos); RepositionLineToRadial(newPos); SetLineSize(LineFromOrigin, Math.Abs(originPos.x - (Origin.rect.width / 2 * CurrentQuadrant.x) - LineToRadial.anchoredPosition.x)); var lineToRadialLength = length <= 0 ? absDeltaY : distanceToRadial; lineToRadialLength -= radius + OuterRadialLength(outerRadial, radius); SetLineSize(LineToRadial, lineToRadialLength); }