Esempio n. 1
0
        /// <summary>
        /// Parses a string in the format "h#.#" where:
        /// - the 1st # is the zero-based hat id
        /// - the 2nd # is a bit-flag defining the hat position
        /// </summary>
        /// <param name="item">The string to parse</param>
        /// <param name="position">The hat position assigned via 'out'</param>
        /// <returns>The new joystick hat</returns>
        private static JoystickHat ParseHat(string item, out HatPosition position)
        {
            JoystickHat hat = JoystickHat.Hat0;
            int         id  = Int32.Parse(item.Substring(1, 1));
            int         pos = Int32.Parse(item.Substring(3));

            position = HatPosition.Centered;
            switch (pos)
            {
            case 1: position = HatPosition.Up; break;

            case 2: position = HatPosition.Right; break;

            case 3: position = HatPosition.UpRight; break;

            case 4: position = HatPosition.Down; break;

            case 6: position = HatPosition.DownRight; break;

            case 8: position = HatPosition.Left; break;

            case 9: position = HatPosition.UpLeft; break;

            case 12: position = HatPosition.DownLeft; break;

            default: position = HatPosition.Centered; break;
            }

            return(hat + id);
        }
Esempio n. 2
0
        static JoystickHat ParseHat(string item, out HatPosition position)
        {
            // item is in the format "h#.#" where:
            // - the 1st # is the zero-based hat id
            // - the 2nd # is a bit-flag defining the hat position
            JoystickHat hat = JoystickHat.Hat0;
            int         id  = Int32.Parse(item.Substring(1, 1));
            int         pos = Int32.Parse(item.Substring(3));

            position = HatPosition.Centered;
            switch (pos)
            {
            case 1: position = HatPosition.Up; break;

            case 2: position = HatPosition.Right; break;

            case 3: position = HatPosition.UpRight; break;

            case 4: position = HatPosition.Down; break;

            case 6: position = HatPosition.DownRight; break;

            case 8: position = HatPosition.Left; break;

            case 9: position = HatPosition.UpLeft; break;

            case 12: position = HatPosition.DownLeft; break;

            default: position = HatPosition.Centered; break;
            }

            return(hat + id);
        }
Esempio n. 3
0
 public override void ProcessNetworkData(string id, string value)
 {
     if (_id.Equals(id) && _positionByValue.ContainsKey(value))
     {
         SwitchPosition = _positionByValue[value];
     }
 }
        static public VectorI2 GetVectorI2(this HatPosition item)
        {
            switch (item)
            {
            case HatPosition.Centered: return(VectorI2.ZERO);

            case HatPosition.Down: return(VectorI2.DOWN);

            case HatPosition.DownLeft: return(VectorI2.LEFT_DOWN);

            case HatPosition.DownRight: return(VectorI2.RIGHT_DOWN);

            case HatPosition.Left: return(VectorI2.LEFT);

            case HatPosition.Right: return(VectorI2.RIGHT);

            case HatPosition.Up: return(VectorI2.UP);

            case HatPosition.UpLeft: return(VectorI2.LEFT_UP);

            case HatPosition.UpRight: return(VectorI2.RIGHT_UP);
            }

            throw new UnaccountedBranchException("item", item);
        }
 public GamePadConfigurationSource(JoystickHat hat, HatPosition pos)
     : this()
 {
     Type = ConfigurationType.Hat;
     Hat = hat;
     map_hat_position = pos;
 }
 /// <summary>
 /// Creates a new gamepad configuration source from a hat
 /// </summary>
 /// <param name="hat">The hat</param>
 /// <param name="pos">The starting hat position</param>
 public GamePadConfigurationSource(JoystickHat hat, HatPosition pos)
     : this()
 {
     Type             = ConfigurationType.Hat;
     Hat              = hat;
     map_hat_position = pos;
 }
Esempio n. 7
0
        internal static void DoHatMotion(int id, int hat, HatPosition position)
        {
            JoystickState joy;

            if (lookup.TryGetValue(id, out joy))
            {
                SetValue(ref joy.Hats, hat, position);
            }
        }
