private void SearchBoxClosest(int boxi, Vector3 p, ref float closestDist, NNConstraint constraint, ref NNInfoInternal nnInfo)
{
BBTree.BBTreeBox bbtreeBox = this.arr[boxi];
if (bbtreeBox.node != null)
{
if (BBTree.NodeIntersectsCircle(bbtreeBox.node, p, closestDist))
{
Vector3 vector = bbtreeBox.node.ClosestPointOnNode(p);
if (constraint == null || constraint.Suitable(bbtreeBox.node))
{
float sqrMagnitude = (vector - p).sqrMagnitude;
if (nnInfo.constrainedNode == null || sqrMagnitude < closestDist * closestDist)
{
nnInfo.constrainedNode = bbtreeBox.node;
nnInfo.constClampedPosition = vector;
closestDist = (float)Math.Sqrt((double)sqrMagnitude);
}
}
}
}
else
{
if (BBTree.RectIntersectsCircle(this.arr[bbtreeBox.left].rect, p, closestDist))
{
this.SearchBoxClosest(bbtreeBox.left, p, ref closestDist, constraint, ref nnInfo);
}
if (BBTree.RectIntersectsCircle(this.arr[bbtreeBox.right].rect, p, closestDist))
{
this.SearchBoxClosest(bbtreeBox.right, p, ref closestDist, constraint, ref nnInfo);
}
}
}