Пример #1
0
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);


            if (Keyboard.GetState().IsKeyDown(Keys.Enter))
            {
                Main.Instance.CurrentGameState = new MainGame(); // Eventually this should go to level select or game scene
            }
            if (Keyboard.GetState().IsKeyDown(Keys.Tab))
            {
                Main.Instance.CurrentGameState = new GameOverState(0); // Eventually this should go to level select or game scene
            }
            if (Keyboard.GetState().IsKeyDown(Keys.LeftAlt) && Keyboard.GetState().IsKeyDown(Keys.Enter))
            {
                Main.Instance.CurrentGameState = new MainMenu(); // Eventually this should switch to level creation screen
            }
            // Check the device for Player One

            JoystickCapabilities caps = Joystick.GetCapabilities(0);

            if (caps.IsConnected)
            {
                //Debugger.Debug("Controller Connected");
                // Get the current state of Controller1
                JoystickState state = Joystick.GetState(0);


                if (state.Buttons[9] == ButtonState.Pressed)
                {
                    Main.Instance.CurrentGameState = new MainGame();
                }
            }
        }
Пример #2
0
 public JoystickCapabilities GetCapabilities()
 {
     Capabilities = new JoystickCapabilities(
         axes.Count, buttons.Count, hats.Count,
         Capabilities.IsConnected);
     return(Capabilities);
 }
Пример #3
0
 public WinMMJoyDetails(JoystickCapabilities caps)
     : this()
 {
     Min          = new int[caps.AxisCount];
     Max          = new int[caps.AxisCount];
     Capabilities = caps;
 }
Пример #4
0
        int DrawJoysticks(Graphics gfx, int line)
        {
            line++;
            DrawString(gfx, "GamePad:", line++);
            for (int i = 0; i < 4; i++)
            {
                GamePadCapabilities caps  = GamePad.GetCapabilities(i);
                GamePadState        state = GamePad.GetState(i);
                if (state.IsConnected)
                {
                    DrawString(gfx, String.Format("{0}: {1}", i, caps), line++);
                    DrawString(gfx, state.ToString(), line++);
                }
            }

            line++;
            DrawString(gfx, "Joystick:", line++);
            for (int i = 0; i < 4; i++)
            {
                JoystickCapabilities caps  = Joystick.GetCapabilities(i);
                JoystickState        state = Joystick.GetState(i);
                if (state.IsConnected)
                {
                    DrawString(gfx, String.Format("{0}: {1}", i, caps), line++);
                    DrawString(gfx, state.ToString(), line++);
                }
            }

            return(line);
        }
Пример #5
0
        public void Poll()
        {
            for (int i = 0; i < 4; i++)
            {
                JoystickCapabilities caps = Joystick.GetCapabilities(i);
                if (caps.IsConnected && joysticks[i].Description == DisconnectedName)
                {
                    // New joystick connected
                    joysticks[i] = new LegacyJoystickDevice(i, caps.AxisCount, caps.ButtonCount);
                    //device.Description = Joystick.GetName(i);
                    joysticks[i].Description = ConnectedName;
                }
                else if (!caps.IsConnected && joysticks[i].Description != DisconnectedName)
                {
                    // Joystick disconnected
                    joysticks[i]             = new LegacyJoystickDevice(i, 0, 0);
                    joysticks[i].Description = DisconnectedName;
                }

                JoystickState state = Joystick.GetState(i);
                for (int axis_index = 0; axis_index < (int)caps.AxisCount; axis_index++)
                {
                    JoystickAxis axis = JoystickAxis.Axis0 + axis_index;
                    joysticks[i].SetAxis(axis, state.GetAxis(axis));
                }
                for (int button_index = 0; button_index < (int)caps.ButtonCount; button_index++)
                {
                    JoystickButton button = JoystickButton.Button0 + button_index;
                    joysticks[i].SetButton(button, state.GetButton(button) == ButtonState.Pressed);
                }
            }
        }
Пример #6
0
        /**
         * Check that a valid controller is plugged in at the specified index.
         * @param index The index of the controller to test.
         */
        private static bool isValidController(int index)
        {
            GamePadCapabilities  gamePadCap  = GamePad.GetCapabilities(index);
            JoystickCapabilities joystickCap = Joystick.GetCapabilities(index);

            return(gamePadCap.IsConnected && joystickCap.IsConnected &&
                   joystickCap.AxisCount > 0 && joystickCap.ButtonCount > 0);
        }
