using System; using UnityEngine.Scripting; namespace UnityEngine { // Token: 0x0200044D RID: 1101 internal class SendMouseEvents { // Token: 0x0600389B RID: 14491 RVA: 0x0006121C File Offset: 0x0005F41C [RequiredByNativeCode] private static void SetMouseMoved() { SendMouseEvents.s_MouseUsed = true; } // Token: 0x0600389C RID: 14492 RVA: 0x00061228 File Offset: 0x0005F428 [RequiredByNativeCode] private static void DoSendMouseEvents(int skipRTCameras) { Vector3 mousePosition = Input.mousePosition; int allCamerasCount = Camera.allCamerasCount; if (SendMouseEvents.m_Cameras == null || SendMouseEvents.m_Cameras.Length != allCamerasCount) { SendMouseEvents.m_Cameras = new Camera[allCamerasCount]; } Camera.GetAllCameras(SendMouseEvents.m_Cameras); for (int i = 0; i < SendMouseEvents.m_CurrentHit.Length; i++) { SendMouseEvents.m_CurrentHit[i] = default(SendMouseEvents.HitInfo); } if (!SendMouseEvents.s_MouseUsed) { foreach (Camera camera in SendMouseEvents.m_Cameras) { if (!(camera == null) && (skipRTCameras == 0 || !(camera.targetTexture != null))) { if (camera.pixelRect.Contains(mousePosition)) { GUILayer component = camera.GetComponent(); if (component) { GUIElement guielement = component.HitTest(mousePosition); if (guielement) { SendMouseEvents.m_CurrentHit[0].target = guielement.gameObject; SendMouseEvents.m_CurrentHit[0].camera = camera; } else { SendMouseEvents.m_CurrentHit[0].target = null; SendMouseEvents.m_CurrentHit[0].camera = null; } } if (camera.eventMask != 0) { Ray ray = camera.ScreenPointToRay(mousePosition); float z = ray.direction.z; float num = ((!Mathf.Approximately(0f, z)) ? Mathf.Abs((camera.farClipPlane - camera.nearClipPlane) / z) : float.PositiveInfinity); GameObject gameObject = camera.RaycastTry(ray, num, camera.cullingMask & camera.eventMask); if (gameObject != null) { SendMouseEvents.m_CurrentHit[1].target = gameObject; SendMouseEvents.m_CurrentHit[1].camera = camera; } else if (camera.clearFlags == CameraClearFlags.Skybox || camera.clearFlags == CameraClearFlags.Color) { SendMouseEvents.m_CurrentHit[1].target = null; SendMouseEvents.m_CurrentHit[1].camera = null; } GameObject gameObject2 = camera.RaycastTry2D(ray, num, camera.cullingMask & camera.eventMask); if (gameObject2 != null) { SendMouseEvents.m_CurrentHit[2].target = gameObject2; SendMouseEvents.m_CurrentHit[2].camera = camera; } else if (camera.clearFlags == CameraClearFlags.Skybox || camera.clearFlags == CameraClearFlags.Color) { SendMouseEvents.m_CurrentHit[2].target = null; SendMouseEvents.m_CurrentHit[2].camera = null; } } } } } } for (int k = 0; k < SendMouseEvents.m_CurrentHit.Length; k++) { SendMouseEvents.SendEvents(k, SendMouseEvents.m_CurrentHit[k]); } SendMouseEvents.s_MouseUsed = false; } // Token: 0x0600389D RID: 14493 RVA: 0x0006155C File Offset: 0x0005F75C private static void SendEvents(int i, SendMouseEvents.HitInfo hit) { bool mouseButtonDown = Input.GetMouseButtonDown(0); bool mouseButton = Input.GetMouseButton(0); if (mouseButtonDown) { if (hit) { SendMouseEvents.m_MouseDownHit[i] = hit; SendMouseEvents.m_MouseDownHit[i].SendMessage("OnMouseDown"); } } else if (!mouseButton) { if (SendMouseEvents.m_MouseDownHit[i]) { if (SendMouseEvents.HitInfo.Compare(hit, SendMouseEvents.m_MouseDownHit[i])) { SendMouseEvents.m_MouseDownHit[i].SendMessage("OnMouseUpAsButton"); } SendMouseEvents.m_MouseDownHit[i].SendMessage("OnMouseUp"); SendMouseEvents.m_MouseDownHit[i] = default(SendMouseEvents.HitInfo); } } else if (SendMouseEvents.m_MouseDownHit[i]) { SendMouseEvents.m_MouseDownHit[i].SendMessage("OnMouseDrag"); } if (SendMouseEvents.HitInfo.Compare(hit, SendMouseEvents.m_LastHit[i])) { if (hit) { hit.SendMessage("OnMouseOver"); } } else { if (SendMouseEvents.m_LastHit[i]) { SendMouseEvents.m_LastHit[i].SendMessage("OnMouseExit"); } if (hit) { hit.SendMessage("OnMouseEnter"); hit.SendMessage("OnMouseOver"); } } SendMouseEvents.m_LastHit[i] = hit; } // Token: 0x0400111A RID: 4378 private const int m_HitIndexGUI = 0; // Token: 0x0400111B RID: 4379 private const int m_HitIndexPhysics3D = 1; // Token: 0x0400111C RID: 4380 private const int m_HitIndexPhysics2D = 2; // Token: 0x0400111D RID: 4381 private static bool s_MouseUsed = false; // Token: 0x0400111E RID: 4382 private static readonly SendMouseEvents.HitInfo[] m_LastHit = new SendMouseEvents.HitInfo[] { default(SendMouseEvents.HitInfo), default(SendMouseEvents.HitInfo), default(SendMouseEvents.HitInfo) }; // Token: 0x0400111F RID: 4383 private static readonly SendMouseEvents.HitInfo[] m_MouseDownHit = new SendMouseEvents.HitInfo[] { default(SendMouseEvents.HitInfo), default(SendMouseEvents.HitInfo), default(SendMouseEvents.HitInfo) }; // Token: 0x04001120 RID: 4384 private static readonly SendMouseEvents.HitInfo[] m_CurrentHit = new SendMouseEvents.HitInfo[] { default(SendMouseEvents.HitInfo), default(SendMouseEvents.HitInfo), default(SendMouseEvents.HitInfo) }; // Token: 0x04001121 RID: 4385 private static Camera[] m_Cameras; // Token: 0x0200044E RID: 1102 private struct HitInfo { // Token: 0x0600389F RID: 14495 RVA: 0x0006180C File Offset: 0x0005FA0C public void SendMessage(string name) { this.target.SendMessage(name, null, SendMessageOptions.DontRequireReceiver); } // Token: 0x060038A0 RID: 14496 RVA: 0x00061820 File Offset: 0x0005FA20 public static implicit operator bool(SendMouseEvents.HitInfo exists) { return exists.target != null && exists.camera != null; } // Token: 0x060038A1 RID: 14497 RVA: 0x00061858 File Offset: 0x0005FA58 public static bool Compare(SendMouseEvents.HitInfo lhs, SendMouseEvents.HitInfo rhs) { return lhs.target == rhs.target && lhs.camera == rhs.camera; } // Token: 0x04001122 RID: 4386 public GameObject target; // Token: 0x04001123 RID: 4387 public Camera camera; } } }