static Bone2D GetClosestBone(Vector2 mousePosition, float minDistance)
{
Bone2D closestBone = null;
float minSqrDistance = float.MaxValue;
List <Bone2D> l_bones = unlockedVisibleBones;
for (int i = 0; i < l_bones.Count; i++)
{
Bone2D bone = l_bones[i];
if (bone)
{
float radius = BoneUtils.GetBoneRadius(bone);
Vector3 direction = (bone.endPosition - bone.transform.position).normalized;
Vector2 screenPosition = HandleUtility.WorldToGUIPoint(bone.transform.position);
Vector3 endPoint = bone.endPosition - direction * radius;
if (bone.child)
{
endPoint -= direction * BoneUtils.GetBoneRadius(bone.child);
}
Vector2 screenEndPosition = HandleUtility.WorldToGUIPoint(endPoint);
float sqrDistance = MathUtils.SegmentSqrtDistance(mousePosition, screenPosition, screenEndPosition);
if (sqrDistance < minSqrDistance && sqrDistance < minDistance * minDistance)
{
minSqrDistance = sqrDistance;
closestBone = bone;
}
}
}
return(closestBone);
}