using UnityEngine.InputSystem.LowLevel; ////REVIEW: how do we handle the case where the OS may (through whatever means) recognize individual real-world users, //// associate a user account with each one, and recognize when a controller is passed from one user to the other? //// (NUI on Xbox probably gives us that scenario) namespace UnityEngine.InputSystem.Users { /// /// Indicates what type of change related to an occurred. /// /// public enum InputUserChange { /// /// A new user was added to the system. /// /// Added, /// /// An existing user was removed from the user. /// /// /// s are only removed when explicitly requested (). /// /// Removed, /// /// A user has had a device assigned to it. /// /// /// DevicePaired, /// /// A user has had a device removed from it. /// /// /// This is different from in that the removal is intentional. /// instead indicates that the device was removed due to causes outside of the control of the application (such /// as battery loss) whereas DeviceUnpaired indicates the device was removed from the user under the control of /// the application itself. /// /// /// /// DeviceUnpaired, /// /// A device was removed while paired to the user. /// /// /// This scenario happens on battery loss, for example. /// /// Note that there is still a change sent when the device is subsequently removed /// from the user. /// /// /// DeviceLost, ////REVIEW: should we tie this to the specific device requirement slot in the control scheme? /// /// A device that was previously lost () was regained by the user. /// /// /// This can happen, for example, when a gamepad runs out of battery and is then plugged in by wire. /// /// Note that a device may be permanently lost and instead be replaced by a different device. /// /// DeviceRegained, /// /// A user has either switched accounts at the platform level. /// /// /// This means that the user is now playing with a different user account. This is relevant for persisting /// settings as well as for features such as achievements. /// /// This is detected via s. If a device is currently paired to a user /// but then notifies that its configuration has changed and the platform user we have on record for the /// device is no longer the same, this notification is sent after the platform user data ( /// and related APIs) has been updated. /// /// In response, the application may want to update the user name displayed in the UI. When displaying user /// profile images, an updated image should also be requested from the platform APIs using the user account /// information obtained from . /// /// Note that the notification may also mean that the device is no longer associated with a user account. /// In that case will be invalid. /// /// /// /// AccountChanged, AccountNameChanged, /// /// The user was asked to select an account during the device pairing process. /// /// /// In most cases, it makes sense to pause the game while account picking is in progress. /// AccountSelectionInProgress, /// /// The user canceled the account selection process that was initiated. /// AccountSelectionCanceled, /// /// The user completed the account selection process. /// /// /// Like , this means that the account details may have changed. /// AccountSelectionComplete, ////REVIEW: send notifications about the matching status of the control scheme? maybe ControlSchemeActivated, ControlSchemeDeactivated, //// and ControlSchemeChanged? /// /// A user switched to a different control scheme. /// /// /// ControlSchemeChanged, /// /// A user's bound controls have changed, either because the bindings of the user have changed (for example, /// due to an override applied with ) /// or because the controls themselves may have changed configuration (every time the device of the controls receives /// an ; for example, when the current keyboard layout on a /// changes which in turn modifies the s of the keys on the keyboard). /// ControlsChanged, /* ////TODO: this is waiting for InputUserSettings /// /// A setting in the user's has changed. /// /// /// This is separate from even though bindings are part of user profiles /// (). The reason is that binding changes often require /// SettingsChanged, */ } }