Пример #7
0
 /// <summary>
 /// Checks whether a joystick is a classic console controller.
 /// </summary>
 /// <param name="capabilities">the capabilities of the joystick.</param>
 /// <returns>Whether the controller is compatible.</returns>
 internal static bool IsCompatibleController(JoystickCapabilities capabilities)
 {
     // A valid controller needs at least 12 buttons or 10 buttons plus a hat. If there are more than 20 buttons, the joystick is unlikely a valid controller.
     if ((capabilities.ButtonCount >= 12 || (capabilities.ButtonCount >= 10 && capabilities.HatCount > 0)) && capabilities.ButtonCount <= 20)
     {
         return(true);
     }
     return(false);
 }
Пример #8
0
            public JoystickDevice(int deviceIndex)
            {
                this.deviceIndex = deviceIndex;

                Capabilities = OpenTK.Input.Joystick.GetCapabilities(deviceIndex);
                Guid         = OpenTK.Input.Joystick.GetGuid(deviceIndex);

                Refresh();
            }
Пример #9
0
        static public string GetName(int device_index)
        {
            JoystickCapabilities capabilities = JoystickExtensions.GetCapabilities(device_index);

            return("Buttons: {0}, Axises: {1}, Hats: {2}".Inject(
                       capabilities.ButtonCount,
                       capabilities.AxisCount,
                       capabilities.HatCount
                       ));
        }
Пример #10
0
        private void CollectButtonStats()
        {
            JoystickCapabilities capabilities = Joystick.GetCapabilities(_index);

            ControllerInputId pressedButton;

            // Buttons
            for (int i = 0; i != capabilities.ButtonCount; i++)
            {
                if (_currState.IsButtonDown(i) && _prevState.IsButtonUp(i))
                {
                    Enum.TryParse($"Button{i}", out pressedButton);
                    _detector.AddInput(pressedButton, 1);
                }

                if (_currState.IsButtonUp(i) && _prevState.IsButtonDown(i))
                {
                    Enum.TryParse($"Button{i}", out pressedButton);
                    _detector.AddInput(pressedButton, -1);
                }
            }

            // Axis
            for (int i = 0; i != capabilities.AxisCount; i++)
            {
                float axisValue = _currState.GetAxis(i);

                Enum.TryParse($"Axis{i}", out pressedButton);
                _detector.AddInput(pressedButton, axisValue);
            }

            // Hats
            for (int i = 0; i != capabilities.HatCount; i++)
            {
                string currPos = GetHatPosition(_currState.GetHat((JoystickHat)i));
                string prevPos = GetHatPosition(_prevState.GetHat((JoystickHat)i));

                if (currPos == prevPos)
                {
                    continue;
                }

                if (currPos != "")
                {
                    Enum.TryParse($"Hat{i}{currPos}", out pressedButton);
                    _detector.AddInput(pressedButton, 1);
                }

                if (prevPos != "")
                {
                    Enum.TryParse($"Hat{i}{prevPos}", out pressedButton);
                    _detector.AddInput(pressedButton, -1);
                }
            }
        }
Пример #11
0
        /**
         * Determine if a controller is N64-like by expecting 4 axes and 10 or more buttons.
         * @param index The index of the controller.
         * @return Whether the controller is N64-like.
         */
        private static bool isN64Like(int index)
        {
            if (!GamePad.GetState(index).IsConnected)
            {
                return(false);
            }

            JoystickCapabilities cap = Joystick.GetCapabilities(index);

            return(cap.AxisCount == 4 && cap.ButtonCount >= 10);
        }
Пример #12
0
 /// <summary>
 /// Checks whether a joystick is an Unbalance controller.
 /// </summary>
 /// <param name="id">A string representing the vendor and product ID.</param>
 /// <param name="capabilities">the capabilities of the joystick.</param>
 /// <returns>Whether the controller is compatible.</returns>
 internal static bool IsCompatibleController(string id, JoystickCapabilities capabilities)
 {
     // DGC-255/DGOC-44U
     if (id == "0ae4:0003")
     {
         // DGC-255 has direction buttons
         hasDirectionButtons = capabilities.HatCount > 0;
         return(true);
     }
     return(false);
 }
