Files
Dec2017-Script-Dump/UnityEngine/SendMouseEvents.cs
T
2026-06-04 11:42:34 +02:00

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;
}
}
}