private static void Handle_Mouse_Buttons(MouseUpdate data) { if (data.IsButton) { MouseButtonDown?.Invoke(null, new MouseButtonEventArgs((int)data.Offset, data.Value)); } }
public CustomDiUpdate(MouseUpdate update) { Value = update.Value; Index = CustomDiHelper.MouseAxisOffsets.IndexOf(update.Offset); if (Index > -1) { Type = MapType.Axis; return; } Type = MapType.Button; }
public DMouseEventArgs(MouseUpdate state) : base(state) { Offset = state.Offset; Value = state.Value; X = System.Windows.Forms.Control.MousePosition.X; Y = System.Windows.Forms.Control.MousePosition.Y; if (state.Value == 0) { Released = true; Pressed = false; } else { Pressed = false; Released = true; } }
private static void Handle_Mouse_Position(MouseUpdate data) { var posX = (float)0; var posY = (float)0; switch (data.Offset) { case MouseOffset.X: posX = mouse.GetCurrentState().X; break; case MouseOffset.Z: MouseScroll?.Invoke(null, new MouseScrollEventArgs(mouse.GetCurrentState().Z)); break; case MouseOffset.Y: posY = mouse.GetCurrentState().Y; break; } MousePosition?.Invoke(null, new MousePositionEventArgs(posX, posY)); }
public static void PollInput() { if (!m_bIsInitialized) { return; } lock (m_inputMutex) { try { m_keyboard.Poll(); } catch (SharpDXException e) { if (e.ResultCode == ResultCode.InputLost || e.ResultCode == ResultCode.NotAcquired) { try { m_keyboard.Acquire(); m_keyboard.Poll(); } catch { m_currentKeyboardState = new KeyboardState(); m_currentMouseState = new MouseState(); return; } } else { throw; } } try { m_mouse.Poll(); } catch (SharpDXException e) { if (e.ResultCode == ResultCode.InputLost || e.ResultCode == ResultCode.NotAcquired) { try { m_mouse.Acquire(); m_mouse.Poll(); } catch { return; } } else { throw; } } List <SInputButtonEvent> buttonEvents = new List <SInputButtonEvent>(100); try { KeyboardUpdate[] keyboardUpdates = m_keyboard.GetBufferedData(); for (int i = 0; i < keyboardUpdates.Length; i++) { KeyboardUpdate update = keyboardUpdates[i]; SInputButtonEvent buttonEvent; buttonEvent.buttonEvent = update.IsPressed ? EButtonEvent.Pressed : EButtonEvent.Released; buttonEvent.button = (EInputButton)update.Key; buttonEvents.Add(buttonEvent); } MouseUpdate[] mouseUpdates = m_mouse.GetBufferedData(); for (int i = 0; i < mouseUpdates.Length; i++) { MouseUpdate update = mouseUpdates[i]; if (update.IsButton) { SInputButtonEvent buttonEvent; buttonEvent.buttonEvent = (update.Value & 0x80) != 0 ? EButtonEvent.Pressed : EButtonEvent.Released; buttonEvent.button = EInputButton.Unknown; switch (update.Offset) { case MouseOffset.Buttons0: buttonEvent.button = EInputButton.MouseLeftButton; break; case MouseOffset.Buttons1: buttonEvent.button = EInputButton.MouseRightButton; break; case MouseOffset.Buttons2: buttonEvent.button = EInputButton.MouseMiddleButton; break; case MouseOffset.Buttons3: buttonEvent.button = EInputButton.MouseButton3; break; case MouseOffset.Buttons4: buttonEvent.button = EInputButton.MouseButton4; break; case MouseOffset.Buttons5: buttonEvent.button = EInputButton.MouseButton5; break; case MouseOffset.Buttons6: buttonEvent.button = EInputButton.MouseButton6; break; case MouseOffset.Buttons7: buttonEvent.button = EInputButton.MouseButton7; break; } buttonEvents.Add(buttonEvent); } } lock (m_inputStateMutex) { m_currentMouseState = m_mouse.GetCurrentState(); m_currentKeyboardState = m_keyboard.GetCurrentState(); } } catch (SharpDXException e) { if (e.ResultCode == ResultCode.InputLost) { // We lost input we will try to reacquire next frame return; } else { throw; } } // TODO henning support multiple controller for now we take the first connected for (int i = 0; i < m_controllers.Length; ++i) { if (m_controllers[i].IsConnected) { State controllerState = m_controllers[i].GetState(); if (controllerState.PacketNumber != m_currentGamepadState.PacketNumber) { ProcessGamepad(controllerState, buttonEvents); break; } } } UpdateAxis(); string textInput = ""; lock (m_textBufferMutex) { textInput = string.Copy(m_textInputBuffer); m_textInputBuffer = ""; } ReadOnlyCollection <SInputButtonEvent> readOnlyButtonEvents = new ReadOnlyCollection <SInputButtonEvent>(buttonEvents); //Copy the current activation states of the input classes to separate array so that they cannot be deactivated during iteration for (int i = 0, count = (int)EInputClass.Count; i < count; i++) { m_cachedInputClassStates[i] = m_inputListeners[i].bIsActive; } //todo valentin: Multithreading needs cleanup once multiple threads need callback if (readOnlyButtonEvents.Count > 0 || !string.IsNullOrWhiteSpace(textInput)) { // Notify Listener m_bIsIterating = true; for (int i = 0, count = (int)EInputClass.Count; i < count; i++) { if (m_cachedInputClassStates[i]) { var callbacks = m_inputListeners[i].callbacks; for (int k = 0, callbackCount = callbacks.Count; k < callbackCount; k++) { callbacks[k](readOnlyButtonEvents, string.Copy(textInput)); } } } m_bIsIterating = false; //Add/Remove callbacks that were altered during iteration for (int i = 0, count = m_iterationAdditions.Count; i < count; i++) { RegisterListener(m_iterationAdditions[i].callback, m_iterationAdditions[i].inputClass); } for (int i = 0, count = m_iterationRemovals.Count; i < count; i++) { UnregisterListener(m_iterationAdditions[i].callback, m_iterationAdditions[i].inputClass); } m_iterationAdditions.Clear(); m_iterationRemovals.Clear(); } } }
public ControllerEventArgs(MouseUpdate state) : base() { RawState = state; }