Пример #13
0
        public string GetName(int index)
        {
            JoystickCapabilities joy = Joystick.GetCapabilities(index);
            string name = String.Empty;

            if (joy.IsConnected)
            {
                GamePadConfiguration map = GetConfiguration(Joystick.GetGuid(index));
                name = map.Name;
            }
            return(name);
        }
Пример #14
0
        public void UpdateState()
        {
            this.caps  = GamePad.GetCapabilities(this.deviceIndex);
            this.state = GamePad.GetState(this.deviceIndex);

            // If it's not a well-known gamepad, check the corresponding joystick whether there are any axes or buttons
            if (!this.caps.IsMapped)
            {
                JoystickCapabilities joystickCaps = Joystick.GetCapabilities(this.deviceIndex);
                this.hasAxesOrButtons = joystickCaps.AxisCount > 0 || joystickCaps.ButtonCount > 0 || joystickCaps.HatCount > 0;
            }
        }
Пример #15
0
        JoystickCapabilities IJoystickDriver2.GetCapabilities(int index)
        {
            JoystickCapabilities caps = new JoystickCapabilities();

            if (IsValid(index))
            {
                JoystickDevice <X11JoyDetails> js = sticks[index_to_stick[index]];
                caps = new JoystickCapabilities(
                    js.Axis.Count,
                    js.Button.Count,
                    0, // hats not supported by /dev/js
                    js.Details.State.IsConnected);
            }
            return(caps);
        }
Пример #16
0
        public void UpdateState()
        {
            // Retrieve the gamepads hardware GUID from the corresponding joystick device
            this.productId = Joystick.GetGuid(this.deviceIndex);

            this.productName = GamePad.GetName(this.deviceIndex);
            this.caps        = GamePad.GetCapabilities(this.deviceIndex);
            this.state       = GamePad.GetState(this.deviceIndex);

            // If it's not a well-known gamepad, check the corresponding joystick whether there are any axes or buttons
            if (!this.caps.IsMapped)
            {
                JoystickCapabilities joystickCaps = Joystick.GetCapabilities(this.deviceIndex);
                this.hasAxesOrButtons = joystickCaps.AxisCount > 0 || joystickCaps.ButtonCount > 0 || joystickCaps.HatCount > 0;
            }
        }
Пример #17
0
        public JoystickPanTiltController(IPanTiltMechanism panTiltMechanism)
            : base(panTiltMechanism)
        {
            _joystickIndex = 0;

            _capabilities = Joystick.GetCapabilities(_joystickIndex);
            if (_capabilities.IsConnected)
            {
                Log.InfoFormat(
                    "Joystick {0} connected. Axes.Count={1}, Buttons.Count={2}"
                    , _joystickIndex
                    , _capabilities.AxisCount
                    , _capabilities.ButtonCount);
            }

            MoveAbsolute(new PanTiltSetting {PanPercent = 50, TiltPercent = 50});
        }
Пример #18
0
        /// <summary>
        /// Gets the controller model.
        /// </summary>
        /// <param name="guid">The GUID of the joystick.</param>
        /// <param name="capabilities">The capabilities of the joystick.</param>
        internal static ControllerModels GetControllerModel(Guid guid, JoystickCapabilities capabilities)
        {
            string id = GetControllerID(guid);

            if (ControllerUnbalance.IsCompatibleController(id, capabilities))
            {
                // The controller is a USB controller by Unbalance
                return(ControllerModels.Unbalance);
            }
            if (ControllerClassic.IsCompatibleController(capabilities))
            {
                // The controller is a classic console controller
                return(ControllerModels.Classic);
            }
            // Unsupported controller
            return(ControllerModels.Unsupported);
        }
Пример #19
0
        public JoystickOpenTk(
            JoystickCapabilities capabilities,
            IButtonManager buttonManager)
        {
            this.axes_ = new MutableAxis[capabilities.AxisCount];
            for (var i = 0; i < this.axes_.Length; ++i)
            {
                this.axes_[i] = new MutableAxis();
            }
            this.Axes = this.axes_.ToImmutableArray <IAxis>();

            this.buttons_ = new IButtonImplementation[capabilities.ButtonCount];
            for (var i = 0; i < this.buttons_.Length; ++i)
            {
                this.buttons_[i] = buttonManager.New();
            }
            this.Buttons = this.buttons_.ToImmutableArray <IButton>();
        }
