11 public struct TouchInfo {
14 public int ActionMasked;
16 public TouchInfo(
int pointerId,
Vector2 position,
int actionMasked) {
17 PointerId = pointerId;
19 ActionMasked = actionMasked;
41 public static ConcurrentQueue<TouchInfo> m_cachedTouchEvents = [];
42 public static void EnqueueTouchEvent(
int pointerId,
Vector2 position,
int actionMasked) => m_cachedTouchEvents.Enqueue(
new TouchInfo(pointerId, position, actionMasked));
43 internal static void HandleTouchEvent(MotionEvent e) {
44#pragma warning disable CA1416
45 switch (e.ActionMasked) {
46 case MotionEventActions.Down:
47 case MotionEventActions.Pointer1Down:
48 m_cachedTouchEvents.Enqueue(
49 new TouchInfo(e.GetPointerId(e.ActionIndex),
new Vector2(e.GetX(e.ActionIndex), e.GetY(e.ActionIndex)), 1)
51 case MotionEventActions.Move:
52 for (
int i = 0; i < e.PointerCount; i++) {
53 m_cachedTouchEvents.Enqueue(
new TouchInfo(e.GetPointerId(i),
new Vector2(e.GetX(i), e.GetY(i)), 2));
56 case MotionEventActions.Up:
57 case MotionEventActions.Pointer1Up:
58 case MotionEventActions.Cancel:
59 case MotionEventActions.Outside:
60 m_cachedTouchEvents.Enqueue(
61 new TouchInfo(e.GetPointerId(e.ActionIndex),
new Vector2(e.GetX(e.ActionIndex), e.GetY(e.ActionIndex)), 3)
64#pragma warning restore CA1416
72 while (!m_cachedTouchEvents.IsEmpty) {
73 if (m_cachedTouchEvents.TryDequeue(out TouchInfo touchInfo)) {
74 switch (touchInfo.ActionMasked) {
145 Id = id, Position = position, State =
TouchLocationState.Pressed, ReleaseQueued =
true