Esempio n. 8
0
 void SetPositionAction_Execute(object action, HeliosActionEventArgs e)
 {
     SourceInterface.BeginTriggerBypass(e.BypassCascadingTriggers);
     try
     {
         SwitchPosition = (HatPosition)Enum.Parse(typeof(HatPosition), e.Value.StringValue);
         SourceInterface.SendData(_sendData[SwitchPosition]);
     }
     catch
     {
         // No-op if the parse fails we won't set the position.
     }
     SourceInterface.EndTriggerBypass(e.BypassCascadingTriggers);
 }
Esempio n. 9
0
        private OpenTK.Input.HatPosition TranslateHat(HatPosition value)
        {
            if ((value & HatPosition.LeftUp) == HatPosition.LeftUp)
            {
                return(OpenTK.Input.HatPosition.UpLeft);
            }

            if ((value & HatPosition.RightUp) == HatPosition.RightUp)
            {
                return(OpenTK.Input.HatPosition.UpRight);
            }

            if ((value & HatPosition.LeftDown) == HatPosition.LeftDown)
            {
                return(OpenTK.Input.HatPosition.DownLeft);
            }

            if ((value & HatPosition.RightDown) == HatPosition.RightDown)
            {
                return(OpenTK.Input.HatPosition.DownRight);
            }

            if ((value & HatPosition.Up) == HatPosition.Up)
            {
                return(OpenTK.Input.HatPosition.Up);
            }

            if ((value & HatPosition.Right) == HatPosition.Right)
            {
                return(OpenTK.Input.HatPosition.Right);
            }

            if ((value & HatPosition.Down) == HatPosition.Down)
            {
                return(OpenTK.Input.HatPosition.Down);
            }

            if ((value & HatPosition.Left) == HatPosition.Left)
            {
                return(OpenTK.Input.HatPosition.Left);
            }

            return(OpenTK.Input.HatPosition.Centered);
        }
Esempio n. 10
0
        OpenTK.Input.HatPosition TranslateHat(HatPosition value)
        {
            if ((value & HatPosition.LeftUp) == HatPosition.LeftUp)
                return OpenTK.Input.HatPosition.UpLeft;

            if ((value & HatPosition.RightUp) == HatPosition.RightUp)
                return OpenTK.Input.HatPosition.UpRight;

            if ((value & HatPosition.LeftDown) == HatPosition.LeftDown)
                return OpenTK.Input.HatPosition.DownLeft;

            if ((value & HatPosition.RightDown) == HatPosition.RightDown)
                return OpenTK.Input.HatPosition.DownRight;

            if ((value & HatPosition.Up) == HatPosition.Up)
                return OpenTK.Input.HatPosition.Up;

            if ((value & HatPosition.Right) == HatPosition.Right)
                return OpenTK.Input.HatPosition.Right;

            if ((value & HatPosition.Down) == HatPosition.Down)
                return OpenTK.Input.HatPosition.Down;

            if ((value & HatPosition.Left) == HatPosition.Left)
                return OpenTK.Input.HatPosition.Left;

            return OpenTK.Input.HatPosition.Centered;
        }
Esempio n. 11
0
 public override void ProcessNetworkData(string id, string value)
 {
     if (_id.Equals(id) && _positionByValue.ContainsKey(value))
     {
         SwitchPosition = _positionByValue[value];
     }
 }
Esempio n. 12
0
 internal JoystickHatState(HatPosition pos)
 {
     position = pos;
 }
Esempio n. 13
0
 public override void Reset()
 {
     SourceInterface.BeginTriggerBypass(true);
     SwitchPosition = HatPosition.Center;
     SourceInterface.EndTriggerBypass(true);
 }
Esempio n. 14
0
 public override void Reset()
 {
     SourceInterface.BeginTriggerBypass(true);
     SwitchPosition = HatPosition.Center;
     SourceInterface.EndTriggerBypass(true);
 }