Пример #20
0
        public JoystickPanTiltController(IPanTiltMechanism panTiltMechanism) : base(panTiltMechanism)
        {
            _joystickIndex = 0;

            _capabilities = Joystick.GetCapabilities(_joystickIndex);
            if (_capabilities.IsConnected)
            {
                Log.InfoFormat(
                    "Joystick {0} connected. Axes.Count={1}, Buttons.Count={2}"
                    , _joystickIndex
                    , _capabilities.AxisCount
                    , _capabilities.ButtonCount);
            }

            MoveAbsolute(new PanTiltSetting {
                PanPercent = 50, TiltPercent = 50
            });
        }
Пример #21
0
        public Axis getAxis(JoystickCapabilities cap)
        {
            switch (cap)
            {
            case JoystickCapabilities.AXIS_X: return(this.AxisX);

            case JoystickCapabilities.AXIS_Y: return(this.AxisY);

            case JoystickCapabilities.AXIS_Z: return(this.AxisZ);

            case JoystickCapabilities.AXIS_RX: return(this.AxisXR);

            case JoystickCapabilities.AXIS_RY: return(this.AxisYR);

            case JoystickCapabilities.AXIS_RZ: return(this.AxisZR);

            default: return(null);
            }
        }
Пример #22
0
        private void AxisSettingComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            ExtendedComboBox     AxisSettingComboBox = sender as ExtendedComboBox;
            JoystickCapabilities data    = (JoystickCapabilities)AxisSettingComboBox.data;
            JoystickCapabilities nextCap = (JoystickCapabilities)Enum.Parse(typeof(JoystickCapabilities), AxisSettingComboBox.SelectedItem as string);
            AxisMap aMap = this.controller.Mappings
                           .OfType <AxisMap>()
                           .Where(x => x.inAxis == data)
                           .DefaultIfEmpty(null)
                           .FirstOrDefault();

            if (aMap != null)
            {
                aMap.SetOut(nextCap);
            }
            else
            {
                this.controller.Mappings.Add(new AxisMap(data, nextCap));
            }
        }
Пример #23
0
        static void Main(string[] args)
        {
            Console.WriteLine("[");
            for (int i = 0; i < MAX_CONTROLLERS; i++)
            {
                if (!isValidController(i))
                {
                    continue;
                }

                GamePadCapabilities  gamePadCap  = GamePad.GetCapabilities(i);
                JoystickCapabilities joystickCap = Joystick.GetCapabilities(i);
                if (!gamePadCap.IsConnected || !joystickCap.IsConnected)
                {
                    continue;
                }

                Console.WriteLine("    {");
                Console.WriteLine("        \"name\": \"" + GamePad.GetName(i) + "\",");
                Console.Write("        \"type\": ");
                if (isXboxLike(i))
                {
                    Console.WriteLine("\"xbox\",");
                }
                else if (isN64Like(i))
                {
                    Console.WriteLine("\"n64\",");
                }
                else if (GamePad.GetState(i).IsConnected)
                {
                    Console.WriteLine("\"other\",");
                }
                Console.WriteLine("        \"axes\": " + joystickCap.AxisCount + ",");
                Console.WriteLine("        \"buttons\": " + joystickCap.ButtonCount + ",");
                Console.WriteLine("        \"guid\": " + Joystick.GetGuid(i));
                Console.Write("    }");
                Console.WriteLine(
                    (i + 1 < MAX_CONTROLLERS && isValidController(i + 1)) ? "," : "");
            }
            Console.WriteLine("]");
        }
Пример #24
0
 private void updateDevices()
 {
     for (int i = 0; i < DEVICE_COUNT; i++)
     {
         JoystickCapabilities c = Joystick.GetCapabilities(i);
         if (c.IsConnected && c.ButtonCount + c.AxisCount + c.HatCount > 0)
         {
             // if the capabilities have changed, the device has changed, so record the new default state
             if (!deviceIsConnected[i] || !c.Equals(lastCapabilities[i]))
             {
                 firstState[i]       = Joystick.GetState(i);
                 lastCapabilities[i] = c;
             }
             deviceIsConnected[i] = true;
         }
         else
         {
             deviceIsConnected[i] = false;
         }
     }
 }
