Esempio n. 1
0
        public void ProcessInput_Mouse_ShouldSetActionStatesAccordingToHardwareInputAndInputMapping(bool left, bool middle, bool right,
                                                                                                    bool x1, bool x2, bool expectedFire, bool expectedZoom, bool expectedAltFire, bool expectedMelee)
        {
            // Arrange
            var inputSceneBuilder = new InputSceneBuilder();

            inputSceneBuilder.AddInputWithSampleMouseActionMappings(out var inputComponent, out var fire, out var zoom, out var altFire, out var melee);
            var scene = inputSceneBuilder.Build();

            var hardwareInput = GetMouseInput(new MouseInputBuilder
            {
                LeftButton   = left,
                MiddleButton = middle,
                RightButton  = right,
                XButton1     = x1,
                XButton2     = x2
            });

            _inputProvider.Capture().Returns(hardwareInput);

            // Act
            _inputSystem.ProcessInput(scene);

            // Assert
            Assert.That(inputComponent.GetActionState(fire.ActionName), Is.EqualTo(expectedFire));
            Assert.That(inputComponent.GetActionState(zoom.ActionName), Is.EqualTo(expectedZoom));
            Assert.That(inputComponent.GetActionState(altFire.ActionName), Is.EqualTo(expectedAltFire));
            Assert.That(inputComponent.GetActionState(melee.ActionName), Is.EqualTo(expectedMelee));
        }
Esempio n. 2
0
        public void ProcessInput_Keyboard_ShouldCallActionBindingsAccordingToHardwareInputAndInputMapping(bool right, bool left,
                                                                                                          bool up, bool space, int expectedRightCount, int expectedLeftCount, int expectedJumpCount)
        {
            // Arrange
            var inputSceneBuilder = new InputSceneBuilder();

            inputSceneBuilder.AddInputWithSampleKeyboardActionMappings(out var inputComponent, out var moveRight, out var moveLeft, out var jump);
            var scene = inputSceneBuilder.Build();

            var moveRightCallCounter = 0;
            var moveLeftCallCounter  = 0;
            var jumpCallCounter      = 0;

            inputComponent.BindAction(moveRight.ActionName, () => { moveRightCallCounter++; });
            inputComponent.BindAction(moveLeft.ActionName, () => { moveLeftCallCounter++; });
            inputComponent.BindAction(jump.ActionName, () => { jumpCallCounter++; });

            var hardwareInput = GetKeyboardInput(new KeyboardInputBuilder
            {
                Right = right,
                Left  = left,
                Up    = up,
                Space = space
            });

            _inputProvider.Capture().Returns(hardwareInput);

            // Act
            _inputSystem.ProcessInput(scene);

            // Assert
            Assert.That(moveRightCallCounter, Is.EqualTo(expectedRightCount));
            Assert.That(moveLeftCallCounter, Is.EqualTo(expectedLeftCount));
            Assert.That(jumpCallCounter, Is.EqualTo(expectedJumpCount));
        }
Esempio n. 3
0
        public void ProcessInput_Keyboard_ShouldSetAxisStatesAccordingToHardwareInputAndInputMapping(bool up, bool down, bool right,
                                                                                                     bool left, bool space, double expectedUp, double expectedRight)
        {
            // Arrange
            var inputSceneBuilder = new InputSceneBuilder();

            inputSceneBuilder.AddInputWithSampleKeyboardAxisMappings(out var inputComponent, out var moveUp, out var moveRight);
            var scene = inputSceneBuilder.Build();

            var hardwareInput = GetKeyboardInput(new KeyboardInputBuilder
            {
                Up    = up,
                Down  = down,
                Right = right,
                Left  = left,
                Space = space
            });

            _inputProvider.Capture().Returns(hardwareInput);

            // Act
            _inputSystem.ProcessInput(scene);

            // Assert
            Assert.That(inputComponent.GetAxisState(moveUp.AxisName), Is.EqualTo(expectedUp));
            Assert.That(inputComponent.GetAxisState(moveRight.AxisName), Is.EqualTo(expectedRight));
        }
Esempio n. 4
0
        public void ProcessInput_ShouldCaptureHardwareInputOnce()
        {
            // Arrange
            var inputSceneBuilder = new InputSceneBuilder();
            var scene             = inputSceneBuilder.Build();

            // Act
            _inputSystem.ProcessInput(scene);

            // Assert
            _inputProvider.Received(1).Capture();
        }
