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