Skip to content

Commit 3d85e53

Browse files
committed
Set left and right sticks default state to avoid test failures
The default state for zero value of sticks was not being set through default state. We only set a defaultState if there's at least a control with defaultState set. Otherwise, we seem to be bypassing it. For some reason, it seems we were deriving the default state of the sticks through the parameters control have but I cannot say for sure without spending much more time on this.
1 parent f8d8270 commit 3d85e53

File tree

2 files changed

+32
-20
lines changed

2 files changed

+32
-20
lines changed

Assets/Tests/InputSystem/Plugins/XInputTests.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using UnityEngine.InputSystem.Layouts;
66
using UnityEngine.InputSystem.Utilities;
77
using System.Runtime.InteropServices;
8+
using UnityEngine.InputSystem.Controls;
89
using UnityEngine.InputSystem.HID;
910
using UnityEngine.InputSystem.Processors;
1011

@@ -208,7 +209,7 @@ public void Devices_SupportWirelessXboxOneAndSeriesControllerOnOSX(int vendorId,
208209
}
209210

210211
// Disable tests in standalone builds from 2022.1+ see UUM-19622
211-
#if !UNITY_STANDALONE_OSX || !TEMP_DISABLE_STANDALONE_OSX_XINPUT_TEST
212+
// #if !UNITY_STANDALONE_OSX || !TEMP_DISABLE_STANDALONE_OSX_XINPUT_TEST
212213
[Test]
213214
[Category("Devices")]
214215
public void Devices_SupportXboxWirelessControllerOnOSX()
@@ -242,6 +243,8 @@ public void Devices_SupportXboxWirelessControllerOnOSX()
242243

243244
InputSystem.Update();
244245

246+
Assert.That(gamepad.leftStick.x.IsActuated());
247+
245248
Assert.That(gamepad.leftStick.x.ReadValue(), Is.EqualTo(0.9999).Within(0.001));
246249
Assert.That(gamepad.leftStick.y.ReadValue(), Is.EqualTo(0.9999).Within(0.001));
247250
Assert.That(gamepad.leftStick.up.ReadValue(), Is.EqualTo(0.9999).Within(0.001));
@@ -268,10 +271,17 @@ public void Devices_SupportXboxWirelessControllerOnOSX()
268271
AssertButtonPress(gamepad, XInputControllerWirelessOSXState.defaultState.WithButton(XInputControllerWirelessOSXState.Button.Y), gamepad.yButton);
269272
AssertButtonPress(gamepad, XInputControllerWirelessOSXState.defaultState.WithButton(XInputControllerWirelessOSXState.Button.Y), gamepad.buttonNorth);
270273

271-
AssertButtonPress(gamepad, XInputControllerWirelessOSXState.defaultState.WithDpad(5), gamepad.dpad.down);
272274
AssertButtonPress(gamepad, XInputControllerWirelessOSXState.defaultState.WithDpad(1), gamepad.dpad.up);
273-
AssertButtonPress(gamepad, XInputControllerWirelessOSXState.defaultState.WithDpad(7), gamepad.dpad.left);
275+
AssertButtonPress(gamepad, XInputControllerWirelessOSXState.defaultState.WithDpad(2), gamepad.dpad.up, gamepad.dpad.right);
274276
AssertButtonPress(gamepad, XInputControllerWirelessOSXState.defaultState.WithDpad(3), gamepad.dpad.right);
277+
AssertButtonPress(gamepad, XInputControllerWirelessOSXState.defaultState.WithDpad(4), gamepad.dpad.down, gamepad.dpad.right);
278+
AssertButtonPress(gamepad, XInputControllerWirelessOSXState.defaultState.WithDpad(5), gamepad.dpad.down);
279+
AssertButtonPress(gamepad, XInputControllerWirelessOSXState.defaultState.WithDpad(6), gamepad.dpad.down, gamepad.dpad.left);
280+
AssertButtonPress(gamepad, XInputControllerWirelessOSXState.defaultState.WithDpad(7), gamepad.dpad.left);
281+
AssertButtonPress(gamepad, XInputControllerWirelessOSXState.defaultState.WithDpad(8), gamepad.dpad.up, gamepad.dpad.left);
282+
// No Dpad button pressed when the value is 0
283+
AssertButtonPress(gamepad, XInputControllerWirelessOSXState.defaultState.WithDpad(0));
284+
275285

