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(); } } }
public JoystickCapabilities GetCapabilities() { Capabilities = new JoystickCapabilities( axes.Count, buttons.Count, hats.Count, Capabilities.IsConnected); return(Capabilities); }
public WinMMJoyDetails(JoystickCapabilities caps) : this() { Min = new int[caps.AxisCount]; Max = new int[caps.AxisCount]; Capabilities = caps; }
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); }
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); } } }
/** * 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); }
/// <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); }
public JoystickDevice(int deviceIndex) { this.deviceIndex = deviceIndex; Capabilities = OpenTK.Input.Joystick.GetCapabilities(deviceIndex); Guid = OpenTK.Input.Joystick.GetGuid(deviceIndex); Refresh(); }
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 )); }
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); } } }
/** * 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); }
/// <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); }
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); }
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; } }
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); }
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; } }
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}); }
/// <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); }
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>(); }
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 }); }
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); } }
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)); } }
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("]"); }
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; } } }
/// <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; } } }
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); }
/// <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); }
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; }
internal void SetCapabilities(JoystickCapabilities caps) { Capabilities = caps; }
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; }
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; } }
internal void Update() { PreviousState = State; State = OpenTK.Input.Joystick.GetState(DeviceID); Capabilities = OpenTK.Input.Joystick.GetCapabilities(DeviceID); }
public AxisMap(JoystickCapabilities inAxis, JoystickCapabilities outAxis) { this.inAxis = inAxis; this.outAxis = outAxis; }
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); } } } }
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); } }
public JoystickCapabilities GetCapabilities() { Capabilities = new JoystickCapabilities( axes.Count, buttons.Count, hats.Count, Capabilities.IsConnected); return Capabilities; }
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(); }
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); }
public void UpdateState() { this.caps = Joystick.GetCapabilities(this.deviceIndex); this.state = Joystick.GetState(this.deviceIndex); }