static void OffsetMiddle(DeviceAxisSettings settings, float offset, float minimumLimit, float maximumLimit) { if (offset > 0 && settings.Maximum + offset > maximumLimit) { offset = Math.Min(offset, maximumLimit - settings.Maximum); } else if (offset < 0 && settings.Minimum + offset < minimumLimit) { offset = Math.Max(offset, minimumLimit - settings.Minimum); } settings.Minimum = MathUtils.Clamp(settings.Minimum + offset, minimumLimit, maximumLimit - 1); settings.Maximum = MathUtils.Clamp(settings.Maximum + offset, minimumLimit + 1, maximumLimit); }
static void OffsetSize(DeviceAxisSettings settings, float offset, float minimumLimit, float maximumLimit) { var middle = (settings.Maximum + settings.Minimum) / 2.0f; var newRange = MathUtils.Clamp(settings.Maximum - settings.Minimum + offset, 1, maximumLimit - minimumLimit); var newMaximum = middle + newRange / 2; var newMinimum = middle - newRange / 2; if (newMaximum > maximumLimit) { newMinimum -= newMaximum - maximumLimit; } if (newMinimum < minimumLimit) { newMaximum += minimumLimit - newMinimum; } settings.Minimum = MathUtils.Clamp(newMinimum, minimumLimit, maximumLimit - 1); settings.Maximum = MathUtils.Clamp(newMaximum, minimumLimit + 1, maximumLimit); }
static void SetMaximum(DeviceAxisSettings settings, float value, float maximumLimit) => settings.Maximum = MathUtils.Clamp(value, settings.Minimum + 1, maximumLimit);