Esempio n. 15
0
        // attached joysticks
        private void pictureboxJoysticks_Paint(object sender, PaintEventArgs e)
        {
            this.DoubleBuffered = true;
            int device = -1;

            Interface.JoystickComponent component = Interface.JoystickComponent.Invalid;
            int element   = -1;
            int direction = -1;

            Interface.CommandType type = Interface.CommandType.Digital;
            if (this.Tag == null & listviewControls.SelectedIndices.Count == 1)
            {
                int j = listviewControls.SelectedIndices[0];
                if (Interface.CurrentControls[j].Method == Interface.ControlMethod.Joystick)
                {
                    device    = Interface.CurrentControls[j].Device;
                    component = Interface.CurrentControls[j].Component;
                    element   = Interface.CurrentControls[j].Element;
                    direction = Interface.CurrentControls[j].Direction;
                    type      = Interface.CurrentControls[j].InheritedType;
                }
            }

            System.Globalization.CultureInfo Culture = System.Globalization.CultureInfo.InvariantCulture;
            e.Graphics.SmoothingMode     = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
            Font  f = new Font(this.Font.Name, 0.875f * this.Font.Size);
            float x = 2.0f, y = 2.0f;
            float threshold = ((float)trackbarJoystickAxisThreshold.Value - (float)trackbarJoystickAxisThreshold.Minimum) / (float)(trackbarJoystickAxisThreshold.Maximum - trackbarJoystickAxisThreshold.Minimum);

            for (int i = 0; i < Joysticks.AttachedJoysticks.Length; i++)
            {
                //Get the current joystick state
                var capabilities = Joystick.GetCapabilities(Joysticks.AttachedJoysticks[i].OpenTKHandle);
                var state        = Joystick.GetState(Joysticks.AttachedJoysticks[i].OpenTKHandle);

                float w, h;
                if (JoystickImage != null)
                {
                    e.Graphics.DrawImage(JoystickImage, x, y);
                    w = (float)JoystickImage.Width;
                    h = (float)JoystickImage.Height;
                    if (h < 64.0f)
                    {
                        h = 64.0f;
                    }
                }
                else
                {
                    w = 64.0f; h = 64.0f;
                    e.Graphics.DrawRectangle(new Pen(labelControlsTitle.BackColor), x, y, w, h);
                }
                {                 // joystick number
                    e.Graphics.FillEllipse(Brushes.Gold, x + w - 16.0f, y, 16.0f, 16.0f);
                    e.Graphics.DrawEllipse(Pens.Black, x + w - 16.0f, y, 16.0f, 16.0f);
                    string t = (i + 1).ToString(Culture);
                    SizeF  s = e.Graphics.MeasureString(t, f);
                    e.Graphics.DrawString(t, f, Brushes.Black, x + w - 8.0f - 0.5f * s.Width, y + 8.0f - 0.5f * s.Height);
                }
                {                 // joystick name
                    e.Graphics.DrawString(Joysticks.AttachedJoysticks[i].Name, this.Font, Brushes.Black, x + w + 8.0f, y);
                }
                if (OpenTK.Configuration.RunningOnSdl2)
                {
                    //HACK: Control configuration doesn't work in-form on SDL2
                    string error = Interface.GetInterfaceString("errors_controls_ingame");
                    if (OpenTK.Configuration.RunningOnSdl2)
                    {
                        error = error.Replace("[platform]", "SDL2");
                    }
                    e.Graphics.DrawString(error, this.Font, Brushes.Black, x + w + 8.0f, y + 30.0f);
                    return;
                }
                float m;
                if (groupboxJoysticks.Enabled)
                {
                    m = x;
                    Pen p  = new Pen(Color.DarkGoldenrod, 2.0f);
                    Pen ps = new Pen(Color.Firebrick, 2.0f);
                    {                     // first row
                        float u = x + w + 8.0f;
                        float v = y + 24.0f;
                        float g = h - 24.0f;
                        {                         // hats
                            int n = capabilities.HatCount;
                            for (int j = 0; j < n; j++)
                            {
                                if (device == i & component == Interface.JoystickComponent.Hat & element == j)
                                {
                                    e.Graphics.DrawEllipse(ps, u, v, g, g);
                                }
                                else
                                {
                                    e.Graphics.DrawEllipse(p, u, v, g, g);
                                }
                                string t = "H" + (j + 1).ToString(Culture);
                                SizeF  s = e.Graphics.MeasureString(t, f);
                                e.Graphics.DrawString(t, f, Brushes.Black, u + 0.5f * (g - s.Width), v + 0.5f * (g - s.Height));
                                JoystickHatState aa = state.GetHat((JoystickHat)j);
                                HatPosition      a  = aa.Position;
                                if (a != HatPosition.Centered)
                                {
                                    double rx = 0.0;
                                    double ry = 0.0;
                                    switch (a)
                                    {
                                    case HatPosition.Up:
                                        rx = 0.0;
                                        ry = -1.0;
                                        break;

                                    case HatPosition.Down:
                                        rx = 0.0;
                                        ry = 1.0;
                                        break;

                                    case HatPosition.Left:
                                        rx = -1.0;
                                        ry = 0.0;
                                        break;

                                    case HatPosition.Right:
                                        rx = 1.0;
                                        ry = 0.0;
                                        break;

                                    case HatPosition.UpLeft:
                                        rx = -1.0;
                                        ry = -1.0;
                                        break;

                                    case HatPosition.UpRight:
                                        rx = 1.0;
                                        ry = -1.0;
                                        break;

                                    case HatPosition.DownLeft:
                                        rx = -1.0;
                                        ry = 1.0;
                                        break;

                                    case HatPosition.DownRight:
                                        rx = 1.0;
                                        ry = 1.0;
                                        break;
                                    }

                                    double rt = rx * rx + ry * ry;
                                    rt  = 1.0 / Math.Sqrt(rt);
                                    rx *= rt; ry *= rt;
                                    float dx = (float)(0.5 * rx * (g - 8.0));
                                    float dy = (float)(0.5 * ry * (g - 8.0));
                                    e.Graphics.FillEllipse(Brushes.White, u + 0.5f * g + dx - 4.0f, v + 0.5f * g + dy - 4.0f, 8.0f, 8.0f);
                                    e.Graphics.DrawEllipse(new Pen(Color.Firebrick, 2.0f), u + 0.5f * g + dx - 4.0f, v + 0.5f * g + dy - 4.0f, 8.0f, 8.0f);
                                }
                                if (device == i & component == Interface.JoystickComponent.Hat & element == j)
                                {
                                    double rx = ((HatPosition)direction & HatPosition.Left) != 0 ? -1.0 : ((HatPosition)direction & HatPosition.Right) != 0 ? 1.0 : 0.0;
                                    double ry = ((HatPosition)direction & HatPosition.Up) != 0 ? -1.0 : ((HatPosition)direction & HatPosition.Down) != 0 ? 1.0 : 0.0;
                                    double rt = rx * rx + ry * ry;
                                    rt  = 1.0 / Math.Sqrt(rt);
                                    rx *= rt; ry *= rt;
                                    float dx = (float)(0.5 * rx * (g - 8.0));
                                    float dy = (float)(0.5 * ry * (g - 8.0));
                                    e.Graphics.FillEllipse(Brushes.Firebrick, u + 0.5f * g + dx - 2.0f, v + 0.5f * g + dy - 2.0f, 4.0f, 4.0f);
                                }
                                u += g + 8.0f;
                            }
                        }
                        if (u > m)
                        {
                            m = u;
                        }
                    }

                    {                     // second row
                        float u = x;
                        float v = y + h + 8.0f;
                        {                         // axes
                            int   n = capabilities.AxisCount;
                            float g = (float)pictureboxJoysticks.ClientRectangle.Height - v - 2.0f;
                            for (int j = 0; j < n; j++)
                            {
                                float r  = state.GetAxis((JoystickAxis)j);
                                float r0 = r < 0.0f ? r : 0.0f;
                                float r1 = r > 0.0f ? r : 0.0f;
                                if ((float)Math.Abs((double)r) < threshold)
                                {
                                    e.Graphics.FillRectangle(Brushes.RosyBrown, u, v + 0.5f * g - 0.5f * r1 * g, 16.0f, 0.5f * g * (r1 - r0));
                                }
                                else
                                {
                                    e.Graphics.FillRectangle(Brushes.Firebrick, u, v + 0.5f * g - 0.5f * r1 * g, 16.0f, 0.5f * g * (r1 - r0));
                                }
                                if (device == i & component == Interface.JoystickComponent.Axis & element == j)
                                {
                                    if (direction == -1 & type != Interface.CommandType.AnalogFull)
                                    {
                                        e.Graphics.DrawRectangle(p, u, v, 16.0f, g);
                                        e.Graphics.DrawRectangle(ps, u, v + 0.5f * g, 16.0f, 0.5f * g);
                                    }
                                    else if (direction == 1 & type != Interface.CommandType.AnalogFull)
                                    {
                                        e.Graphics.DrawRectangle(p, u, v, 16.0f, g);
                                        e.Graphics.DrawRectangle(ps, u, v, 16.0f, 0.5f * g);
                                    }
                                    else
                                    {
                                        e.Graphics.DrawRectangle(ps, u, v, 16.0f, g);
                                    }
                                }
                                else
                                {
                                    e.Graphics.DrawRectangle(p, u, v, 16.0f, g);
                                }
                                e.Graphics.DrawLine(p, u, v + (0.5f - 0.5f * threshold) * g, u + 16.0f, v + (0.5f - 0.5f * threshold) * g);
                                e.Graphics.DrawLine(p, u, v + (0.5f + 0.5f * threshold) * g, u + 16.0f, v + (0.5f + 0.5f * threshold) * g);
                                string t = "A" + (j + 1).ToString(Culture);
                                SizeF  s = e.Graphics.MeasureString(t, f);
                                e.Graphics.DrawString(t, f, Brushes.Black, u + 0.5f * (16.0f - s.Width), v + g - s.Height - 2.0f);
                                u += 24.0f;
                            }
                        }

                        {                         // buttons
                            int   n = capabilities.ButtonCount;
                            float g = (float)0.5f * (pictureboxJoysticks.ClientRectangle.Height - v - 10.0f);
                            for (int j = 0; j < n; j++)
                            {
                                bool  q  = state.GetButton((JoystickButton)j) != 0;
                                float dv = (float)(j & 1) * (g + 8.0f);
                                if (q)
                                {
                                    e.Graphics.FillRectangle(Brushes.Firebrick, u, v + dv, g, g);
                                }
                                if (device == i & component == Interface.JoystickComponent.Button & element == j)
                                {
                                    e.Graphics.DrawRectangle(ps, u, v + dv, g, g);
                                }
                                else
                                {
                                    e.Graphics.DrawRectangle(p, u, v + dv, g, g);
                                }
                                string t = "B" + (j + 1).ToString(Culture);
                                SizeF  s = e.Graphics.MeasureString(t, f);
                                e.Graphics.DrawString(t, f, Brushes.Black, u + 0.5f * (g - s.Width), v + dv + 0.5f * (g - s.Height));
                                if ((j & 1) != 0 | j == n - 1)
                                {
                                    u += g + 8.0f;
                                }
                            }
                        }

                        if (u > m)
                        {
                            m = u;
                        }
                    }
                }
                else
                {
                    m = x + w + 64.0f;
                }
                x = m + 8.0f;
            }
        }
