212 lines
6.4 KiB
C#
212 lines
6.4 KiB
C#
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<GUILayer>();
|
|
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;
|
|
}
|
|
}
|
|
}
|