private static void Handle_Mouse_Buttons(MouseUpdate data)
 {
     if (data.IsButton)
     {
         MouseButtonDown?.Invoke(null, new MouseButtonEventArgs((int)data.Offset, data.Value));
     }
 }
示例#2
0
 public CustomDiUpdate(MouseUpdate update)
 {
     Value = update.Value;
     Index = CustomDiHelper.MouseAxisOffsets.IndexOf(update.Offset);
     if (Index > -1)
     {
         Type = MapType.Axis;
         return;
     }
     Type = MapType.Button;
 }
示例#3
0
        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));
        }
示例#5
0
        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();
                }
            }
        }
示例#6
0
 public ControllerEventArgs(MouseUpdate state) : base()
 {
     RawState = state;
 }