Esempio n. 16
0
 internal JoystickHatState(HatPosition pos)
 {
     position = pos;
 }
Esempio n. 17
0
            public void SetHat(short collection, HIDPage page, short usage, HatPosition pos)
            {
                JoystickHat hat = GetHat(collection, page, usage);

                State.SetHat(hat, new JoystickHatState(pos));
            }
Esempio n. 18
0
 void SetPositionAction_Execute(object action, HeliosActionEventArgs e)
 {
     SourceInterface.BeginTriggerBypass(e.BypassCascadingTriggers);
     try
     {
         SwitchPosition = (HatPosition)Enum.Parse(typeof(HatPosition), e.Value.StringValue);
         SourceInterface.SendData(_sendData[SwitchPosition]);
     }
     catch
     {
         // No-op if the parse fails we won't set the position.
     }
     SourceInterface.EndTriggerBypass(e.BypassCascadingTriggers);
 }
Esempio n. 19
0
        public JoystickState GetState(int player_index)
        {
            lock (sync)
            {
                JoystickState state = new JoystickState();

                if (IsValid(player_index))
                {
                    int device_index = player_to_index[player_index];
                    int index        = index_to_stick[device_index];
                    JoystickDevice <WinMMJoyDetails> stick =
                        sticks[index] as JoystickDevice <WinMMJoyDetails>;

                    // For joysticks with fewer than three axes or four buttons, we must
                    // use joyGetPos; otherwise, joyGetPosEx. This is not just a cosmetic
                    // difference, simple devices will return incorrect results if we use
                    // joyGetPosEx on them.
                    if (stick.Details.Capabilities.AxisCount <= 3 || stick.Details.Capabilities.ButtonCount <= 4)
                    {
                        // Use joyGetPos
                        JoyInfo info = new JoyInfo();

                        JoystickError result = UnsafeNativeMethods.joyGetPos(device_index, ref info);
                        if (result == JoystickError.NoError)
                        {
                            for (int i = 0; i < stick.Details.Capabilities.AxisCount; i++)
                            {
                                state.SetAxis(JoystickAxis.Axis0 + i, CalculateOffset(info.GetAxis(i), stick.Details.Min[i], stick.Details.Max[i]));
                            }

                            for (int i = 0; i < stick.Details.Capabilities.ButtonCount; i++)
                            {
                                state.SetButton(JoystickButton.Button0 + i, (info.Buttons & 1 << i) != 0);
                            }

                            state.SetIsConnected(true);
                        }
                        else if (result == JoystickError.Unplugged)
                        {
                            UnplugJoystick(player_index);
                        }
                    }
                    else
                    {
                        // Use joyGetPosEx
                        JoyInfoEx info_ex = new JoyInfoEx();
                        info_ex.Size  = JoyInfoEx.SizeInBytes;
                        info_ex.Flags = JoystickFlags.All;

                        JoystickError result = UnsafeNativeMethods.joyGetPosEx(device_index, ref info_ex);
                        if (result == JoystickError.NoError)
                        {
                            for (int i = 0; i < stick.Details.Capabilities.AxisCount; i++)
                            {
                                state.SetAxis(JoystickAxis.Axis0 + i, CalculateOffset(info_ex.GetAxis(i), stick.Details.Min[i], stick.Details.Max[i]));
                            }

                            for (int i = 0; i < stick.Details.Capabilities.ButtonCount; i++)
                            {
                                state.SetButton(JoystickButton.Button0 + i, (info_ex.Buttons & 1 << i) != 0);
                            }

                            for (int i = 0; i < stick.Details.Capabilities.HatCount; i++)
                            {
                                // A discrete POV returns specific values for left, right, etc.
                                // A continuous POV returns an integer indicating an angle in degrees * 100, e.g. 18000 == 180.00 degrees.
                                // The vast majority of joysticks have discrete POVs, so we'll treat all of them as discrete for simplicity.
                                if ((JoystickPovPosition)info_ex.Pov != JoystickPovPosition.Centered)
                                {
                                    HatPosition hatpos = HatPosition.Centered;
                                    if (info_ex.Pov < 4500 || info_ex.Pov >= 31500)
                                    {
                                        hatpos |= HatPosition.Up;
                                    }
                                    if (info_ex.Pov >= 4500 && info_ex.Pov < 13500)
                                    {
                                        hatpos |= HatPosition.Right;
                                    }
                                    if (info_ex.Pov >= 13500 && info_ex.Pov < 22500)
                                    {
                                        hatpos |= HatPosition.Down;
                                    }
                                    if (info_ex.Pov >= 22500 && info_ex.Pov < 31500)
                                    {
                                        hatpos |= HatPosition.Left;
                                    }

                                    state.SetHat(JoystickHat.Hat0 + i, new JoystickHatState(hatpos));
                                }
                            }

                            state.SetIsConnected(true);
                        }
                        else if (result == JoystickError.Unplugged)
                        {
                            UnplugJoystick(player_index);
                        }
                    }
                }

                return(state);
            }
        }