276286
AssertButtonPress(gamepad, XInputControllerWirelessOSXState.defaultState.WithButton(XInputControllerWirelessOSXState.Button.LeftThumbstickPress), gamepad.leftStickButton);
277287
AssertButtonPress(gamepad, XInputControllerWirelessOSXState.defaultState.WithButton(XInputControllerWirelessOSXState.Button.RightThumbstickPress), gamepad.rightStickButton);
@@ -306,7 +316,7 @@ public void Devices_SupportXboxWirelessControllerOnOSX()
306316

307317
#endif // TEMP_DISABLE_STANDALONE_OSX_XINPUT_TEST
308318

309-
#endif
319+
// #endif
310320

311321

312322
#if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN || UNITY_WSA

Packages/com.unity.inputsystem/InputSystem/Plugins/XInput/XboxGamepadMacOS.cs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ public XInputControllerOSXState WithButton(Button button)
106106
[StructLayout(LayoutKind.Explicit)]
107107
internal struct XInputControllerWirelessOSXState : IInputStateTypeInfo
108108
{
109+
const ushort k_StickZeroValue = 32767;
109110
public static FourCC kFormat => new FourCC('H', 'I', 'D');
110111

111112
public enum Button
@@ -125,20 +126,20 @@ public enum Button
125126
private byte padding;
126127

127128
[InputControl(name = "leftStick", layout = "Stick", format = "VC2S")]
128-
[InputControl(name = "leftStick/x", offset = 0, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5")]
129+
[InputControl(name = "leftStick/x", offset = 0, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5", defaultState = k_StickZeroValue)]
129130
[InputControl(name = "leftStick/left", offset = 0, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5,clamp=1,clampMin=0,clampMax=0.5,invert")]
130131
[InputControl(name = "leftStick/right", offset = 0, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5,clamp=1,clampMin=0.5,clampMax=1")]
131-
[InputControl(name = "leftStick/y", offset = 2, format = "USHT", parameters = "invert,normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5")]
132+
[InputControl(name = "leftStick/y", offset = 2, format = "USHT", parameters = "invert,normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5", defaultState = k_StickZeroValue)]
132133
[InputControl(name = "leftStick/up", offset = 2, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5,clamp=1,clampMin=0,clampMax=0.5,invert")]
133134
[InputControl(name = "leftStick/down", offset = 2, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5,clamp=1,clampMin=0.5,clampMax=1,invert=false")]
134135
[FieldOffset(1)] public ushort leftStickX;
135136
[FieldOffset(3)] public ushort leftStickY;
136137

137138
[InputControl(name = "rightStick", layout = "Stick", format = "VC2S")]
138-
[InputControl(name = "rightStick/x", offset = 0, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5")]
139+
[InputControl(name = "rightStick/x", offset = 0, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5", defaultState = k_StickZeroValue)]
139140
[InputControl(name = "rightStick/left", offset = 0, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5,clamp=1,clampMin=0,clampMax=0.5,invert")]
140141
[InputControl(name = "rightStick/right", offset = 0, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5,clamp=1,clampMin=0.5,clampMax=1")]
141-
[InputControl(name = "rightStick/y", offset = 2, format = "USHT", parameters = "invert,normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5")]
142+
[InputControl(name = "rightStick/y", offset = 2, format = "USHT", parameters = "invert,normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5", defaultState = k_StickZeroValue)]
142143
[InputControl(name = "rightStick/up", offset = 2, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5,clamp=1,clampMin=0,clampMax=0.5,invert")]
143144
[InputControl(name = "rightStick/down", offset = 2, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5,clamp=1,clampMin=0.5,clampMax=1,invert=false")]
144145
[FieldOffset(5)] public ushort rightStickX;
@@ -188,16 +189,17 @@ public XInputControllerWirelessOSXState WithDpad(byte value)
188189

189190
public static XInputControllerWirelessOSXState defaultState => new XInputControllerWirelessOSXState
190191
{
191-
rightStickX = 32767,
192-
rightStickY = 32767,
193-
leftStickX = 32767,
194-
leftStickY = 32767
192+
rightStickX = k_StickZeroValue,
193+
rightStickY = k_StickZeroValue,
194+
leftStickX = k_StickZeroValue,
195+
leftStickY = k_StickZeroValue
195196
};
196197
}
197198

198199
[StructLayout(LayoutKind.Explicit)]
199200
internal struct XInputControllerWirelessOSXStateV2 : IInputStateTypeInfo
200201
{
202+
const ushort k_StickZeroValue = 32767;
201203
public static FourCC kFormat => new FourCC('H', 'I', 'D');
202204

203205
public enum Button
@@ -217,20 +219,20 @@ public enum Button
217219
private byte padding;
218220

219221
[InputControl(name = "leftStick", layout = "Stick", format = "VC2S")]
220-
[InputControl(name = "leftStick/x", offset = 0, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5")]
222+
[InputControl(name = "leftStick/x", offset = 0, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5", defaultState = k_StickZeroValue)]
221223
[InputControl(name = "leftStick/left", offset = 0, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5,clamp=1,clampMin=0,clampMax=0.5,invert")]
222224
[InputControl(name = "leftStick/right", offset = 0, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5,clamp=1,clampMin=0.5,clampMax=1")]
223-
[InputControl(name = "leftStick/y", offset = 2, format = "USHT", parameters = "invert,normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5")]
225+
[InputControl(name = "leftStick/y", offset = 2, format = "USHT", parameters = "invert,normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5", defaultState = k_StickZeroValue)]
224226
[InputControl(name = "leftStick/up", offset = 2, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5,clamp=1,clampMin=0,clampMax=0.5,invert")]
225227
[InputControl(name = "leftStick/down", offset = 2, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5,clamp=1,clampMin=0.5,clampMax=1,invert=false")]
226228
[FieldOffset(1)] public ushort leftStickX;
227229
[FieldOffset(3)] public ushort leftStickY;
228230

229231
[InputControl(name = "rightStick", layout = "Stick", format = "VC2S")]
230-
[InputControl(name = "rightStick/x", offset = 0, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5")]
232+
[InputControl(name = "rightStick/x", offset = 0, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5", defaultState = k_StickZeroValue)]
231233
[InputControl(name = "rightStick/left", offset = 0, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5,clamp=1,clampMin=0,clampMax=0.5,invert")]
232234
[InputControl(name = "rightStick/right", offset = 0, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5,clamp=1,clampMin=0.5,clampMax=1")]
233-
[InputControl(name = "rightStick/y", offset = 2, format = "USHT", parameters = "invert,normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5")]
235+
[InputControl(name = "rightStick/y", offset = 2, format = "USHT", parameters = "invert,normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5", defaultState = k_StickZeroValue)]
234236
[InputControl(name = "rightStick/up", offset = 2, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5,clamp=1,clampMin=0,clampMax=0.5,invert")]
235237
[InputControl(name = "rightStick/down", offset = 2, format = "USHT", parameters = "normalize,normalizeMin=0,normalizeMax=1,normalizeZero=0.5,clamp=1,clampMin=0.5,clampMax=1,invert=false")]
236238
[FieldOffset(5)] public ushort rightStickX;
@@ -280,10 +282,10 @@ public XInputControllerWirelessOSXStateV2 WithDpad(byte value)
280282

281283
public static XInputControllerWirelessOSXStateV2 defaultState => new XInputControllerWirelessOSXStateV2
282284
{
283-
rightStickX = 32767,
284-
rightStickY = 32767,
285-
leftStickX = 32767,
286-
leftStickY = 32767
285+
rightStickX = k_StickZeroValue,
286+
rightStickY = k_StickZeroValue,
287+
leftStickX = k_StickZeroValue,
288+
leftStickY = k_StickZeroValue
287289
};
288290
}
289291
}

0 commit comments

Comments
 (0)