3 #if SILICONSTUDIO_PLATFORM_WINDOWS_DESKTOP
6 using System.Collections.Generic;
11 using SharpDX.DirectInput;
13 namespace SiliconStudio.
Paradox.Input
15 public partial class InputManager
20 private class DirectInputGamePadFactory : GamePadFactory
22 private readonly DirectInput directInput;
24 public DirectInputGamePadFactory()
26 directInput =
new DirectInput();
31 return directInput.GetDevices(DeviceClass.GameControl, DeviceEnumerationFlags.AllDevices).
Select(deviceInstance =>
new GamePadKey(deviceInstance.InstanceGuid,
this));
34 public override GamePad GetGamePad(Guid guid)
36 return new DirectInputGamePad(directInput,
new GamePadKey(guid,
this));
43 private class DirectInputGamePad :
GamePad
45 #region Constants and Fields
47 private readonly GamePadKey key;
49 private readonly DirectInput directInput;
51 private Joystick instance;
53 private JoystickState joystickState;
57 public DirectInputGamePad(DirectInput directInput, GamePadKey key) : base(key)
60 this.directInput = directInput;
61 this.instance =
new Joystick(directInput, key.Guid);
62 joystickState =
new JoystickState();
65 public override void Dispose()
74 public override GamePadState GetState()
76 var gamePadState =
new GamePadState();
83 if (directInput.IsDeviceAttached(key.Guid))
85 instance =
new Joystick(directInput, key.Guid);
100 instance.GetCurrentState(ref joystickState);
102 catch (SharpDX.SharpDXException)
107 if (instance != null)
122 gamePadState.IsConnected =
true;
124 gamePadState.Buttons = GamePadButton.None;
125 if (joystickState.Buttons[0])
127 gamePadState.Buttons |= GamePadButton.X;
129 if (joystickState.Buttons[1])
131 gamePadState.Buttons |= GamePadButton.A;
133 if (joystickState.Buttons[2])
135 gamePadState.Buttons |= GamePadButton.B;
137 if (joystickState.Buttons[3])
139 gamePadState.Buttons |= GamePadButton.Y;
141 if (joystickState.Buttons[4])
143 gamePadState.Buttons |= GamePadButton.LeftShoulder;
145 if (joystickState.Buttons[5])
147 gamePadState.Buttons |= GamePadButton.RightShoulder;
149 if (joystickState.Buttons[6])
151 gamePadState.LeftTrigger = 1.0f;
153 if (joystickState.Buttons[7])
155 gamePadState.RightTrigger = 1.0f;
158 if (joystickState.Buttons[8])
160 gamePadState.Buttons |= GamePadButton.Back;
162 if (joystickState.Buttons[9])
164 gamePadState.Buttons |= GamePadButton.Start;
167 if (joystickState.Buttons[10])
169 gamePadState.Buttons |= GamePadButton.LeftThumb;
171 if (joystickState.Buttons[11])
173 gamePadState.Buttons |= GamePadButton.RightThumb;
176 int dPadRawValue = joystickState.PointOfViewControllers[0];
177 if (dPadRawValue >= 0)
179 int dPadValue = dPadRawValue / 4500;
183 gamePadState.Buttons |= GamePadButton.PadUp;
186 gamePadState.Buttons |= GamePadButton.PadUp;
187 gamePadState.Buttons |= GamePadButton.PadRight;
190 gamePadState.Buttons |= GamePadButton.PadRight;
193 gamePadState.Buttons |= GamePadButton.PadRight;
194 gamePadState.Buttons |= GamePadButton.PadDown;
197 gamePadState.Buttons |= GamePadButton.PadDown;
200 gamePadState.Buttons |= GamePadButton.PadDown;
201 gamePadState.Buttons |= GamePadButton.PadLeft;
204 gamePadState.Buttons |= GamePadButton.PadLeft;
207 gamePadState.Buttons |= GamePadButton.PadLeft;
208 gamePadState.Buttons |= GamePadButton.PadUp;
214 gamePadState.LeftThumb =
new Vector2(2.0f * (joystickState.X / 65535.0f - 0.5f), -2.0f * (joystickState.Y / 65535.0f - 0.5f));
215 gamePadState.LeftThumb.X = ClampDeadZone(gamePadState.LeftThumb.X, GamePadAxisDeadZone);
216 gamePadState.LeftThumb.Y = ClampDeadZone(gamePadState.LeftThumb.Y, GamePadAxisDeadZone);
219 gamePadState.RightThumb =
new Vector2(2.0f * (joystickState.Z / 65535.0f - 0.5f), -2.0f * (joystickState.RotationZ / 65535.0f - 0.5f));
220 gamePadState.RightThumb.X = ClampDeadZone(gamePadState.RightThumb.X, GamePadAxisDeadZone);
221 gamePadState.RightThumb.Y = ClampDeadZone(gamePadState.RightThumb.Y, GamePadAxisDeadZone);
SiliconStudio.Paradox.Games.Mathematics.Vector2 Vector2