Пример #25
0
 /// <summary>
 /// Refreshes the connected controllers.
 /// </summary>
 public static void RefreshControllers()
 {
     for (int i = 0; i < 10; i++)
     {
         Guid guid = Joystick.GetGuid(i);
         if (!ConnectedControllers.ContainsKey(guid))
         {
             // New controller
             JoystickCapabilities capabilities = Joystick.GetCapabilities(i);
             ControllerModels     model        = GetControllerModel(guid, capabilities);
             if (Joystick.GetState(i).IsConnected&& model != ControllerModels.Unsupported)
             {
                 ConnectedControllers.Add(guid, i);
             }
         }
         else
         {
             // Update the controller index
             ConnectedControllers[guid] = i;
         }
     }
 }
Пример #26
0
        public GamePadCapabilities GetCapabilities(int index)
        {
            JoystickCapabilities joy = Joystick.GetCapabilities(index);
            GamePadCapabilities  pad;

            if (joy.IsConnected)
            {
                GamePadConfiguration configuration = GetConfiguration(Joystick.GetGuid(index));
                GamePadAxes          mapped_axes   = 0;
                Buttons mapped_buttons             = 0;

                foreach (GamePadConfigurationItem map in configuration)
                {
                    switch (map.Target.Type)
                    {
                    case ConfigurationType.Axis:
                        mapped_axes |= map.Target.Axis;
                        break;

                    case ConfigurationType.Button:
                        mapped_buttons |= map.Target.Button;
                        break;
                    }
                }

                pad = new GamePadCapabilities(
                    GamePadType.GamePad, // Todo: detect different types
                    mapped_axes,
                    mapped_buttons,
                    joy.IsConnected,
                    configuration.Name != GamePadConfigurationDatabase.UnmappedName);
            }
            else
            {
                pad = new GamePadCapabilities();
            }
            return(pad);
        }
Пример #27
0
        /// <summary>
        /// Gets the list of connected controllers
        /// </summary>
        /// <returns>The list of controllers handled by this class.</returns>
        internal static Dictionary <Guid, Controller> GetControllers()
        {
            for (int i = 0; i < 10; i++)
            {
                Guid   guid = Joystick.GetGuid(i);
                string id   = GetControllerID(guid);
                string name = Joystick.GetName(i);

                if (!cachedControllers.ContainsKey(guid))
                {
                    // A valid controller needs at least 12 buttons or 10 buttons plus a hat. If there are more than 20 buttons, the joystick is unlikely a valid controller.
                    JoystickCapabilities capabilities = Joystick.GetCapabilities(i);
                    if ((capabilities.ButtonCount >= 12 || (capabilities.ButtonCount >= 10 && capabilities.HatCount > 0)) && capabilities.ButtonCount <= 20)
                    {
                        ClassicController newcontroller = new ClassicController()
                        {
                            Guid           = guid,
                            Id             = id,
                            joystickIndex  = i,
                            ControllerName = name,
                            IsConnected    = true
                        };
                        cachedControllers.Add(guid, newcontroller);
                    }
                }
                else
                {
                    // Cached controller, update index
                    ((ClassicController)cachedControllers[guid]).joystickIndex = i;
                    // HACK: IsConnected is broken, we check the capabilities instead to know if the controller is connected or not
                    cachedControllers[guid].IsConnected = Joystick.GetCapabilities(i).ButtonCount > 0;
                }
            }

            return(cachedControllers);
        }
Пример #28
0
        JoystickCapabilities IJoystickDriver2.GetCapabilities(int index)
        {
            JoystickCapabilities caps = new JoystickCapabilities();
            if (IsValid(index))
            {
                JoystickDevice<LinuxJoyDetails> js = sticks[index_to_stick[index]];
                caps = new JoystickCapabilities(
                    js.Axis.Count,
                    js.Button.Count,
                    0, // hats not supported by /dev/js
                    js.Details.State.IsConnected,
					false);
            }
            return caps;
        }
Пример #29
0
 internal void SetCapabilities(JoystickCapabilities caps)
 {
     Capabilities = caps;
 }
Пример #30
0
 JoystickCapabilities IJoystickDriver2.GetCapabilities(int index)
 {
     JoystickCapabilities caps = new JoystickCapabilities();
     if (IsValid(index))
     {
         JoystickDevice<X11JoyDetails> js = sticks[index_to_stick[index]];
         caps = new JoystickCapabilities(
             js.Axis.Count, js.Button.Count, js.Details.State.IsConnected);
     }
     return caps;
 }