Esempio n. 20
0
        //void _Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        void _Timer_Elapsed(object whatever)
        {
            //_Timer.Stop();

            DPad[] oDirection = new DPad[4];
            Button oBtn = new Button();
            HatPosition[] oHatDirection = new HatPosition[4];

            try
            {
                for (int i = 0; i < 4; i++)
                {
                    var cap = OpenTK.Input.Joystick.GetCapabilities(i);
                    var state = OpenTK.Input.Joystick.GetState(i);
                    if (!state.IsConnected || (cap.ButtonCount == 16))
                        continue;
                    System.Diagnostics.Debug.Print(state.ToString());

                    oBtn.A = state.IsButtonDown(JoystickButton.Button1);
                    oBtn.B = state.IsButtonDown(JoystickButton.Button2);
                    oBtn.X = state.IsButtonDown(JoystickButton.Button3);
                    oBtn.Y = state.IsButtonDown(JoystickButton.Button0);
                    oBtn.L = state.IsButtonDown(JoystickButton.Button6);
                    oBtn.R = state.IsButtonDown(JoystickButton.Button7);
                    oBtn.LB = false;
                    oBtn.RB = false;
                    oBtn.Select = state.IsButtonDown(JoystickButton.Button8);
                    oBtn.Start = state.IsButtonDown(JoystickButton.Button9);

                    JoystickHatState jhs = state.GetHat(JoystickHat.Hat0);
                    oHatDirection[i] = jhs.Position;

                    int nXAxis = (int)Math.Round(state.GetAxis(JoystickAxis.Axis0), 0);
                    int nYAxis = (int)Math.Round(state.GetAxis(JoystickAxis.Axis1), 0);

                    // 左邊磨菇頭...
                    if ((nXAxis == 0 && nYAxis == 0))
                    {
                        oDirection[i] = DPad.None;
                    }

                    if (nYAxis > 0)
                        oDirection[i] = DPad.Up;
                    if (nYAxis < 0)
                        oDirection[i] = DPad.Down;

                    if (oBtn.A || oBtn.B || oBtn.X || oBtn.Y || oBtn.L || oBtn.R || oBtn.LB || oBtn.RB || oBtn.Select || oBtn.Start || oDirection[i] != DPad.None || jhs.Position != HatPosition.Centered)
                    {
                        JoystickPressedEventHandler handler = JoystickPressed;
                        if (handler != null)
                        {
                            JoystickPressedEventArgs evt = new JoystickPressedEventArgs();

                            evt.DPadDirection = oDirection[i];
                            evt.Buttons = oBtn;
                            evt.HatDirection = oHatDirection[i];
                            evt.TraceMessage = "Joystick[" + i + "]:   " + state.ToString();
                            handler(evt);
                        }
                    }
                    else
                    {

                        JoystickTraceEventHandler hander2 = JoystickTrace;
                        if (hander2 != null)
                        {
                            JoystickTraceEventArgs evt2 = new JoystickTraceEventArgs();
                            evt2.TraceMessage = "Joystick[" + i + "]:   " + state.ToString();
                            hander2(evt2);
                        }
                    }
                }

            }
            catch (Exception ex){ }

            //_Timer.Start();
        }
Esempio n. 21
0
 public void SetHat(short collection, HIDPage page, short usage, HatPosition pos)
 {
     JoystickHat hat = GetHat(collection, page, usage);
     State.SetHat(hat, new JoystickHatState(pos));
 }
        static JoystickHat ParseHat(string item, out HatPosition position)
        {
            // item is in the format "h#.#" where:
            // - the 1st # is the zero-based hat id
            // - the 2nd # is a bit-flag defining the hat position
            JoystickHat hat = JoystickHat.Hat0;
            int id = Int32.Parse(item.Substring(1, 1));
            int pos = Int32.Parse(item.Substring(3));

            position = HatPosition.Centered;
            switch (pos)
            {
                case 1: position = HatPosition.Up; break;
                case 2: position = HatPosition.Right; break;
                case 3: position = HatPosition.UpRight; break;
                case 4: position = HatPosition.Down ; break;
                case 6: position = HatPosition.DownRight; break;
                case 8: position = HatPosition.Left; break;
                case 9: position = HatPosition.UpLeft; break;
                case 12: position = HatPosition.DownLeft; break;
                default: position = HatPosition.Centered; break;
            }

            return hat + id;
        }