private void BuildCapsules()
{
IEnumerator enumerator = this.bones.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
BoneInfo current = (BoneInfo) enumerator.Current;
if (current.colliderType == typeof(CapsuleCollider))
{
int num;
float num2;
if (current.children.Count == 1)
{
BoneInfo info2 = (BoneInfo) current.children[0];
Vector3 position = info2.anchor.position;
CalculateDirection(current.anchor.InverseTransformPoint(position), out num, out num2);
}
else
{
Vector3 vector2 = (current.anchor.position - current.parent.anchor.position) + current.anchor.position;
CalculateDirection(current.anchor.InverseTransformPoint(vector2), out num, out num2);
if (current.anchor.GetComponentsInChildren(typeof(Transform)).Length > 1)
{
Bounds bounds = new Bounds();
foreach (Transform transform in current.anchor.GetComponentsInChildren(typeof(Transform)))
{
bounds.Encapsulate(current.anchor.InverseTransformPoint(transform.position));
}
if (num2 > 0f)
{
num2 = bounds.max[num];
}
else
{
num2 = bounds.min[num];
}
}
}
CapsuleCollider collider = current.anchor.gameObject.AddComponent<CapsuleCollider>();
collider.direction = num;
Vector3 zero = Vector3.zero;
zero[num] = num2 * 0.5f;
collider.center = zero;
collider.height = Mathf.Abs(num2);
collider.radius = Mathf.Abs((float) (num2 * current.radiusScale));
}
}
}
finally
{
IDisposable disposable = enumerator as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
}