Пример #31
0
        JoystickDevice<WinMMJoyDetails> OpenJoystick(int number)
        {
            lock (sync)
            {
                JoystickDevice<WinMMJoyDetails> stick = null;

                JoyCaps caps;
                JoystickError result = UnsafeNativeMethods.joyGetDevCaps(number, out caps, JoyCaps.SizeInBytes);
                if (result == JoystickError.NoError)
                {
                    if (caps.NumAxes > JoystickState.MaxAxes)
                    {
                        Debug.Print("[Input] Device has {0} axes, which is higher than OpenTK maximum {1}. Please report a bug at http://www.opentk.com",
                            caps.NumAxes, JoystickState.MaxAxes);
                        caps.NumAxes = JoystickState.MaxAxes;
                    }

                    if (caps.NumAxes > JoystickState.MaxButtons)
                    {
                        Debug.Print("[Input] Device has {0} buttons, which is higher than OpenTK maximum {1}. Please report a bug at http://www.opentk.com",
                            caps.NumButtons, JoystickState.MaxButtons);
                        caps.NumButtons = JoystickState.MaxButtons;
                    }

                    JoystickCapabilities joycaps = new JoystickCapabilities(
                        caps.NumAxes,
                        caps.NumButtons,
                        (caps.Capabilities & JoystCapsFlags.HasPov) != 0 ? 1 : 0,
                        true);

                    int num_axes = caps.NumAxes;
                    if ((caps.Capabilities & JoystCapsFlags.HasPov) != 0)
                        num_axes += 2;

                    stick = new JoystickDevice<WinMMJoyDetails>(number, num_axes, caps.NumButtons);
                    stick.Details = new WinMMJoyDetails(joycaps);

                    // Make sure to reverse the vertical axes, so that +1 points up and -1 points down.
                    for (int axis = 0; axis < caps.NumAxes; axis++)
                    {
                        stick.Details.Min[axis] = caps.GetMin(axis);
                        stick.Details.Max[axis] = caps.GetMax(axis);
                    }

                    if ((caps.Capabilities & JoystCapsFlags.HasPov) != 0)
                    {
                        stick.Details.PovType = PovType.Exists;
                        if ((caps.Capabilities & JoystCapsFlags.HasPov4Dir) != 0)
                            stick.Details.PovType |= PovType.Discrete;
                        if ((caps.Capabilities & JoystCapsFlags.HasPovContinuous) != 0)
                            stick.Details.PovType |= PovType.Continuous;
                    }

                    // Todo: Implement joystick name detection for WinMM.
                    stick.Description = String.Format("Joystick/Joystick #{0} ({1} axes, {2} buttons)", number, stick.Axis.Count, stick.Button.Count);
                    // Todo: Try to get the device name from the registry. Oh joy!
                    //string key_path = String.Format("{0}\\{1}\\{2}", RegistryJoyConfig, caps.RegKey, RegstryJoyCurrent);
                    //RegistryKey key = Registry.LocalMachine.OpenSubKey(key_path, false);
                    //if (key == null)
                    //    key = Registry.CurrentUser.OpenSubKey(key_path, false);
                    //if (key == null)
                    //    stick.Description = String.Format("USB Joystick {0} ({1} axes, {2} buttons)", number, stick.Axis.Count, stick.Button.Count);
                    //else
                    //{
                    //    key.Close();
                    //}

                    Debug.Print("Found joystick on device number {0}", number);
                    index_to_stick.Add(number, sticks.Count);
                    player_to_index.Add(player_to_index.Count, number);
                    sticks.Add(stick);
                }

                return stick;
            }
        }
Пример #32
0
 internal void Update()
 {
     PreviousState = State;
     State = OpenTK.Input.Joystick.GetState(DeviceID);
     Capabilities = OpenTK.Input.Joystick.GetCapabilities(DeviceID);
 }
Пример #33
0
 public AxisMap(JoystickCapabilities inAxis, JoystickCapabilities outAxis)
 {
     this.inAxis  = inAxis;
     this.outAxis = outAxis;
 }
