Commit f61a89b
committed
NEW: Pen.isSupported, Mouse.isSupported and Touchscreen.isPressureSupported [ISX-2046]
Legacy UnityEngine.Input conflates "is X supported on this platform" with
"is an X present right now", and the Input System had no equivalent for the
first question at all. Input.stylusTouchSupported reports true on any iPad new
enough to pair an Apple Pencil, whether or not one is paired.
Input.mousePresent is genuine detection on Windows and the consoles but a
hardcoded true on macOS and Linux.
These three properties answer the capability question. Presence keeps its
existing answer, Device.current != null.
The queries go to the engine's system endpoint, which is addressed by a
reserved device id that is never registered, so it never appears in the device
list and no device can answer a question about the platform. That endpoint
lands separately in the engine repository under the same ticket.
Touch pressure is answered at platform scope rather than per touchscreen
because that is the scope at which the answer exists: every platform sources it
from a device model or an OS API property rather than by enumerating
digitizers. A per-instance property can be added later, preferring a per-device
answer over this one, without changing what is here.
The commands and the InputCapabilitySupport tristate are internal rather than
public, unlike the rest of the Commands folder. They target the system
endpoint, so there is no custom device for a user to answer them for, and
keeping them internal avoids freezing a capability model that the low level
input API is expected to revisit. The engine answers with a tristate whose
Unknown is zero, so an unimplemented query reads as "we do not know" rather
than a confident false; the public properties collapse anything other than
Supported to false.
Both the properties and the plumbing are gated on
UNITY_INPUTSYSTEM_SUPPORTS_CAPABILITY_QUERIES, so the API is absent rather than
present-and-always-false on engine versions that cannot answer. The version
expression is currently the local development engine and must be updated to
whichever version the engine side actually ships in.
ExecuteGlobalCommand is replaced by ExecuteSystemCommand. The former had no
callers, having been orphaned when UseWindowsGamingInputCommand was removed by
ISXB-927, and its premise was wrong: it addressed device id 0 on the assumption
that the engine routes such commands by FourCC alone, but InputDeviceIOCTL
resolves the id against the device registry and 0 is the invalid-device
sentinel, so nothing sent there could ever be answered.
Capabilities cannot change while the process runs, so each is queried at most
once. The cache lives on InputManager rather than in a static, so a domain
reload or a test installing a different runtime discards it without needing an
explicit reset hook.
Tests cover each state including Unknown, that the properties answer with no
device added, that a query is never delivered to a real device, that repeated
reads issue one command, that nothing answering reports false rather than
throwing, and that the enum values, the FourCC codes and the payload size all
agree with the engine's own constants.1 parent f2c8a0b commit f61a89b
17 files changed
Lines changed: 699 additions & 7 deletions
File tree
- Assets/Tests/InputSystem
- Packages/com.unity.inputsystem
- Documentation~
- InputSystem
- Runtime
- Devices
- Commands
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5895 | 5895 | | |
5896 | 5896 | | |
5897 | 5897 | | |
| 5898 | + | |
| 5899 | + | |
| 5900 | + | |
| 5901 | + | |
| 5902 | + | |
| 5903 | + | |
| 5904 | + | |
| 5905 | + | |
| 5906 | + | |
| 5907 | + | |
| 5908 | + | |
| 5909 | + | |
| 5910 | + | |
| 5911 | + | |
| 5912 | + | |
| 5913 | + | |
| 5914 | + | |
| 5915 | + | |
| 5916 | + | |
| 5917 | + | |
| 5918 | + | |
| 5919 | + | |
| 5920 | + | |
| 5921 | + | |
| 5922 | + | |
| 5923 | + | |
| 5924 | + | |
| 5925 | + | |
| 5926 | + | |
| 5927 | + | |
| 5928 | + | |
| 5929 | + | |
| 5930 | + | |
| 5931 | + | |
| 5932 | + | |
| 5933 | + | |
| 5934 | + | |
| 5935 | + | |
| 5936 | + | |
| 5937 | + | |
| 5938 | + | |
| 5939 | + | |
| 5940 | + | |
| 5941 | + | |
| 5942 | + | |
| 5943 | + | |
| 5944 | + | |
| 5945 | + | |
| 5946 | + | |
| 5947 | + | |
| 5948 | + | |
| 5949 | + | |
| 5950 | + | |
| 5951 | + | |
| 5952 | + | |
| 5953 | + | |
| 5954 | + | |
| 5955 | + | |
| 5956 | + | |
| 5957 | + | |
| 5958 | + | |
| 5959 | + | |
| 5960 | + | |
| 5961 | + | |
| 5962 | + | |
| 5963 | + | |
| 5964 | + | |
| 5965 | + | |
| 5966 | + | |
| 5967 | + | |
| 5968 | + | |
| 5969 | + | |
| 5970 | + | |
| 5971 | + | |
| 5972 | + | |
| 5973 | + | |
| 5974 | + | |
| 5975 | + | |
| 5976 | + | |
| 5977 | + | |
| 5978 | + | |
| 5979 | + | |
| 5980 | + | |
| 5981 | + | |
| 5982 | + | |
| 5983 | + | |
| 5984 | + | |
| 5985 | + | |
| 5986 | + | |
| 5987 | + | |
| 5988 | + | |
| 5989 | + | |
| 5990 | + | |
| 5991 | + | |
| 5992 | + | |
| 5993 | + | |
| 5994 | + | |
| 5995 | + | |
| 5996 | + | |
| 5997 | + | |
| 5998 | + | |
| 5999 | + | |
| 6000 | + | |
| 6001 | + | |
| 6002 | + | |
| 6003 | + | |
| 6004 | + | |
| 6005 | + | |
| 6006 | + | |
| 6007 | + | |
| 6008 | + | |
| 6009 | + | |
| 6010 | + | |
| 6011 | + | |
| 6012 | + | |
| 6013 | + | |
| 6014 | + | |
| 6015 | + | |
| 6016 | + | |
| 6017 | + | |
| 6018 | + | |
| 6019 | + | |
| 6020 | + | |
| 6021 | + | |
| 6022 | + | |
| 6023 | + | |
| 6024 | + | |
| 6025 | + | |
| 6026 | + | |
| 6027 | + | |
| 6028 | + | |
| 6029 | + | |
| 6030 | + | |
| 6031 | + | |
| 6032 | + | |
| 6033 | + | |
| 6034 | + | |
| 6035 | + | |
| 6036 | + | |
| 6037 | + | |
| 6038 | + | |
| 6039 | + | |
| 6040 | + | |
| 6041 | + | |
| 6042 | + | |
| 6043 | + | |
| 6044 | + | |
| 6045 | + | |
| 6046 | + | |
| 6047 | + | |
| 6048 | + | |
| 6049 | + | |
| 6050 | + | |
| 6051 | + | |
| 6052 | + | |
| 6053 | + | |
| 6054 | + | |
| 6055 | + | |
| 6056 | + | |
| 6057 | + | |
| 6058 | + | |
| 6059 | + | |
| 6060 | + | |
| 6061 | + | |
5898 | 6062 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
81 | 81 | | |
82 | 82 | | |
83 | 83 | | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
84 | 89 | | |
85 | 90 | | |
86 | 91 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
10 | 29 | | |
11 | 30 | | |
12 | 31 | | |
| |||
Lines changed: 27 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
70 | 93 | | |
71 | 94 | | |
72 | 95 | | |
| |||
77 | 100 | | |
78 | 101 | | |
79 | 102 | | |
80 | | - | |
| 103 | + | |
81 | 104 | | |
82 | 105 | | |
83 | 106 | | |
84 | 107 | | |
85 | 108 | | |
86 | 109 | | |
87 | | - | |
| 110 | + | |
88 | 111 | | |
89 | | - | |
| 112 | + | |
90 | 113 | | |
91 | 114 | | |
92 | | - | |
| 115 | + | |
93 | 116 | | |
94 | 117 | | |
95 | 118 | | |
| |||
0 commit comments