예제 #1
0
    public void Remote_RemovingDevice_WillRemoveItFromRemotes()
    {
        var gamepad = InputSystem.AddDevice <Gamepad>();

        using (var remote = new FakeRemote())
        {
            Assert.That(remote.manager.devices.Count, Is.EqualTo(1));

            InputSystem.RemoveDevice(gamepad);

            Assert.That(remote.manager.devices.Count, Is.Zero);
        }
    }
예제 #2
0
    public void Remote_ExistingDevicesAreSentToRemotes_WhenStartingToSend()
    {
        InputSystem.AddDevice <Gamepad>();
        InputSystem.AddDevice <Keyboard>();

        using (var remote = new FakeRemote())
        {
            Assert.That(remote.manager.devices, Has.Count.EqualTo(2));
            Assert.That(remote.manager.devices, Has.Exactly(1).TypeOf <Gamepad>().With.Property("layout").EqualTo("Gamepad"));
            Assert.That(remote.manager.devices, Has.Exactly(1).TypeOf <Keyboard>().With.Property("layout").EqualTo("Keyboard"));
            Assert.That(remote.manager.devices, Has.All.With.Property("remote").True);
        }
    }
    public void Remote_SettingUsageOnDevice_WillSendChangeToRemotes()
    {
        var gamepad = InputSystem.AddDevice("Gamepad");

        using (var remote = new FakeRemote())
        {
            var remoteGamepad = (Gamepad)remote.manager.devices[0];
            Assert.That(remoteGamepad.usages, Has.Count.Zero);

            InputSystem.SetUsage(gamepad, CommonUsages.LeftHand);

            Assert.That(remoteGamepad.usages, Has.Exactly(1).EqualTo(CommonUsages.LeftHand));
        }
    }
예제 #4
0
    public void Remote_DevicesWithExistingUsage_WillUpdateSendToRemote()
    {
        var gamepad = InputSystem.AddDevice <Gamepad>();

        InputSystem.SetDeviceUsage(gamepad, CommonUsages.LeftHand);
        InputSystem.AddDeviceUsage(gamepad, CommonUsages.RightHand);

        using (var remote = new FakeRemote())
        {
            var remoteGamepad = (Gamepad)remote.remoteManager.devices[0];
            Assert.That(remoteGamepad.usages, Has.Count.EqualTo(2));
            Assert.That(remoteGamepad.usages, Has.Exactly(1).EqualTo(CommonUsages.LeftHand));
            Assert.That(remoteGamepad.usages, Has.Exactly(1).EqualTo(CommonUsages.RightHand));
        }
    }
예제 #5
0
    public void Remote_AddingNewControlLayout_WillSendLayoutToRemotes()
    {
        using (var remote = new FakeRemote())
        {
            InputSystem.RegisterLayout(@"{ ""name"" : ""MyGamepad"", ""extend"" : ""Gamepad"" }");
            InputSystem.AddDevice("MyGamepad");

            var layouts = remote.manager.ListControlLayouts().ToList();

            Assert.That(layouts, Has.Exactly(1).EqualTo("MyGamepad"));
            Assert.That(remote.manager.devices, Has.Exactly(1).With.Property("layout").EqualTo("MyGamepad").And.TypeOf <Gamepad>());
            Assert.That(remote.manager.TryLoadControlLayout(new InternedString("MyGamepad")),
                        Is.Not.Null.And.With.Property("baseLayouts").EquivalentTo(new[] { new InternedString("Gamepad") }));
        }
    }
예제 #6
0
    public void Remote_EventsAreSentToRemotes()
    {
        var gamepad = InputSystem.AddDevice <Gamepad>();

        using (var remote = new FakeRemote())
        {
            Set(gamepad.leftTrigger, 0.5f, time: 0.1234);

            // Make second input manager process the events it got.
            // NOTE: This will also switch the system to the state buffers from the second input manager.
            remote.remoteManager.Update();

            var remoteGamepad = (Gamepad)remote.remoteManager.devices[0];

            Assert.That(remoteGamepad.leftTrigger.ReadValue(), Is.EqualTo(0.5).Within(0.0000001));
            Assert.That(remoteGamepad.lastUpdateTime, Is.EqualTo(0.1234).Within(0.000001));
        }
    }
예제 #7
0
    public void Remote_OnlyGeneratedLayoutsAreSentToRemotes()
    {
        // Register "normal" layout.
        InputSystem.RegisterLayout(@"
            {
                ""name"" : ""TestLayout_NOT_GENERATED"",
                ""extend"" : ""Gamepad"",
                ""controls"" : [
                    { ""name"" : ""newButton"", ""layout"" : ""Button"" }
                ]
            }
        ");

        // Register generated layout.
        InputSystem.RegisterLayoutBuilder(() =>
        {
            var builder = new InputControlLayout.Builder()
                          .WithType <MyDevice>();
            builder.AddControl("MyControl")
            .WithLayout("Button");

            return(builder.Build());
        }, "TestLayout_GENERATED");

        using (var remote = new FakeRemote())
        {
            Assert.That(remote.remoteManager.ListControlLayouts(), Has.None.EqualTo("TestLayout_NOT_GENERATED"));   // Not remoted.
            Assert.That(remote.remoteManager.ListControlLayouts(), Has.Exactly(1).EqualTo("TestLayout_GENERATED")); // Remoted.

            // Make sure we do not remote "normal" layouts.
            Assert.That(remote.remoteManager.ListControlLayouts(),
                        Has.None.Matches((string s) => s.StartsWith("Remote::") && s.EndsWith("Gamepad")));

            // Add a device using the layout builder.
            InputSystem.AddDevice("TestLayout_GENERATED");

            Assert.That(remote.remoteManager.devices, Has.Count.EqualTo(1));
            Assert.That(remote.remoteManager.devices[0].layout, Is.EqualTo("TestLayout_GENERATED"));
            Assert.That(remote.remoteManager.devices[0].remote, Is.True);

            // Register another "normal" layout.
            InputSystem.RegisterLayout(@"
                {
                    ""name"" : ""OtherLayout_NOT_GENERATED"",
                    ""extend"" : ""Gamepad"",
                    ""controls"" : [
                        { ""name"" : ""newButton"", ""layout"" : ""Button"" }
                    ]
                }
            ");

            Assert.That(remote.remoteManager.ListControlLayouts(), Has.None.EqualTo("OtherLayout_NOT_GENERATED")); // Not remoted.

            // Register another generated layout.
            InputSystem.RegisterLayoutBuilder(() =>
            {
                var builder = new InputControlLayout.Builder()
                              .WithType <MyDevice>();
                builder.AddControl("MyControl")
                .WithLayout("Button");

                return(builder.Build());
            }, "OtherLayout_GENERATED");

            Assert.That(remote.remoteManager.ListControlLayouts(), Has.Exactly(1).EqualTo("OtherLayout_GENERATED")); // Remoted.

            // Remove the two layouts we just added. Shouldn't make a difference
            // on the remote.
            InputSystem.RemoveLayout("OtherLayout_GENERATED");
            InputSystem.RemoveLayout("OtherLayout_NOT_GENERATED");

            Assert.That(remote.remoteManager.ListControlLayouts(), Has.None.EqualTo("OtherLayout_NOT_GENERATED"));   // Not remoted.
            Assert.That(remote.remoteManager.ListControlLayouts(), Has.Exactly(1).EqualTo("OtherLayout_GENERATED")); // Remoted.
        }
    }