From 26dbad8ac8e0070a4e9110df40a227c064d5663b Mon Sep 17 00:00:00 2001 From: 999sian <71638559+999sian@users.noreply.github.com> Date: Thu, 16 Jul 2026 14:19:33 +0100 Subject: [PATCH] fix(input): map POSIX stick endpoints exactly (#244) --- src/SharpEmu.Libs/Pad/HostWindowInput.cs | 4 ++-- .../Pad/HostWindowInputTests.cs | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 tests/SharpEmu.Libs.Tests/Pad/HostWindowInputTests.cs diff --git a/src/SharpEmu.Libs/Pad/HostWindowInput.cs b/src/SharpEmu.Libs/Pad/HostWindowInput.cs index 7494cba..89ff43e 100644 --- a/src/SharpEmu.Libs/Pad/HostWindowInput.cs +++ b/src/SharpEmu.Libs/Pad/HostWindowInput.cs @@ -253,9 +253,9 @@ public static class HostWindowInput }; } - private static byte ToStickByte(float value) + internal static byte ToStickByte(float value) { - return (byte)Math.Clamp((int)(128.0f + value * 127.0f), 0, 255); + return (byte)Math.Clamp((int)MathF.Round((value + 1.0f) * 127.5f), 0, 255); } private static HostGamepadButtons MapButton(ButtonName name) => name switch diff --git a/tests/SharpEmu.Libs.Tests/Pad/HostWindowInputTests.cs b/tests/SharpEmu.Libs.Tests/Pad/HostWindowInputTests.cs new file mode 100644 index 0000000..158c307 --- /dev/null +++ b/tests/SharpEmu.Libs.Tests/Pad/HostWindowInputTests.cs @@ -0,0 +1,19 @@ +// Copyright (C) 2026 SharpEmu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +using SharpEmu.Libs.Pad; +using Xunit; + +namespace SharpEmu.Libs.Tests.Pad; + +public sealed class HostWindowInputTests +{ + [Theory] + [InlineData(-1.0f, 0)] + [InlineData(0.0f, 128)] + [InlineData(1.0f, 255)] + public void ToStickByteMapsFullSilkRange(float value, int expected) + { + Assert.Equal((byte)expected, HostWindowInput.ToStickByte(value)); + } +}