using System; using System.Collections.Generic; using UnityEngine.UI; namespace UnityEngine.EventSystems { // Token: 0x02000031 RID: 49 [AddComponentMenu("Event/Physics Raycaster")] [RequireComponent(typeof(Camera))] public class PhysicsRaycaster : BaseRaycaster { // Token: 0x06000148 RID: 328 RVA: 0x00006174 File Offset: 0x00004574 protected PhysicsRaycaster() { } // Token: 0x17000055 RID: 85 // (get) Token: 0x06000149 RID: 329 RVA: 0x0000618C File Offset: 0x0000458C public override Camera eventCamera { get { if (this.m_EventCamera == null) { this.m_EventCamera = base.GetComponent(); } return this.m_EventCamera ?? Camera.main; } } // Token: 0x17000056 RID: 86 // (get) Token: 0x0600014A RID: 330 RVA: 0x000061D0 File Offset: 0x000045D0 public virtual int depth { get { return (!(this.eventCamera != null)) ? 16777215 : ((int)this.eventCamera.depth); } } // Token: 0x17000057 RID: 87 // (get) Token: 0x0600014B RID: 331 RVA: 0x0000620C File Offset: 0x0000460C public int finalEventMask { get { return (!(this.eventCamera != null)) ? (-1) : (this.eventCamera.cullingMask & this.m_EventMask); } } // Token: 0x17000058 RID: 88 // (get) Token: 0x0600014C RID: 332 RVA: 0x00006250 File Offset: 0x00004650 // (set) Token: 0x0600014D RID: 333 RVA: 0x0000626B File Offset: 0x0000466B public LayerMask eventMask { get { return this.m_EventMask; } set { this.m_EventMask = value; } } // Token: 0x0600014E RID: 334 RVA: 0x00006278 File Offset: 0x00004678 protected void ComputeRayAndDistance(PointerEventData eventData, out Ray ray, out float distanceToClipPlane) { ray = this.eventCamera.ScreenPointToRay(eventData.position); float z = ray.direction.z; distanceToClipPlane = ((!Mathf.Approximately(0f, z)) ? Mathf.Abs((this.eventCamera.farClipPlane - this.eventCamera.nearClipPlane) / z) : float.PositiveInfinity); } // Token: 0x0600014F RID: 335 RVA: 0x000062EC File Offset: 0x000046EC public override void Raycast(PointerEventData eventData, List resultAppendList) { if (!(this.eventCamera == null) && this.eventCamera.pixelRect.Contains(eventData.position)) { Ray ray; float num; this.ComputeRayAndDistance(eventData, out ray, out num); if (ReflectionMethodsCache.Singleton.raycast3DAll != null) { RaycastHit[] array = ReflectionMethodsCache.Singleton.raycast3DAll(ray, num, this.finalEventMask); if (array.Length > 1) { Array.Sort(array, (RaycastHit r1, RaycastHit r2) => r1.distance.CompareTo(r2.distance)); } if (array.Length != 0) { int i = 0; int num2 = array.Length; while (i < num2) { RaycastResult raycastResult = new RaycastResult { gameObject = array[i].collider.gameObject, module = this, distance = array[i].distance, worldPosition = array[i].point, worldNormal = array[i].normal, screenPosition = eventData.position, index = (float)resultAppendList.Count, sortingLayer = 0, sortingOrder = 0 }; resultAppendList.Add(raycastResult); i++; } } } } } // Token: 0x040000A1 RID: 161 protected const int kNoEventMaskSet = -1; // Token: 0x040000A2 RID: 162 protected Camera m_EventCamera; // Token: 0x040000A3 RID: 163 [SerializeField] protected LayerMask m_EventMask = -1; } }