Пример #34
0
        public void Poll()
        {
            for (int i = 0; i < 4; i++)
            {
                JoystickCapabilities caps = Joystick.GetCapabilities(i);
                if (caps.IsConnected && joysticks[i].Description == DisconnectedName)
                {
                    // New joystick connected
                    joysticks[i] = new LegacyJoystickDevice(
                        i,
                        caps.AxisCount + 2 * caps.HatCount,
                        caps.ButtonCount);
                    //device.Description = Joystick.GetName(i);
                    joysticks[i].Description = ConnectedName;
                }
                else if (!caps.IsConnected && joysticks[i].Description != DisconnectedName)
                {
                    // Joystick disconnected
                    joysticks[i]             = new LegacyJoystickDevice(i, 0, 0);
                    joysticks[i].Description = DisconnectedName;
                }

                JoystickState state = Joystick.GetState(i);
                for (int axis_index = 0; axis_index < caps.AxisCount; axis_index++)
                {
                    JoystickAxis axis = JoystickAxis.Axis0 + axis_index;
                    joysticks[i].SetAxis(axis, state.GetAxis(axis));
                }
                for (int button_index = 0; button_index < caps.ButtonCount; button_index++)
                {
                    JoystickButton button = JoystickButton.Button0 + button_index;
                    joysticks[i].SetButton(button, state.GetButton(button) == ButtonState.Pressed);
                }
                for (int hat_index = 0; hat_index < caps.HatCount; hat_index++)
                {
                    // LegacyJoystickDriver report hats as pairs of axes
                    // Make sure we have enough axes left for this mapping
                    int axis_index = caps.AxisCount + 2 * hat_index;
                    if (axis_index < JoystickState.MaxAxes)
                    {
                        JoystickHat      hat       = JoystickHat.Hat0 + hat_index;
                        JoystickHatState hat_state = state.GetHat(hat);
                        JoystickAxis     axis      = JoystickAxis.Axis0 + axis_index;
                        float            x         = 0;
                        float            y         = 0;
                        if (hat_state.IsDown)
                        {
                            y--;
                        }
                        if (hat_state.IsUp)
                        {
                            y++;
                        }
                        if (hat_state.IsLeft)
                        {
                            x--;
                        }
                        if (hat_state.IsRight)
                        {
                            x++;
                        }

                        joysticks[i].SetAxis(axis, x);
                        joysticks[i].SetAxis(axis + 1, y);
                    }
                }
            }
        }
Пример #35
0
        JoystickDevice <WinMMJoyDetails> OpenJoystick(int number)
        {
            lock (sync)
            {
                JoystickDevice <WinMMJoyDetails> stick = null;

                JoyCaps       caps;
                JoystickError result = UnsafeNativeMethods.joyGetDevCaps(number, out caps, JoyCaps.SizeInBytes);
                if (result == JoystickError.NoError)
                {
                    if (caps.NumAxes > JoystickState.MaxAxes)
                    {
                        Debug.Print("[Input] Device has {0} axes, which is higher than OpenTK maximum {1}. Please report a bug at http://www.opentk.com",
                                    caps.NumAxes, JoystickState.MaxAxes);
                        caps.NumAxes = JoystickState.MaxAxes;
                    }

                    if (caps.NumAxes > JoystickState.MaxButtons)
                    {
                        Debug.Print("[Input] Device has {0} buttons, which is higher than OpenTK maximum {1}. Please report a bug at http://www.opentk.com",
                                    caps.NumButtons, JoystickState.MaxButtons);
                        caps.NumButtons = JoystickState.MaxButtons;
                    }

                    JoystickCapabilities joycaps = new JoystickCapabilities(
                        caps.NumAxes,
                        caps.NumButtons,
                        (caps.Capabilities & JoystCapsFlags.HasPov) != 0 ? 1 : 0,
                        true);

                    int num_axes = caps.NumAxes;
                    if ((caps.Capabilities & JoystCapsFlags.HasPov) != 0)
                    {
                        num_axes += 2;
                    }

                    stick         = new JoystickDevice <WinMMJoyDetails>(number, num_axes, caps.NumButtons);
                    stick.Details = new WinMMJoyDetails(joycaps);

                    // Make sure to reverse the vertical axes, so that +1 points up and -1 points down.
                    for (int axis = 0; axis < caps.NumAxes; axis++)
                    {
                        stick.Details.Min[axis] = caps.GetMin(axis);
                        stick.Details.Max[axis] = caps.GetMax(axis);
                    }

                    if ((caps.Capabilities & JoystCapsFlags.HasPov) != 0)
                    {
                        stick.Details.PovType = PovType.Exists;
                        if ((caps.Capabilities & JoystCapsFlags.HasPov4Dir) != 0)
                        {
                            stick.Details.PovType |= PovType.Discrete;
                        }
                        if ((caps.Capabilities & JoystCapsFlags.HasPovContinuous) != 0)
                        {
                            stick.Details.PovType |= PovType.Continuous;
                        }
                    }

                    // Todo: Implement joystick name detection for WinMM.
                    stick.Description = String.Format("Joystick/Joystick #{0} ({1} axes, {2} buttons)", number, stick.Axis.Count, stick.Button.Count);
                    // Todo: Try to get the device name from the registry. Oh joy!
                    //string key_path = String.Format("{0}\\{1}\\{2}", RegistryJoyConfig, caps.RegKey, RegstryJoyCurrent);
                    //RegistryKey key = Registry.LocalMachine.OpenSubKey(key_path, false);
                    //if (key == null)
                    //    key = Registry.CurrentUser.OpenSubKey(key_path, false);
                    //if (key == null)
                    //    stick.Description = String.Format("USB Joystick {0} ({1} axes, {2} buttons)", number, stick.Axis.Count, stick.Button.Count);
                    //else
                    //{
                    //    key.Close();
                    //}

                    Debug.Print("Found joystick on device number {0}", number);
                    index_to_stick.Add(number, sticks.Count);
                    player_to_index.Add(player_to_index.Count, number);
                    sticks.Add(stick);
                }

                return(stick);
            }
        }
