コード例 #1
0
        public long[] CircularDeadZoneValueTests(long x, long y, int percentage)
        {
            var helper = new CircularDeadZoneHelper {
                Percentage = percentage
            };

            return(helper.ApplyRangeDeadZone(new[] { x, y }));
        }
コード例 #2
0
        public short[] CircularDeadZoneValueTests(short x, short y, int percentage)
        {
            var helper = new CircularDeadZoneHelper {
                Percentage = percentage
            };

            return(helper.ApplyRangeDeadZone(new[] { x, y }));
        }
コード例 #3
0
        public void CircularDzOutsideTests(long x, long y, int percentage)
        {
            var helper = new CircularDeadZoneHelper {
                Percentage = percentage
            };
            var result = helper.ApplyRangeDeadZone(new long[] { -16383, -16383 });

            Assert.AreNotEqual(new long[] { 0, 0 }, result);
        }
コード例 #4
0
        public void CircularDzMaxRange(short x, short y, int percentage)
        {
            var helper = new CircularDeadZoneHelper {
                Percentage = percentage
            };
            var result = helper.ApplyRangeDeadZone(new short[] { x, y });

            Assert.AreEqual(new short[] { x, y }, result);
        }
コード例 #5
0
        public override void Update(params long[] values)
        {
            var outputValues = new long[] { values[0], values[1] };

            if (DeadZone != 0)
            {
                if (CircularDz)
                {
                    outputValues = _circularDeadZoneHelper.ApplyRangeDeadZone(outputValues);
                }
                else
                {
                    outputValues[0] = _deadZoneHelper.ApplyRangeDeadZone(outputValues[0]);
                    outputValues[1] = _deadZoneHelper.ApplyRangeDeadZone(outputValues[1]);
                }
            }
            if (Sensitivity != 100)
            {
                if (Linear)
                {
                    outputValues[0] = (long)(outputValues[0] * _linearSenstitivityScaleFactor);
                    outputValues[1] = (long)(outputValues[1] * _linearSenstitivityScaleFactor);
                }
                else
                {
                    outputValues[0] = _sensitivityHelper.ApplyRangeSensitivity(outputValues[0]);
                    outputValues[1] = _sensitivityHelper.ApplyRangeSensitivity(outputValues[1]);
                }
            }

            outputValues[0] = Functions.ClampAxisRange(outputValues[0]);
            outputValues[1] = Functions.ClampAxisRange(outputValues[1]);

            if (InvertX)
            {
                outputValues[0] = Functions.Invert(outputValues[0]);
            }
            if (InvertY)
            {
                outputValues[1] = Functions.Invert(outputValues[1]);
            }

            if (Math.Abs(Rotation) > 0)
            {
                var vector = new Vector(outputValues[0], outputValues[1]);
                vector          = vector.Rotate(Rotation);
                outputValues[0] = (long)vector.X;
                outputValues[1] = (long)vector.Y;
            }

            WriteOutput(0, outputValues[0]);
            WriteOutput(1, outputValues[1]);
        }
コード例 #6
0
ファイル: AxesToAxes.cs プロジェクト: admiralsurf/UCR-DARK
        public override void Update(params short[] values)
        {
            var outputValues = new short[] { values[0], values[1] };

            if (DeadZone != 0)
            {
                if (CircularDz)
                {
                    outputValues = _circularDeadZoneHelper.ApplyRangeDeadZone(outputValues);
                }
                else
                {
                    outputValues[0] = _deadZoneHelper.ApplyRangeDeadZone(outputValues[0]);
                    outputValues[1] = _deadZoneHelper.ApplyRangeDeadZone(outputValues[1]);
                }
            }
            if (Sensitivity != 100)
            {
                if (Linear)
                {
                    outputValues[0] = (short)(outputValues[0] * _linearSensitivityScaleFactor);
                    outputValues[1] = (short)(outputValues[1] * _linearSensitivityScaleFactor);
                }
                else
                {
                    outputValues[0] = _sensitivityHelper.ApplyRangeSensitivity(outputValues[0]);
                    outputValues[1] = _sensitivityHelper.ApplyRangeSensitivity(outputValues[1]);
                }
            }

            outputValues[0] = Functions.ClampAxisRange(outputValues[0]);
            outputValues[1] = Functions.ClampAxisRange(outputValues[1]);

            if (InvertX)
            {
                outputValues[0] = Functions.Invert(outputValues[0]);
            }
            if (InvertY)
            {
                outputValues[1] = Functions.Invert(outputValues[1]);
            }

            WriteOutput(0, outputValues[0]);
            WriteOutput(1, outputValues[1]);
        }
コード例 #7
0
        public long[] CircularDeadZoneInitTests(long x, long y)
        {
            var helper = new CircularDeadZoneHelper();

            return(helper.ApplyRangeDeadZone(new[] { x, y }));
        }
コード例 #8
0
        public short[] CircularDeadZoneInitTests(short x, short y)
        {
            var helper = new CircularDeadZoneHelper();

            return(helper.ApplyRangeDeadZone(new[] { x, y }));
        }
コード例 #9
0
        public override void Update(params short[] values)
        {
            if (values[3] == 1)
            {
                // Reset held
                _trimX = 0;
                _trimY = 0;
            }
            else if (values[2] == 1)
            {
                // Trim held
                if (!_trimValueTaken)
                {
                    // First iteration through, store new trim value and set _trimValueTaken flag
                    _trimX         += values[0];
                    _trimY         += values[1];
                    _trimValueTaken = true;
                }
            }
            else
            {
                var outputValues = new[] { values[0], values[1] };
                if (values[2] == 0)
                {
                    _trimValueTaken = false;                    // ToDo: This is clumsy, fix once we can get notification of *which* input changed state
                }
                if (DeadZone != 0)
                {
                    if (CircularDz)
                    {
                        outputValues = _circularDeadZoneHelper.ApplyRangeDeadZone(outputValues);
                    }
                    else
                    {
                        outputValues[0] = _deadZoneHelper.ApplyRangeDeadZone(outputValues[0]);
                        outputValues[1] = _deadZoneHelper.ApplyRangeDeadZone(outputValues[1]);
                    }
                }
                if (Sensitivity != 100)
                {
                    if (Linear)
                    {
                        outputValues[0] = (short)(outputValues[0] * _linearSenstitivityScaleFactor);
                        outputValues[1] = (short)(outputValues[1] * _linearSenstitivityScaleFactor);
                    }
                    else
                    {
                        outputValues[0] = _sensitivityHelper.ApplyRangeSensitivity(outputValues[0]);
                        outputValues[1] = _sensitivityHelper.ApplyRangeSensitivity(outputValues[1]);
                    }
                }

                // Apply trim
                outputValues[0] += _trimX;
                outputValues[1] += _trimY;

                outputValues[0] = Functions.ClampAxisRange(outputValues[0]);
                outputValues[1] = Functions.ClampAxisRange(outputValues[1]);

                if (InvertX)
                {
                    outputValues[0] = Functions.Invert(outputValues[0]);
                }
                if (InvertY)
                {
                    outputValues[1] = Functions.Invert(outputValues[1]);
                }

                WriteOutput(0, outputValues[0]);
                WriteOutput(1, outputValues[1]);
            }
        }