示例#1
0
 private void UpdateDrag(Entity mouseHit, ref InputSystemState state)
 {
     for (int i = 0; i < ButtonStates.Length; i++)
     {
         var buttonState = ButtonStates[(int)i];
         if (buttonState.Pressed && buttonState.PressEntity != default)
         {
             var dragDelta  = PointerFrameData[0].Position - buttonState.PressPosition;
             var dragLength = math.length(dragDelta);
             if (!buttonState.IsDragging)
             {
                 if (dragLength > DragThreshold)
                 {
                     buttonState.IsDragging = true;
                     CreateEvent(buttonState.PressEntity, PointerEventType.BeginDrag, true, (PointerButton)i);
                 }
             }
             else if (dragLength > 0.0f)
             {
                 CreateEvent(buttonState.PressEntity, PointerEventType.Drag, true, (PointerButton)i);
             }
         }
         ButtonStates[(int)i] = buttonState;
     }
 }
示例#2
0
        private void HandleButtonDown(Entity mouseHit, ref InputSystemState state, PointerButton button)
        {
            var buttonState = ButtonStates[(int)button];

            buttonState.Pressed       = true;
            buttonState.PressPosition = PointerFrameData[0].Position;
            buttonState.PressEntity   = mouseHit;
            if (button == PointerButton.Left)
            {
                if (mouseHit != state.SelectedEntity)
                {
                    //TODO: Selection event
                    if (state.SelectedEntity != default)
                    {
                        CreateEvent(state.SelectedEntity, PointerEventType.Deselected, true, PointerButton.Left);
                    }
                    if (mouseHit != default)
                    {
                        CreateEvent(mouseHit, PointerEventType.Selected, true, PointerButton.Left);
                    }
                    state.SelectedEntity = mouseHit;
                }
            }

            if (mouseHit != default)
            {
                CreateEvent(mouseHit, PointerEventType.Down, true, button);
            }

            ButtonStates[(int)button] = buttonState;
        }
示例#3
0
 private void UpdateHover(Entity mouseHit, ref InputSystemState state)
 {
     if (state.HoveredEntity != mouseHit)
     {
         if (ReceiverFromEntity.Exists(state.HoveredEntity))
         {
             CreateEvent(state.HoveredEntity, PointerEventType.Exit, true,
                         PointerButton.Invalid);
         }
         if (mouseHit != default)
         {
             CreateEvent(mouseHit, PointerEventType.Enter, true, PointerButton.Invalid);
         }
         state.HoveredEntity = mouseHit;
     }
 }
示例#4
0
 private void UpdateButtons(Entity mouseHit, ref InputSystemState state)
 {
     for (int i = 0; i < PointerEvents.Length; i++)
     {
         var eventType = PointerEvents[i].EventType;
         var button    = PointerEvents[i].Button;
         if (eventType == NativeInputEventType.PointerDown)
         {
             HandleButtonDown(mouseHit, ref state, button);
         }
         else if (eventType == NativeInputEventType.PointerUp)
         {
             HandleButtonUp(mouseHit, ref state, button);
         }
     }
 }
示例#5
0
        private void HandleButtonUp(Entity mouseHit, ref InputSystemState state, PointerButton button)
        {
            var buttonState = ButtonStates[(int)button];

            buttonState.Pressed = false;


            if (buttonState.PressEntity != default)
            {
                CreateEvent(buttonState.PressEntity, PointerEventType.Up, true, button);
            }

            if (buttonState.IsDragging)
            {
                CreateEvent(buttonState.PressEntity, PointerEventType.EndDrag, true, button);
                if (mouseHit != buttonState.PressEntity)
                {
                    if (mouseHit != default)
                    {
                        CreateEvent(mouseHit, PointerEventType.Drop, true, button);
                    }
                }
            }

            if (button == PointerButton.Left)
            {
                if (mouseHit == buttonState.PressEntity)
                {
                    CreateEvent(buttonState.PressEntity, PointerEventType.Click, true, button);
                }
            }

            buttonState.IsDragging    = false;
            buttonState.PressEntity   = default;
            ButtonStates[(int)button] = buttonState;
        }