public void Users_CanAssignControlScheme_AndMaskOutBindingsFromOtherControlSchemes() { var gamepad = InputSystem.AddDevice <Gamepad>(); var gamepadScheme = new InputControlScheme("Gamepad") .WithRequiredDevice("<Gamepad>"); var map = new InputActionMap("map"); var action = map.AddAction("action"); action.AddBinding("<Gamepad>/buttonSouth", groups: "Gamepad"); action.AddBinding("<Mouse>/leftButton", groups: "KeyboardMouse"); var user = new TestUser(); InputUser.Add(user); // Trying to do it before we've assigned actions should throw. Assert.That(() => user.AssignControlScheme(gamepadScheme) .AndMaskBindingsFromOtherControlSchemes(), Throws.InvalidOperationException); user.AssignInputActions(map); user.AssignInputDevice(gamepad); user.AssignControlScheme(gamepadScheme) .AndMaskBindingsFromOtherControlSchemes(); Assert.That(action.controls, Is.EquivalentTo(new[] { gamepad.buttonSouth })); Assert.That(map.bindingMask, Is.EqualTo(new InputBinding { groups = "Gamepad" })); }
public void Users_CanAssignControlScheme() { var user = new TestUser(); Assert.That(user.GetControlScheme(), Is.Null); InputUser.Add(user); user.AssignControlScheme("scheme"); Assert.That(user.GetControlScheme(), Is.EqualTo(new InputControlScheme("scheme"))); user.AssignControlScheme(null); Assert.That(user.GetControlScheme(), Is.Null); }
public void Users_CanAssignControlScheme_AndAutomaticallyAssignMatchingUnusedDevices() { var keyboard = InputSystem.AddDevice <Keyboard>(); InputSystem.AddDevice <Mouse>(); // Noise. var gamepad1 = InputSystem.AddDevice <Gamepad>(); var gamepad2 = InputSystem.AddDevice <Gamepad>(); var gamepad3 = InputSystem.AddDevice <Gamepad>(); var singleGamepadScheme = new InputControlScheme("SingleGamepad") .WithRequiredDevice("<Gamepad>"); var dualGamepadScheme = new InputControlScheme("DualGamepad") .WithRequiredDevice("<Gamepad>") .WithRequiredDevice("<Gamepad>"); var user1 = new TestUser(); var user2 = new TestUser(); var user3 = new TestUser(); InputUser.Add(user1); InputUser.Add(user2); InputUser.Add(user3); user1.AssignInputDevice(keyboard); // Should automatically be unassigned. user3.AssignInputDevice(keyboard); // Should not be affected by any of what we do here. user1.AssignControlScheme(singleGamepadScheme).AndAssignDevices(); user2.AssignControlScheme(dualGamepadScheme).AndAssignDevices(); Assert.That(user1.GetAssignedInputDevices(), Is.EquivalentTo(new[] { gamepad1 })); Assert.That(user2.GetAssignedInputDevices(), Is.EquivalentTo(new[] { gamepad2, gamepad3 })); Assert.That(user3.GetAssignedInputDevices(), Is.EquivalentTo(new[] { keyboard })); }
public void Users_CanAssignControlScheme_AndAssignMissingDevices() { var gamepad1 = InputSystem.AddDevice <Gamepad>(); var gamepad2 = InputSystem.AddDevice <Gamepad>(); var gamepadScheme = new InputControlScheme("Gamepad") .WithRequiredDevice("<Gamepad>") .WithOptionalDevice("<Gamepad>"); var user = new TestUser(); InputUser.Add(user); user.AssignInputDevice(gamepad2); user.AssignControlScheme(gamepadScheme).AndAssignMissingDevices(); Assert.That(user.GetAssignedInputDevices(), Is.EquivalentTo(new[] { gamepad2, gamepad1 })); }
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 }