private static bool DrawSkeletonSubTree(Dictionary<Transform, bool> actualBones, AvatarSetupTool.BoneWrapper[] bones, Quaternion orientation, Transform tr, Bounds bounds)
{
if (!actualBones.ContainsKey(tr))
{
return false;
}
int num = 0;
IEnumerator enumerator = tr.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
Transform current = (Transform) enumerator.Current;
if (DrawSkeletonSubTree(actualBones, bones, orientation, current, bounds))
{
num++;
}
}
}
finally
{
IDisposable disposable = enumerator as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
if (!actualBones[tr] && (num <= 1))
{
return false;
}
int boneIndex = -1;
if (bones != null)
{
for (int i = 0; i < bones.Length; i++)
{
if (bones[i].bone == tr)
{
boneIndex = i;
break;
}
}
}
bool flag2 = AvatarSetupTool.GetBoneAlignmentError(bones, orientation, boneIndex) > 0f;
sPoseError |= flag2;
if (flag2)
{
DrawPoseError(tr, bounds);
Handles.color = kErrorColor;
}
else if (boneIndex != -1)
{
Handles.color = kHumanColor;
}
else if (!actualBones[tr])
{
Handles.color = kDummyColor;
}
else
{
Handles.color = kSkeletonColor;
}
Handles.DoBoneHandle(tr, actualBones);
if (Selection.activeObject == tr)
{
Handles.color = kSelectedColor;
Handles.DoBoneHandle(tr, actualBones);
}
return true;
}
}