public void Users_CanBeMonitoredForChanges() { InputUser.Add(new TestUser()); // Noise. InputUser.Add(new TestUser()); // Noise. var user = new TestUser(); IInputUser receivedUser = null; InputUserChange?receivedChange = null; InputUser.onChange += (usr, change) => { Assert.That(receivedChange == null); receivedUser = usr; receivedChange = change; }; // Added. InputUser.Add(user); Assert.That(receivedUser, Is.SameAs(user)); Assert.That(receivedChange, Is.EqualTo(InputUserChange.Added)); receivedUser = null; receivedChange = null; // NameChanged. user.SetUserName("NewName"); Assert.That(receivedUser, Is.SameAs(user)); Assert.That(receivedChange, Is.EqualTo(InputUserChange.NameChanged)); receivedUser = null; receivedChange = null; // HandleChanged. user.SetUserHandle(new InputUserHandle("test", 1)); Assert.That(receivedUser, Is.SameAs(user)); Assert.That(receivedChange, Is.EqualTo(InputUserChange.HandleChanged)); receivedUser = null; receivedChange = null; // Same name, no notification. user.SetUserName("NewName"); Assert.That(receivedChange, Is.Null); // DevicesChanged. var device = InputSystem.AddDevice <Gamepad>(); user.AssignInputDevice(device); Assert.That(receivedUser, Is.SameAs(user)); Assert.That(receivedChange, Is.EqualTo(InputUserChange.DevicesChanged)); receivedUser = null; receivedChange = null; // Same device, no notification. user.AssignInputDevice(device); Assert.That(receivedChange, Is.Null); // DevicesChanges, removed. user.ClearAssignedInputDevices(); Assert.That(receivedUser, Is.SameAs(user)); Assert.That(receivedChange, Is.EqualTo(InputUserChange.DevicesChanged)); receivedUser = null; receivedChange = null; // ControlSchemeChanged. user.AssignControlScheme("gamepad"); Assert.That(receivedUser, Is.SameAs(user)); Assert.That(receivedChange, Is.EqualTo(InputUserChange.ControlSchemeChanged)); receivedUser = null; receivedChange = null; // Same control scheme, no notification. user.AssignControlScheme("gamepad"); Assert.That(receivedChange, Is.Null); // Removed. InputUser.Remove(user); Assert.That(receivedUser, Is.SameAs(user)); Assert.That(receivedChange, Is.EqualTo(InputUserChange.Removed)); ////TODO: actions ////TODO: activate, passivate }
public void Users_CanDetectWhenUnassignedDeviceIsUsed() { var gamepad1 = InputSystem.AddDevice <Gamepad>(); var gamepad2 = InputSystem.AddDevice <Gamepad>(); var gamepad3 = InputSystem.AddDevice <Gamepad>(); var asset = ScriptableObject.CreateInstance <InputActionAsset>(); var map = new InputActionMap("map"); asset.AddActionMap(map); var actionAssignedToUser = map.AddAction("action", binding: "<Gamepad>/buttonSouth"); actionAssignedToUser.Enable(); var actionNotAssignedToUser = new InputAction(binding: "<Gamepad>/buttonNorth"); actionNotAssignedToUser.Enable(); var user = new TestUser(); InputUser.Add(user); // Noise. InputUser.Add(new TestUser()); InputUser.all[1].AssignInputDevice(gamepad3); IInputUser receivedUser = null; InputAction receivedAction = null; InputControl receivedControl = null; InputUser.onUnassignedDeviceUsed += (u, a, c) => { Assert.That(receivedUser, Is.Null); receivedUser = u; receivedAction = a; receivedControl = c; }; user.AssignInputActions(asset); user.AssignInputDevice(gamepad1); // No callback if using gamepad1. InputSystem.QueueStateEvent(gamepad1, new GamepadState().WithButton(GamepadButton.South)); InputSystem.Update(); Assert.That(receivedUser, Is.Null); Assert.That(receivedAction, Is.Null); Assert.That(receivedControl, Is.Null); // Callback when using gamepad2. InputSystem.QueueStateEvent(gamepad2, new GamepadState().WithButton(GamepadButton.South)); InputSystem.Update(); Assert.That(receivedUser, Is.SameAs(user)); Assert.That(receivedAction, Is.SameAs(actionAssignedToUser)); Assert.That(receivedControl, Is.SameAs(gamepad2.buttonSouth)); receivedUser = null; receivedControl = null; receivedAction = null; // No callback when triggering action not assigned to user. InputSystem.QueueStateEvent(gamepad1, new GamepadState().WithButton(GamepadButton.North)); InputSystem.Update(); Assert.That(receivedUser, Is.Null); Assert.That(receivedAction, Is.Null); Assert.That(receivedControl, Is.Null); }