Пример #1
0
        public void Update(Joystick joy)
        {
            // Display Raw Value (no deadzone & expected limits)
            Joystick rawDisplay = new Joystick();

            rawDisplay.Calibrate(_default);
            rawDisplay.rawX    = joy.rawX;
            rawDisplay.rawY    = joy.rawY;
            rawDisplay.centerX = _default.centerX + rawXCenter;
            rawDisplay.centerY = _default.centerY + rawYCenter;
            rawDisplay.Normalize();
            Canvas.SetLeft(raw, 500 * rawDisplay.X + 500 - raw.Width / 2);
            Canvas.SetTop(raw, -500 * rawDisplay.Y + 500 - raw.Height / 2);

            // Apply Center
            joy.centerX = _default.centerX + rawXCenter;
            joy.centerY = _default.centerY + rawYCenter;

            // Apply Limits
            joy.maxX = (int)Math.Round((_default.maxX - _default.centerX) * (limitXPos.Value / 100d)) + _default.centerX;
            joy.minX = _default.centerX - (int)Math.Round((_default.centerX - _default.minX) * (limitXNeg.Value / 100d));
            joy.maxY = (int)Math.Round((_default.maxY - _default.centerY) * (limitYPos.Value / 100d)) + _default.centerX;
            joy.minY = _default.centerY - (int)Math.Round((_default.centerY - _default.minY) * (limitYNeg.Value / 100d));

            // Apply Deadzone (not symetrical)
            joy.deadXp = (int)Math.Round((_default.maxX - _default.centerX) * (deadXPos.Value / 100d));
            joy.deadXn = -(int)Math.Round((_default.maxX - _default.centerX) * (deadXNeg.Value / 100d));
            joy.deadYp = (int)Math.Round((_default.maxY - _default.centerY) * (deadYPos.Value / 100d));
            joy.deadYn = -(int)Math.Round((_default.maxY - _default.centerY) * (deadYNeg.Value / 100d));
            joy.Normalize();

            // Apply Anti Deadzone
            var anti = (float)antiDeadzoneSlider.Value / 100f;

            if (joy.X != 0)
            {
                var xRange = 1f - anti;
                joy.X = joy.X * xRange + anti * Math.Sign(joy.X);
            }
            if (joy.Y != 0)
            {
                var yRange = 1f - anti;
                joy.Y = joy.Y * yRange + anti * Math.Sign(joy.Y);
            }


            // Display Output
            Canvas.SetTop(@out, joy.Y * -500 + 500 - @out.Height / 2);
            Canvas.SetLeft(@out, joy.X * 500 + 500 - @out.Width / 2);
            xLabel.Content = string.Format("X: {0}%", Math.Round(joy.X * 100));
            yLabel.Content = string.Format("Y: {0}%", Math.Round(joy.Y * 100));
        }