Esempio n. 5
0
        public void ProcessInput_ShouldCallAxisBindingsEachTimeRegardlessHardwareInput()
        {
            // Arrange
            var inputSceneBuilder = new InputSceneBuilder();

            inputSceneBuilder.AddInputWithSampleKeyboardAxisMappings(out var inputComponent, out var moveUp, out _);
            var scene = inputSceneBuilder.Build();

            var callCounter = 0;

            inputComponent.BindAxis(moveUp.AxisName, value => { callCounter++; });

            var allFalseHardwareInput = GetKeyboardInput(new KeyboardInputBuilder
            {
                Up    = false,
                Down  = false,
                Right = false,
                Left  = false,
                Space = false
            });

            var allTrueHardwareInput = GetKeyboardInput(new KeyboardInputBuilder
            {
                Up    = true,
                Down  = true,
                Right = true,
                Left  = true,
                Space = true
            });

            // Act
            for (var i = 0; i < 10; i++)
            {
                _inputProvider.Capture().Returns(allFalseHardwareInput);
                _inputSystem.ProcessInput(scene);

                _inputProvider.Capture().Returns(allTrueHardwareInput);
                _inputSystem.ProcessInput(scene);

                _inputProvider.Capture().Returns(allTrueHardwareInput);
                _inputSystem.ProcessInput(scene);

                _inputProvider.Capture().Returns(allFalseHardwareInput);
                _inputSystem.ProcessInput(scene);
            }

            // Assert
            Assert.That(callCounter, Is.EqualTo(40));
        }
Esempio n. 6
0
        public void ProcessInput_ShouldCallActionBindingsCorrectNumberOfTimes_WhenExecutedTwice(bool first, bool second,
                                                                                                int expectedCount)
        {
            // Arrange
            var inputSceneBuilder = new InputSceneBuilder();

            inputSceneBuilder.AddInputWithSampleKeyboardActionMappings(out var inputComponent, out var moveRight, out _, out _);
            var scene = inputSceneBuilder.Build();

            var hardwareInput1 = GetKeyboardInput(new KeyboardInputBuilder
            {
                Up    = false,
                Down  = false,
                Right = first,
                Left  = false,
                Space = false
            });

            var hardwareInput2 = GetKeyboardInput(new KeyboardInputBuilder
            {
                Up    = false,
                Down  = false,
                Right = second,
                Left  = false,
                Space = false
            });

            // fill in action states based on hardwareInput
            _inputProvider.Capture().Returns(hardwareInput1);
            _inputSystem.ProcessInput(scene);

            var callCounter = 0;

            inputComponent.BindAction(moveRight.ActionName, () => { callCounter++; });

            // Act
            _inputProvider.Capture().Returns(hardwareInput1);
            _inputSystem.ProcessInput(scene);

            _inputProvider.Capture().Returns(hardwareInput2);
            _inputSystem.ProcessInput(scene);

            // Assert
            Assert.That(callCounter, Is.EqualTo(expectedCount));
        }
Esempio n. 7
0
        public void ProcessInput_Mouse_ShouldCallAxisBindingsAccordingToHardwareInputAndInputMapping(int xPos, int yPos, double expectedLookRight,
                                                                                                     double expectedLookUp)
        {
            // Arrange
            var inputSceneBuilder = new InputSceneBuilder();

            inputSceneBuilder.AddInputWithSampleMouseAxisMappings(out var inputComponent, out var lookRight, out var lookUp);
            var scene = inputSceneBuilder.Build();

            var lookRightCallCounter = 0;
            var lookUpCallCounter    = 0;

            var lookRightState = 0.0;
            var lookUpState    = 0.0;

            inputComponent.BindAxis(lookRight.AxisName, value =>
            {
                lookRightCallCounter++;
                lookRightState = value;
            });
            inputComponent.BindAxis(lookUp.AxisName, value =>
            {
                lookUpCallCounter++;
                lookUpState = value;
            });

            var hardwareInput = GetMouseInput(new MouseInputBuilder
            {
                PositionDelta = new Vector2(xPos, yPos)
            });

            _inputProvider.Capture().Returns(hardwareInput);

            // Act
            _inputSystem.ProcessInput(scene);

            // Assert
            Assert.That(lookRightCallCounter, Is.EqualTo(1));
            Assert.That(lookUpCallCounter, Is.EqualTo(1));

            Assert.That(lookRightState, Is.EqualTo(expectedLookRight));
            Assert.That(lookUpState, Is.EqualTo(expectedLookUp));
        }