Пример #36
0
 public WinMMJoyDetails(JoystickCapabilities caps)
     : this()
 {
     Min = new int[caps.AxisCount];
     Max = new int[caps.AxisCount];
     Capabilities = caps;
 }
Пример #37
0
 public JoystickCapabilities GetCapabilities()
 {
     Capabilities = new JoystickCapabilities(
         axes.Count, buttons.Count, hats.Count,
         Capabilities.IsConnected);
     return Capabilities;
 }
Пример #38
0
        public JoystickCapabilities GetCapabilities(int index)
        {
            if (IsValid(index))
            {
                JoyCaps mmcaps;
                JoystickError result = UnsafeNativeMethods.joyGetDevCaps(index, out mmcaps, JoyCaps.SizeInBytes);
                if (result == JoystickError.NoError)
                {
                    JoystickCapabilities caps = new JoystickCapabilities(
                        mmcaps.NumAxes, mmcaps.NumButtons, true);
                    //if ((caps.Capabilities & JoystCapsFlags.HasPov) != 0)
                    //    gpcaps.DPadCount++;
                    return caps;
                }
                else if (result == JoystickError.Unplugged)
                {
                    UnplugJoystick(index);
                }
            }
            else
            {
                Debug.Print("[Win] Invalid WinMM joystick device {0}", index);
            }

            return new JoystickCapabilities();
        }
Пример #39
0
        private static bool IsAnyButtonPressed(out ControllerInputId pressedButton, int index, double triggerThreshold)
        {
            JoystickState        joystickState        = Joystick.GetState(index);
            JoystickCapabilities joystickCapabilities = Joystick.GetCapabilities(index);

            //Buttons
            for (int i = 0; i != joystickCapabilities.ButtonCount; i++)
            {
                if (joystickState.IsButtonDown(i))
                {
                    Enum.TryParse($"Button{i}", out pressedButton);

                    return(true);
                }
            }

            //Axis
            for (int i = 0; i != joystickCapabilities.AxisCount; i++)
            {
                if (joystickState.GetAxis(i) > 0.5f && joystickState.GetAxis(i) > triggerThreshold)
                {
                    Enum.TryParse($"Axis{i}", out pressedButton);

                    return(true);
                }
            }

            //Hats
            for (int i = 0; i != joystickCapabilities.HatCount; i++)
            {
                JoystickHatState hatState = joystickState.GetHat((JoystickHat)i);
                string           pos      = null;

                if (hatState.IsUp)
                {
                    pos = "Up";
                }
                if (hatState.IsDown)
                {
                    pos = "Down";
                }
                if (hatState.IsLeft)
                {
                    pos = "Left";
                }
                if (hatState.IsRight)
                {
                    pos = "Right";
                }
                if (pos == null)
                {
                    continue;
                }

                Enum.TryParse($"Hat{i}{pos}", out pressedButton);

                return(true);
            }

            pressedButton = ControllerInputId.Unbound;

            return(false);
        }
Пример #40
0
		public void UpdateState()
		{
			this.caps = Joystick.GetCapabilities(this.deviceIndex);
			this.state = Joystick.GetState(this.deviceIndex);
		}