Exemplo n.º 1
0
    public void State_CanCustomizeStateLayoutOfDevice()
    {
        // Create a custom layout that moves the offsets of some controls around.
        var jsonLayout = @"
            {
                ""name"" : ""CustomGamepad"",
                ""extend"" : ""Gamepad"",
                ""format"" : ""CUST"",
                ""controls"" : [
                    {
                        ""name"" : ""buttonSouth"",
                        ""offset"" : 800
                    }
                ]
            }
        ";

        InputSystem.RegisterLayout(jsonLayout);

        var setup = new InputDeviceBuilder("CustomGamepad");

        Assert.That(setup.GetControl("buttonSouth").stateBlock.byteOffset, Is.EqualTo(800));

        var device = (Gamepad)setup.Finish();

        Assert.That(device.stateBlock.sizeInBits, Is.EqualTo(801 * 8)); // Button bitfield adds one byte.
    }
Exemplo n.º 2
0
    public void State_AppendsControlsWithoutForcedOffsetToEndOfState()
    {
        var json = @"
            {
                ""name"" : ""MyDevice"",
                ""controls"" : [
                    {
                        ""name"" : ""controlWithFixedOffset"",
                        ""layout"" : ""Analog"",
                        ""offset"" : ""10"",
                        ""format"" : ""FLT""
                    },
                    {
                        ""name"" : ""controlWithAutomaticOffset"",
                        ""layout"" : ""Button""
                    }
                ]
            }
        ";

        InputSystem.RegisterLayout(json);
        var setup = new InputDeviceBuilder("MyDevice");

        Assert.That(setup.GetControl("controlWithAutomaticOffset").stateBlock.byteOffset, Is.EqualTo(14));

        var device = setup.Finish();

        Assert.That(device.stateBlock.sizeInBits, Is.EqualTo(15 * 8));
    }
Exemplo n.º 3
0
    public void Controls_AskingValueOfControlBeforeDeviceAddedToSystemIsInvalidOperation()
    {
        var setup  = new InputDeviceBuilder("Gamepad");
        var device = (Gamepad)setup.Finish();

        Assert.Throws <InvalidOperationException>(() => { device.leftStick.ReadValue(); });
    }
Exemplo n.º 4
0
    public void Controls_ReferToTheirDevices()
    {
        var setup     = new InputDeviceBuilder("Gamepad");
        var leftStick = setup.GetControl("leftStick");
        var device    = setup.Finish();

        Assert.That(leftStick.device, Is.SameAs(device));
    }
Exemplo n.º 5
0
    public void Controls_ReferToTheirParent()
    {
        var setup   = new InputDeviceBuilder("Gamepad");
        var gamepad = (Gamepad)setup.Finish();

        Assert.That(gamepad.leftStick.parent, Is.SameAs(gamepad));
        Assert.That(gamepad.leftStick.x.parent, Is.SameAs(gamepad.leftStick));
    }
Exemplo n.º 6
0
    public void Controls_DeviceAndControlsRememberTheirLayouts()
    {
        var setup   = new InputDeviceBuilder("Gamepad");
        var gamepad = (Gamepad)setup.Finish();

        Assert.That(gamepad.layout, Is.EqualTo("Gamepad"));
        Assert.That(gamepad.leftStick.layout, Is.EqualTo("Stick"));
    }
Exemplo n.º 7
0
    public void Controls_AfterAddingDeviceCanQueryValueOfControls()
    {
        var setup  = new InputDeviceBuilder("Gamepad");
        var device = (Gamepad)setup.Finish();

        InputSystem.AddDevice(device);

        Assert.That(device.leftStick.ReadValue(), Is.EqualTo(default(Vector2)));
    }
Exemplo n.º 8
0
    public void State_CanComputeStateLayoutForMultiByteBitfieldWithFixedOffset()
    {
        var setup     = new InputDeviceBuilder("Keyboard");
        var downArrow = setup.GetControl("DownArrow");
        var keyboard  = setup.Finish();

        Assert.That(downArrow.stateBlock.bitOffset, Is.EqualTo((int)Key.DownArrow));
        Assert.That(downArrow.stateBlock.byteOffset, Is.EqualTo(0));
        Assert.That(keyboard.stateBlock.alignedSizeInBytes, Is.EqualTo(KeyboardState.kSizeInBytes));
    }
Exemplo n.º 9
0
    public void State_CanComputeStateLayoutFromStateStructure()
    {
        var setup   = new InputDeviceBuilder("Gamepad");
        var gamepad = (Gamepad)setup.Finish();

        Assert.That(gamepad.stateBlock.sizeInBits, Is.EqualTo(UnsafeUtility.SizeOf <GamepadState>() * 8));
        Assert.That(gamepad.leftStick.stateBlock.byteOffset,
                    Is.EqualTo(Marshal.OffsetOf(typeof(GamepadState), "leftStick").ToInt32()));
        Assert.That(gamepad.dpad.stateBlock.byteOffset,
                    Is.EqualTo(Marshal.OffsetOf(typeof(GamepadState), "buttons").ToInt32()));
    }
Exemplo n.º 10
0
    public void State_BeforeAddingDevice_OffsetsInStateLayoutsAreRelativeToRoot()
    {
        var setup  = new InputDeviceBuilder("Gamepad");
        var device = (Gamepad)setup.Finish();

        var leftStickOffset  = Marshal.OffsetOf(typeof(GamepadState), "leftStick").ToInt32();
        var leftStickXOffset = leftStickOffset;
        var leftStickYOffset = leftStickOffset + 4;

        Assert.That(device.leftStick.x.stateBlock.byteOffset, Is.EqualTo(leftStickXOffset));
        Assert.That(device.leftStick.y.stateBlock.byteOffset, Is.EqualTo(leftStickYOffset));
    }
Exemplo n.º 11
0
    public void State_CanComputeStateLayoutForNestedStateStructures()
    {
        InputSystem.RegisterLayout <CustomDevice>();
        var setup = new InputDeviceBuilder("CustomDevice");
        var axis2 = setup.GetControl("axis2");

        setup.Finish();

        var nestedOffset = Marshal.OffsetOf(typeof(CustomDeviceState), "nested").ToInt32();
        var axis2Offset  = nestedOffset + Marshal.OffsetOf(typeof(CustomNestedDeviceState), "axis2").ToInt32();

        Assert.That(axis2.stateBlock.byteOffset, Is.EqualTo(axis2Offset));
    }
Exemplo n.º 12
0
    public void Controls_AssignsFullPathToControls()
    {
        var setup     = new InputDeviceBuilder("Gamepad");
        var leftStick = setup.GetControl("leftStick");

        Assert.That(leftStick.path, Is.EqualTo("/Gamepad/leftStick"));

        var device = setup.Finish();

        InputSystem.AddDevice(device);

        Assert.That(leftStick.path, Is.EqualTo("/Gamepad/leftStick"));
    }
Exemplo n.º 13
0
    public void State_CanStoreAxisAsShort()
    {
        // Make right trigger be represented as just a short and force it to different offset.
        var jsonLayout = @"
            {
                ""name"" : ""CustomGamepad"",
                ""extend"" : ""Gamepad"",
                ""controls"" : [
                    {
                        ""name"" : ""rightTrigger"",
                        ""format"" : ""SHRT"",
                        ""offset"" : 0
                    }
                ]
            }
        ";

        InputSystem.RegisterLayout(jsonLayout);

        var setup  = new InputDeviceBuilder("CustomGamepad");
        var device = (Gamepad)setup.Finish();

        Assert.That(device.rightTrigger.stateBlock.format, Is.EqualTo(InputStateBlock.kTypeShort));
    }