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

383 lines
13 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
namespace UnityEngine.EventSystems
{
// Token: 0x02000028 RID: 40
public abstract class PointerInputModule : BaseInputModule
{
// Token: 0x060000EE RID: 238 RVA: 0x000043B8 File Offset: 0x000027B8
protected bool GetPointerData(int id, out PointerEventData data, bool create)
{
bool flag;
if (!this.m_PointerData.TryGetValue(id, out data) && create)
{
data = new PointerEventData(base.eventSystem)
{
pointerId = id
};
this.m_PointerData.Add(id, data);
flag = true;
}
else
{
flag = false;
}
return flag;
}
// Token: 0x060000EF RID: 239 RVA: 0x00004412 File Offset: 0x00002812
protected void RemovePointerData(PointerEventData data)
{
this.m_PointerData.Remove(data.pointerId);
}
// Token: 0x060000F0 RID: 240 RVA: 0x00004428 File Offset: 0x00002828
protected PointerEventData GetTouchPointerEventData(Touch input, out bool pressed, out bool released)
{
PointerEventData pointerEventData;
bool pointerData = this.GetPointerData(input.fingerId, out pointerEventData, true);
pointerEventData.Reset();
pressed = pointerData || input.phase == TouchPhase.Began;
released = input.phase == TouchPhase.Canceled || input.phase == TouchPhase.Ended;
if (pointerData)
{
pointerEventData.position = input.position;
}
if (pressed)
{
pointerEventData.delta = Vector2.zero;
}
else
{
pointerEventData.delta = input.position - pointerEventData.position;
}
pointerEventData.position = input.position;
pointerEventData.button = PointerEventData.InputButton.Left;
base.eventSystem.RaycastAll(pointerEventData, this.m_RaycastResultCache);
RaycastResult raycastResult = BaseInputModule.FindFirstRaycast(this.m_RaycastResultCache);
pointerEventData.pointerCurrentRaycast = raycastResult;
this.m_RaycastResultCache.Clear();
return pointerEventData;
}
// Token: 0x060000F1 RID: 241 RVA: 0x0000450C File Offset: 0x0000290C
protected void CopyFromTo(PointerEventData from, PointerEventData to)
{
to.position = from.position;
to.delta = from.delta;
to.scrollDelta = from.scrollDelta;
to.pointerCurrentRaycast = from.pointerCurrentRaycast;
to.pointerEnter = from.pointerEnter;
}
// Token: 0x060000F2 RID: 242 RVA: 0x0000454C File Offset: 0x0000294C
protected PointerEventData.FramePressState StateForMouseButton(int buttonId)
{
bool mouseButtonDown = base.input.GetMouseButtonDown(buttonId);
bool mouseButtonUp = base.input.GetMouseButtonUp(buttonId);
PointerEventData.FramePressState framePressState;
if (mouseButtonDown && mouseButtonUp)
{
framePressState = PointerEventData.FramePressState.PressedAndReleased;
}
else if (mouseButtonDown)
{
framePressState = PointerEventData.FramePressState.Pressed;
}
else if (mouseButtonUp)
{
framePressState = PointerEventData.FramePressState.Released;
}
else
{
framePressState = PointerEventData.FramePressState.NotChanged;
}
return framePressState;
}
// Token: 0x060000F3 RID: 243 RVA: 0x000045AC File Offset: 0x000029AC
protected virtual PointerInputModule.MouseState GetMousePointerEventData()
{
return this.GetMousePointerEventData(0);
}
// Token: 0x060000F4 RID: 244 RVA: 0x000045C8 File Offset: 0x000029C8
protected virtual PointerInputModule.MouseState GetMousePointerEventData(int id)
{
PointerEventData pointerEventData;
bool pointerData = this.GetPointerData(-1, out pointerEventData, true);
pointerEventData.Reset();
if (pointerData)
{
pointerEventData.position = base.input.mousePosition;
}
Vector2 mousePosition = base.input.mousePosition;
if (Cursor.lockState == CursorLockMode.Locked)
{
pointerEventData.position = new Vector2(-1f, -1f);
pointerEventData.delta = Vector2.zero;
}
else
{
pointerEventData.delta = mousePosition - pointerEventData.position;
pointerEventData.position = mousePosition;
}
pointerEventData.scrollDelta = base.input.mouseScrollDelta;
pointerEventData.button = PointerEventData.InputButton.Left;
base.eventSystem.RaycastAll(pointerEventData, this.m_RaycastResultCache);
RaycastResult raycastResult = BaseInputModule.FindFirstRaycast(this.m_RaycastResultCache);
pointerEventData.pointerCurrentRaycast = raycastResult;
this.m_RaycastResultCache.Clear();
PointerEventData pointerEventData2;
this.GetPointerData(-2, out pointerEventData2, true);
this.CopyFromTo(pointerEventData, pointerEventData2);
pointerEventData2.button = PointerEventData.InputButton.Right;
PointerEventData pointerEventData3;
this.GetPointerData(-3, out pointerEventData3, true);
this.CopyFromTo(pointerEventData, pointerEventData3);
pointerEventData3.button = PointerEventData.InputButton.Middle;
this.m_MouseState.SetButtonState(PointerEventData.InputButton.Left, this.StateForMouseButton(0), pointerEventData);
this.m_MouseState.SetButtonState(PointerEventData.InputButton.Right, this.StateForMouseButton(1), pointerEventData2);
this.m_MouseState.SetButtonState(PointerEventData.InputButton.Middle, this.StateForMouseButton(2), pointerEventData3);
return this.m_MouseState;
}
// Token: 0x060000F5 RID: 245 RVA: 0x00004728 File Offset: 0x00002B28
protected PointerEventData GetLastPointerEventData(int id)
{
PointerEventData pointerEventData;
this.GetPointerData(id, out pointerEventData, false);
return pointerEventData;
}
// Token: 0x060000F6 RID: 246 RVA: 0x0000474C File Offset: 0x00002B4C
private static bool ShouldStartDrag(Vector2 pressPos, Vector2 currentPos, float threshold, bool useDragThreshold)
{
return !useDragThreshold || (pressPos - currentPos).sqrMagnitude >= threshold * threshold;
}
// Token: 0x060000F7 RID: 247 RVA: 0x00004788 File Offset: 0x00002B88
protected virtual void ProcessMove(PointerEventData pointerEvent)
{
GameObject gameObject = ((Cursor.lockState != CursorLockMode.Locked) ? pointerEvent.pointerCurrentRaycast.gameObject : null);
base.HandlePointerExitAndEnter(pointerEvent, gameObject);
}
// Token: 0x060000F8 RID: 248 RVA: 0x000047C0 File Offset: 0x00002BC0
protected virtual void ProcessDrag(PointerEventData pointerEvent)
{
if (pointerEvent.IsPointerMoving() && Cursor.lockState != CursorLockMode.Locked && !(pointerEvent.pointerDrag == null))
{
if (!pointerEvent.dragging && PointerInputModule.ShouldStartDrag(pointerEvent.pressPosition, pointerEvent.position, (float)base.eventSystem.pixelDragThreshold, pointerEvent.useDragThreshold))
{
ExecuteEvents.Execute<IBeginDragHandler>(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.beginDragHandler);
pointerEvent.dragging = true;
}
if (pointerEvent.dragging)
{
if (pointerEvent.pointerPress != pointerEvent.pointerDrag)
{
ExecuteEvents.Execute<IPointerUpHandler>(pointerEvent.pointerPress, pointerEvent, ExecuteEvents.pointerUpHandler);
pointerEvent.eligibleForClick = false;
pointerEvent.pointerPress = null;
pointerEvent.rawPointerPress = null;
}
ExecuteEvents.Execute<IDragHandler>(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.dragHandler);
}
}
}
// Token: 0x060000F9 RID: 249 RVA: 0x000048A8 File Offset: 0x00002CA8
public override bool IsPointerOverGameObject(int pointerId)
{
PointerEventData lastPointerEventData = this.GetLastPointerEventData(pointerId);
return lastPointerEventData != null && lastPointerEventData.pointerEnter != null;
}
// Token: 0x060000FA RID: 250 RVA: 0x000048E0 File Offset: 0x00002CE0
protected void ClearSelection()
{
BaseEventData baseEventData = this.GetBaseEventData();
foreach (PointerEventData pointerEventData in this.m_PointerData.Values)
{
base.HandlePointerExitAndEnter(pointerEventData, null);
}
this.m_PointerData.Clear();
base.eventSystem.SetSelectedGameObject(null, baseEventData);
}
// Token: 0x060000FB RID: 251 RVA: 0x00004968 File Offset: 0x00002D68
public override string ToString()
{
StringBuilder stringBuilder = new StringBuilder("<b>Pointer Input Module of type: </b>" + base.GetType());
stringBuilder.AppendLine();
foreach (KeyValuePair<int, PointerEventData> keyValuePair in this.m_PointerData)
{
if (keyValuePair.Value != null)
{
stringBuilder.AppendLine("<B>Pointer:</b> " + keyValuePair.Key);
stringBuilder.AppendLine(keyValuePair.Value.ToString());
}
}
return stringBuilder.ToString();
}
// Token: 0x060000FC RID: 252 RVA: 0x00004A2C File Offset: 0x00002E2C
protected void DeselectIfSelectionChanged(GameObject currentOverGo, BaseEventData pointerEvent)
{
GameObject eventHandler = ExecuteEvents.GetEventHandler<ISelectHandler>(currentOverGo);
if (eventHandler != base.eventSystem.currentSelectedGameObject)
{
base.eventSystem.SetSelectedGameObject(null, pointerEvent);
}
}
// Token: 0x04000083 RID: 131
public const int kMouseLeftId = -1;
// Token: 0x04000084 RID: 132
public const int kMouseRightId = -2;
// Token: 0x04000085 RID: 133
public const int kMouseMiddleId = -3;
// Token: 0x04000086 RID: 134
public const int kFakeTouchesId = -4;
// Token: 0x04000087 RID: 135
protected Dictionary<int, PointerEventData> m_PointerData = new Dictionary<int, PointerEventData>();
// Token: 0x04000088 RID: 136
private readonly PointerInputModule.MouseState m_MouseState = new PointerInputModule.MouseState();
// Token: 0x02000029 RID: 41
protected class ButtonState
{
// Token: 0x17000044 RID: 68
// (get) Token: 0x060000FE RID: 254 RVA: 0x00004A74 File Offset: 0x00002E74
// (set) Token: 0x060000FF RID: 255 RVA: 0x00004A8F File Offset: 0x00002E8F
public PointerInputModule.MouseButtonEventData eventData
{
get
{
return this.m_EventData;
}
set
{
this.m_EventData = value;
}
}
// Token: 0x17000045 RID: 69
// (get) Token: 0x06000100 RID: 256 RVA: 0x00004A9C File Offset: 0x00002E9C
// (set) Token: 0x06000101 RID: 257 RVA: 0x00004AB7 File Offset: 0x00002EB7
public PointerEventData.InputButton button
{
get
{
return this.m_Button;
}
set
{
this.m_Button = value;
}
}
// Token: 0x04000089 RID: 137
private PointerEventData.InputButton m_Button = PointerEventData.InputButton.Left;
// Token: 0x0400008A RID: 138
private PointerInputModule.MouseButtonEventData m_EventData;
}
// Token: 0x0200002A RID: 42
protected class MouseState
{
// Token: 0x06000103 RID: 259 RVA: 0x00004AD4 File Offset: 0x00002ED4
public bool AnyPressesThisFrame()
{
for (int i = 0; i < this.m_TrackedButtons.Count; i++)
{
if (this.m_TrackedButtons[i].eventData.PressedThisFrame())
{
return true;
}
}
return false;
}
// Token: 0x06000104 RID: 260 RVA: 0x00004B2C File Offset: 0x00002F2C
public bool AnyReleasesThisFrame()
{
for (int i = 0; i < this.m_TrackedButtons.Count; i++)
{
if (this.m_TrackedButtons[i].eventData.ReleasedThisFrame())
{
return true;
}
}
return false;
}
// Token: 0x06000105 RID: 261 RVA: 0x00004B84 File Offset: 0x00002F84
public PointerInputModule.ButtonState GetButtonState(PointerEventData.InputButton button)
{
PointerInputModule.ButtonState buttonState = null;
for (int i = 0; i < this.m_TrackedButtons.Count; i++)
{
if (this.m_TrackedButtons[i].button == button)
{
buttonState = this.m_TrackedButtons[i];
break;
}
}
if (buttonState == null)
{
buttonState = new PointerInputModule.ButtonState
{
button = button,
eventData = new PointerInputModule.MouseButtonEventData()
};
this.m_TrackedButtons.Add(buttonState);
}
return buttonState;
}
// Token: 0x06000106 RID: 262 RVA: 0x00004C14 File Offset: 0x00003014
public void SetButtonState(PointerEventData.InputButton button, PointerEventData.FramePressState stateForMouseButton, PointerEventData data)
{
PointerInputModule.ButtonState buttonState = this.GetButtonState(button);
buttonState.eventData.buttonState = stateForMouseButton;
buttonState.eventData.buttonData = data;
}
// Token: 0x0400008B RID: 139
private List<PointerInputModule.ButtonState> m_TrackedButtons = new List<PointerInputModule.ButtonState>();
}
// Token: 0x0200002B RID: 43
public class MouseButtonEventData
{
// Token: 0x06000108 RID: 264 RVA: 0x00004C4C File Offset: 0x0000304C
public bool PressedThisFrame()
{
return this.buttonState == PointerEventData.FramePressState.Pressed || this.buttonState == PointerEventData.FramePressState.PressedAndReleased;
}
// Token: 0x06000109 RID: 265 RVA: 0x00004C78 File Offset: 0x00003078
public bool ReleasedThisFrame()
{
return this.buttonState == PointerEventData.FramePressState.Released || this.buttonState == PointerEventData.FramePressState.PressedAndReleased;
}
// Token: 0x0400008C RID: 140
public PointerEventData.FramePressState buttonState;
// Token: 0x0400008D RID: 141
public PointerEventData buttonData;
}
}
}