Exemplo n.º 1
0
        private void SetNumericsFromAnalog()
        {
            _programmaticallyUpdatingNumerics = true;

            if (AnalogStick.HasValue)
            {
                // Setting .Value of a numeric causes a draw, so avoid it unless necessary
                if (ManualX.Value != AnalogStick.X)
                {
                    ManualX.Value = AnalogStick.X;
                }

                if (ManualY.Value != AnalogStick.Y)
                {
                    ManualY.Value = AnalogStick.Y;
                }
            }
            else
            {
                if (ManualX.Value != 0)
                {
                    ManualX.Value = 0;
                }

                if (ManualY.Value != 0)
                {
                    ManualY.Value = 0;
                }
            }

            manualR.ValueChanged     -= PolarNumeric_Changed;
            manualTheta.ValueChanged -= PolarNumeric_Changed;

            var polar = PolarRectConversion.RectToPolarDeg(AnalogStick.X - rangeAverageX, AnalogStick.Y - rangeAverageY);

            manualR.Value     = (decimal)polar.Item1;
            manualTheta.Value = (decimal)polar.Item2;

            manualR.ValueChanged     += PolarNumeric_Changed;
            manualTheta.ValueChanged += PolarNumeric_Changed;

            _programmaticallyUpdatingNumerics = false;
        }
Exemplo n.º 2
0
        private void PolarNumeric_Changed(object sender, EventArgs e)
        {
            ManualX.ValueChanged -= ManualXY_ValueChanged;             //TODO is setting and checking a bool faster than subscription?
            ManualY.ValueChanged -= ManualXY_ValueChanged;

            var rect = PolarRectConversion.PolarDegToRect((double)manualR.Value, (double)manualTheta.Value);

            rect = new Tuple <double, double>(
                rangeAverageX + Math.Ceiling(rect.Item1).Clamp(-127, 127),
                rangeAverageY + Math.Ceiling(rect.Item2).Clamp(-127, 127));
            ManualX.Value        = (decimal)rect.Item1;
            ManualY.Value        = (decimal)rect.Item2;
            AnalogStick.X        = (int)rect.Item1;
            AnalogStick.Y        = (int)rect.Item2;
            AnalogStick.HasValue = true;
            AnalogStick.Refresh();

            ManualX.ValueChanged += ManualXY_ValueChanged;
            ManualY.ValueChanged += ManualXY_ValueChanged;
        }