public void Users_CanRestrictBindingToAssignedInputDevices() { var gamepad1 = InputSystem.AddDevice <Gamepad>(); var gamepad2 = InputSystem.AddDevice <Gamepad>(); var gamepad3 = InputSystem.AddDevice <Gamepad>(); var map1 = new InputActionMap("map"); map1.AddAction("action").AddBinding("<Gamepad>/buttonSouth", groups: "Gamepad"); var map2 = map1.Clone(); var user1 = new TestUser(); var user2 = new TestUser(); InputUser.Add(user1); InputUser.Add(user2); user1.AssignInputDevice(gamepad1); user2.AssignInputDevice(gamepad2); user1.AssignInputActions(map1); user2.AssignInputActions(map2); // Have bound to everything available globally. Assert.That(map1["action"].controls, Is.EquivalentTo(new[] { gamepad1.buttonSouth, gamepad2.buttonSouth, gamepad3.buttonSouth })); Assert.That(map2["action"].controls, Is.EquivalentTo(new[] { gamepad1.buttonSouth, gamepad2.buttonSouth, gamepad3.buttonSouth })); user2.BindOnlyToAssignedInputDevices(); // Have bound only to currently assigned devices. Assert.That(map1["action"].controls, Is.EquivalentTo(new[] { gamepad1.buttonSouth, gamepad2.buttonSouth, gamepad3.buttonSouth })); Assert.That(map2["action"].controls, Is.EquivalentTo(new[] { gamepad2.buttonSouth })); user2.ClearAssignedInputDevices(); user2.AssignInputDevice(gamepad3); // Have updated bindings to reflect change in assigned devices. Assert.That(map1["action"].controls, Is.EquivalentTo(new[] { gamepad1.buttonSouth, gamepad2.buttonSouth, gamepad3.buttonSouth })); Assert.That(map2["action"].controls, Is.EquivalentTo(new[] { gamepad3.buttonSouth })); user2.BindOnlyToAssignedInputDevices(false); // Have gone back to binding to everything. Assert.That(map1["action"].controls, Is.EquivalentTo(new[] { gamepad1.buttonSouth, gamepad2.buttonSouth, gamepad3.buttonSouth })); Assert.That(map2["action"].controls, Is.EquivalentTo(new[] { gamepad1.buttonSouth, gamepad2.buttonSouth, gamepad3.buttonSouth })); }
public void Users_CanClearAssignedDevices() { var device = InputSystem.AddDevice <Gamepad>(); var user1 = new TestUser(); var user2 = new TestUser(); var user3 = new TestUser(); InputUser.Add(user1); InputUser.Add(user2); user1.AssignInputDevice(device); user1.ClearAssignedInputDevices(); user2.ClearAssignedInputDevices(); user3.ClearAssignedInputDevices(); Assert.That(user1.GetAssignedInputDevices(), Is.Empty); Assert.That(user2.GetAssignedInputDevices(), Is.Empty); Assert.That(user3.GetAssignedInputDevices(), Is.Empty); }
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 }