Esempio n. 8
0
        public void ProcessInput_ShouldNotThrowException_WhenEntityIsAddedInInputBindingFunction()
        {
            // Arrange
            var inputSceneBuilder = new InputSceneBuilder();

            inputSceneBuilder.AddInputWithSampleKeyboardActionMappings(out var inputComponent, out _, out _, out var jump);
            var scene = inputSceneBuilder.Build();

            inputComponent.BindAction(jump.ActionName, () => { scene.AddEntity(new Entity()); });

            var hardwareInput = GetKeyboardInput(new KeyboardInputBuilder
            {
                Space = true
            });

            _inputProvider.Capture().Returns(hardwareInput);

            // Act
            // Assert
            Assert.That(() => _inputSystem.ProcessInput(scene), Throws.Nothing);
        }
Esempio n. 9
0
        public void ProcessInput_Mouse_ShouldCallActionBindingsAccordingToHardwareInputAndInputMapping(bool left, bool middle, bool right,
                                                                                                       bool x1, bool x2, int expectedFireCount, int expectedZoomCount, int expectedAltFireCount, int expectedMeleeCount)
        {
            // Arrange
            var inputSceneBuilder = new InputSceneBuilder();

            inputSceneBuilder.AddInputWithSampleMouseActionMappings(out var inputComponent, out var fire, out var zoom, out var altFire, out var melee);
            var scene = inputSceneBuilder.Build();

            var fireCallCounter    = 0;
            var zoomCallCounter    = 0;
            var altFireCallCounter = 0;
            var meleeCallCounter   = 0;

            inputComponent.BindAction(fire.ActionName, () => { fireCallCounter++; });
            inputComponent.BindAction(zoom.ActionName, () => { zoomCallCounter++; });
            inputComponent.BindAction(altFire.ActionName, () => { altFireCallCounter++; });
            inputComponent.BindAction(melee.ActionName, () => { meleeCallCounter++; });

            var hardwareInput = GetMouseInput(new MouseInputBuilder
            {
                LeftButton   = left,
                MiddleButton = middle,
                RightButton  = right,
                XButton1     = x1,
                XButton2     = x2
            });

            _inputProvider.Capture().Returns(hardwareInput);

            // Act
            _inputSystem.ProcessInput(scene);

            // Assert
            Assert.That(fireCallCounter, Is.EqualTo(expectedFireCount));
            Assert.That(zoomCallCounter, Is.EqualTo(expectedZoomCount));
            Assert.That(altFireCallCounter, Is.EqualTo(expectedAltFireCount));
            Assert.That(meleeCallCounter, Is.EqualTo(expectedMeleeCount));
        }
Esempio n. 10
0
        public void ProcessInput_ShouldSetHardwareInputOnAllInputComponents()
        {
            // Arrange
            var inputSceneBuilder = new InputSceneBuilder();

            inputSceneBuilder.AddInput(out var inputComponentOfEntity1);
            inputSceneBuilder.AddInput(out var inputComponentOfEntity2);
            inputSceneBuilder.AddInput(out var inputComponentOfEntity3);
            var scene = inputSceneBuilder.Build();

            var hardwareInput = HardwareInput.Empty;

            _inputProvider.Capture().Returns(hardwareInput);

            // Act
            _inputSystem.ProcessInput(scene);

            // Assert
            Assert.That(inputComponentOfEntity1.HardwareInput, Is.EqualTo(hardwareInput));
            Assert.That(inputComponentOfEntity2.HardwareInput, Is.EqualTo(hardwareInput));
            Assert.That(inputComponentOfEntity3.HardwareInput, Is.EqualTo(hardwareInput));
        }
Esempio n. 11
0
        public void ProcessInput_Mouse_ShouldSetAxisStatesAccordingToHardwareInputAndInputMapping(int xPos, int yPos, double expectedLookRight,
                                                                                                  double expectedLookUp)
        {
            // Arrange
            var inputSceneBuilder = new InputSceneBuilder();

            inputSceneBuilder.AddInputWithSampleMouseAxisMappings(out var inputComponent, out var lookRight, out var lookUp);
            var scene = inputSceneBuilder.Build();

            var hardwareInput = GetMouseInput(new MouseInputBuilder
            {
                PositionDelta = new Vector2(xPos, yPos)
            });

            _inputProvider.Capture().Returns(hardwareInput);

            // Act
            _inputSystem.ProcessInput(scene);

            // Assert
            Assert.That(inputComponent.GetAxisState(lookRight.AxisName), Is.EqualTo(expectedLookRight));
            Assert.That(inputComponent.GetAxisState(lookUp.AxisName), Is.EqualTo(expectedLookUp));
        }