예제 #1
0
        private static bool ComputeState(HardwareInput hardwareInput, HardwareAction hardwareAction)
        {
            var hardwareInputVariant = hardwareAction.HardwareInputVariant;

            switch (hardwareInputVariant.CurrentVariant)
            {
            case HardwareInputVariant.Variant.Keyboard:
                return(hardwareInput.KeyboardInput[hardwareInputVariant.AsKeyboard()]);

            case HardwareInputVariant.Variant.Mouse:
                switch (hardwareInputVariant.AsMouse())
                {
                case HardwareInputVariant.MouseVariant.LeftButton:
                    return(hardwareInput.MouseInput.LeftButton);

                case HardwareInputVariant.MouseVariant.MiddleButton:
                    return(hardwareInput.MouseInput.MiddleButton);

                case HardwareInputVariant.MouseVariant.RightButton:
                    return(hardwareInput.MouseInput.RightButton);

                case HardwareInputVariant.MouseVariant.XButton1:
                    return(hardwareInput.MouseInput.XButton1);

                case HardwareInputVariant.MouseVariant.XButton2:
                    return(hardwareInput.MouseInput.XButton2);

                default:
                    throw new ArgumentOutOfRangeException();
                }

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
예제 #2
0
        private static void ProcessCursor(Point axis)
        {
            var axisInput = new Vector2(axis.X, axis.Y);

            if (axisInput.Magnitude > Settings.Default.CursorDeadzone)
            {
                axisInput = Vector2.Normalize(axisInput) *
                            ((axisInput.Magnitude - Settings.Default.CursorDeadzone) /
                             (127 - Settings.Default.CursorDeadzone));

                var curve = 0.05 * Settings.Default.CursorCurve;

                var xSpeed = (axisInput.X < 0 ? -axisInput.X : axisInput.X) * Settings.Default.CursorSpeed;
                var ySpeed = (axisInput.Y < 0 ? -axisInput.Y : axisInput.Y) * Settings.Default.CursorSpeed;

                var xMath = Math.Pow(curve * xSpeed, 2) + curve * xSpeed;
                var yMath = Math.Pow(curve * ySpeed, 2) + curve * ySpeed;

                var mouseMovement = new Vector2(xMath, yMath);

                if (axis.X < 0)
                {
                    mouseMovement.X = -mouseMovement.X;
                }
                if (axis.Y < 0)
                {
                    mouseMovement.Y = -mouseMovement.Y;
                }

                HardwareInput.MoveMouse((int)mouseMovement.X, (int)mouseMovement.Y);
            }
        }
예제 #3
0
        private static double ComputeState(HardwareInput hardwareInput, HardwareAxis hardwareAxis)
        {
            var hardwareInputVariant = hardwareAxis.HardwareInputVariant;

            switch (hardwareInputVariant.CurrentVariant)
            {
            case HardwareInputVariant.Variant.Keyboard:
                return(BoolToDouble(hardwareInput.KeyboardInput[hardwareInputVariant.AsKeyboard()]));

            case HardwareInputVariant.Variant.Mouse:
                switch (hardwareInputVariant.AsMouse())
                {
                case HardwareInputVariant.MouseVariant.AxisX:
                    return(hardwareInput.MouseInput.PositionDelta.X);

                case HardwareInputVariant.MouseVariant.AxisY:
                    return(-hardwareInput.MouseInput.PositionDelta.Y);

                default:
                    throw new ArgumentOutOfRangeException();
                }

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
예제 #4
0
 void OnLeftKeyStarted(HardwareInput sender)
 {
     if (!_atLeftBoundary)
     {
         _rigidbody.AddForce(Vector3.left * driftSpeed);
     }
 }
예제 #5
0
 void OnRightKeyStarted(HardwareInput sender)
 {
     if (!_atRightBoundary)
     {
         _rigidbody.AddForce(Vector3.right * driftSpeed);
     }
 }
예제 #6
0
 public Input(KeyboardInput keyboardInput)
 {
     Mouse    = default;
     Hardware = default;
     Type     = InputType.Keyboard;
     Keyboard = keyboardInput;
 }
예제 #7
0
 /// <summary>
 /// Converts a 32bit Input to a 64bit Input
 /// </summary>
 /// <param name="input"></param>
 public Input64(Input input)
 {
     type = input.type;
     mi   = input.mi;
     ki   = input.ki;
     hi   = input.hi;
 }
예제 #8
0
 public static void SendKeyUp(Key key, bool forceDirect = false)
 {
     if ((Properties.Settings.Default.InputDirectKeyboard || forceDirect) && _process != null)
     {
         // Send direct key messages to WoW window
         PostMessage(new HandleRef(null, _process.MainWindowHandle), WM_KEYUP,
                     (IntPtr)KeyInterop.VirtualKeyFromKey(key), IntPtr.Zero);
     }
     else
     {
         // Simulate hardware inputs
         HardwareInput.SendKey(key, false);
     }
 }
예제 #9
0
        private static void ProcessCursor(Point axis)
        {
            var axisInput = new Vector2(axis.X, axis.Y);

            if (axisInput.Magnitude > Settings.Default.CursorDeadzone)
            {
                axisInput = Vector2.Normalize(axisInput) *
                            ((axisInput.Magnitude - Settings.Default.CursorDeadzone) /
                             (127 - Settings.Default.CursorDeadzone));

                var curve = 0.05 * Settings.Default.CursorCurve;

                var xSpeed = (axisInput.X < 0 ? -axisInput.X : axisInput.X) * Settings.Default.CursorSpeed;
                var ySpeed = (axisInput.Y < 0 ? -axisInput.Y : axisInput.Y) * Settings.Default.CursorSpeed;

                var xMath = Math.Pow(curve * xSpeed, 2) + curve * xSpeed;
                var yMath = Math.Pow(curve * ySpeed, 2) + curve * ySpeed;

                //xMath *= MemoryManager.ReadAoeState() ? 0.5 : 1;
                //yMath *= MemoryManager.ReadAoeState() ? 0.5 : 1;

                var mouseMovement = new Vector2(xMath, yMath);

                if (axis.X < 0)
                {
                    mouseMovement.X = -mouseMovement.X;
                }
                if (axis.Y < 0)
                {
                    mouseMovement.Y = -mouseMovement.Y;
                }


                if (Settings.Default.InputHardwareMouse)
                {
                    HardwareInput.MoveMouse((int)mouseMovement.X, (int)mouseMovement.Y);
                }
                else
                {
                    var m = Cursor.Position;
                    m.X            += (int)mouseMovement.X;
                    m.Y            += (int)mouseMovement.Y;
                    Cursor.Position = m;
                }
            }
        }
예제 #10
0
        /// <summary>
        /// Initialize this module.
        /// </summary>
        public override void Initialize()
        {
            base.Initialize();

            HardwareInput = Host.Platform.GetInput(Host.Window);
            HardwareInput.Initialize();

            HardwareInput.JoypadConnection += (obj, e) =>
            {
                if (!InputStates.ContainsKey(e.Joypad))
                {
                    InputStates.Add(e.Joypad, new InputState());
                }

                if (e.Connected)
                {
                    Joypads.Add(new VirtualJoypad(InputStates?[e.Joypad], e.Joypad.Index, e.Joypad.Name));
                }
                else
                {
                    Joypads.RemoveAt(Joypads.FindIndex(x => x.Index == e.Joypad.Index));
                }

                JoypadConnection?.Invoke(obj, e);
            };

            InputStates.Add(HardwareKeyboard, new InputState());
            InputStates.Add(HardwareMouse, new InputState());

            HardwareKeyboard.OnTypeWithMods += HardwareKeyboard_OnTypeWithMods;
            HardwareKeyboard.OnKeyEvent     += HardwareKeyboard_OnKeyEvent;
            HardwareKeyboard.OnType         += HardwareKeyboard_OnType;

            HardwareMouse.OnButtonEvent += HardwareMouse_OnButtonEvent;
            HardwareMouse.OnScroll      += HardwareMouse_OnScroll;
            HardwareMouse.OnMove        += HardwareMouse_OnMove;

            foreach (var j in HardwareJoypads)
            {
                Joypads.Add(new VirtualJoypad(null, j.Index, j.Name));
            }
        }
예제 #11
0
 public HardwarePacket()
 {
     this.input = new HardwareInput();
 }
 private void MoveCameraLeft(HardwareInput input)
 {
     MoveCameraInDirection(CameraDirection.Left);
 }
예제 #13
0
 public static void SendMouseUp(MouseButton button, bool forceDirect = false)
 {
     HardwareInput.SendClick(button, false);
 }
 private void MoveCameraRight(HardwareInput input)
 {
     MoveCameraInDirection(CameraDirection.Right);
 }
예제 #15
0
 private void StartKick(HardwareInput input)
 {
     _photonView.RPC("HandleStartKick", RpcTarget.AllViaServer);
 }
예제 #16
0
 public static Input Hardware(HardwareInput input)
 {
     return(new Input {
         Type = INPUT_HARDWARE, Hi = input
     });
 }
예제 #17
0
        /// <summary>
        /// Update the state of this element.
        /// </summary>
        /// <param name="clock">Game clock.</param>
        public override void Update(IFrameBasedClock clock)
        {
            base.Update(clock);

            HardwareInput.Update(clock);

            InputStates[HardwareKeyboard].Time = clock.CurrentTime;
            InputStates[HardwareMouse].Time    = clock.CurrentTime;

            // - Remove unused joypads
            var removed = InputStates.Keys.Where(x => x is IJoypad).Except(HardwareJoypads);

            foreach (IJoypad pad in removed)
            {
                InputStates.Remove(pad);
            }

            // - Update joypad states
            foreach (IJoypad pad in HardwareJoypads)
            {
                if (!InputStates.ContainsKey(pad))
                {
                    InputStates.Add(pad, new InputState());
                }

                for (uint i = 0; i < pad.Buttons.Count(); ++i)
                {
                    if (pad.Buttons[i] != InputStates[pad].GetKeyState(i))
                    {
                        InputStates[pad].Events.Enqueue(new InputEvent <JoypadKeyEventArgs>
                        {
                            Name = "OnButtonPress",
                            Info = new JoypadKeyEventArgs
                            {
                                Key    = (int)i,
                                Action = pad.Buttons[i]
                            }
                        });
                    }

                    InputStates[pad].SetKeyState(i, pad.Buttons[i]);
                }

                for (uint i = 0; i < pad.Axes.Count(); ++i)
                {
                    if (pad.Axes[i] != InputStates[pad].GetPositionState(i))
                    {
                        InputStates[pad].Events.Enqueue(new InputEvent <JoypadAxeEventArgs>
                        {
                            Name = "OnAxeMovement",
                            Info = new JoypadAxeEventArgs
                            {
                                Axe   = (int)i,
                                Value = pad.Axes[i]
                            }
                        });
                    }

                    InputStates[pad].SetPositionState(i, (float)pad.Axes[i]);
                }

                InputStates[pad].Time = clock.CurrentTime;
            }

            Mouse.UpdateCurrentState(InputStates?[HardwareMouse]);
            Keyboard.UpdateCurrentState(InputStates?[HardwareKeyboard]);

            Mouse.Update(clock);
            Keyboard.Update(clock);

            foreach (var j in Joypads)
            {
                j.UpdateCurrentState(InputStates?[HardwareJoypads.Where(x => x.Index == j.Index).FirstOrDefault()]);
                j.Update(clock);
            }

            // - Update binding
            CurrentBinding?.Update(clock);
        }
예제 #18
0
 public HardwarePacket(HardwareInput input)
 {
     this.input = input;
 }