public static bool Raycast(Vector3 inPos, ref RaycastHit hit)
{
for (int i = 0; i < UICamera.mList.Count; i++)
{
UICamera uicamera = UICamera.mList[i];
if (uicamera.enabled && NGUITools.GetActive(uicamera.gameObject))
{
UICamera.currentCamera = uicamera.cachedCamera;
Vector3 vector = UICamera.currentCamera.ScreenToViewportPoint(inPos);
if (vector.x >= 0f && vector.x <= 1f && vector.y >= 0f && vector.y <= 1f)
{
Ray ray = UICamera.currentCamera.ScreenPointToRay(inPos);
int layerMask = UICamera.currentCamera.cullingMask & uicamera.eventReceiverMask;
float distance = (uicamera.rangeDistance <= 0f) ? (UICamera.currentCamera.farClipPlane - UICamera.currentCamera.nearClipPlane) : uicamera.rangeDistance;
if (uicamera.clipRaycasts)
{
RaycastHit[] array = Physics.RaycastAll(ray, distance, layerMask);
if (array.Length > 1)
{
Array.Sort <RaycastHit>(array, (RaycastHit r1, RaycastHit r2) => r1.distance.CompareTo(r2.distance));
int j = 0;
int num = array.Length;
while (j < num)
{
if (UICamera.IsVisible(ref array[j]))
{
hit = array[j];
return(true);
}
j++;
}
}
else if (array.Length == 1 && UICamera.IsVisible(ref array[0]))
{
hit = array[0];
return(true);
}
}
else if (Physics.Raycast(ray, out hit, distance, layerMask))
{
return(true);
}
}
}
}
return(false);
}