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,
*/
}
}