mirror of
https://github.com/ayufan/steam-deck-tools.git
synced 2026-03-06 21:13:55 +01:00
Add minimum pressed time to X360Controller
This commit is contained in:
parent
142b8cc2e9
commit
86b73001a2
|
|
@ -17,6 +17,8 @@ namespace SteamController.Devices
|
|||
private IXbox360Controller? device;
|
||||
private bool isConnected;
|
||||
private bool submitReport;
|
||||
private Dictionary<Xbox360Button, DateTime> lastPressed = new Dictionary<Xbox360Button, DateTime>();
|
||||
private Dictionary<Xbox360Button, DateTime> pressed = new Dictionary<Xbox360Button, DateTime>();
|
||||
|
||||
public Xbox360Controller()
|
||||
{
|
||||
|
|
@ -72,6 +74,8 @@ namespace SteamController.Devices
|
|||
LedNumber = 0;
|
||||
}
|
||||
|
||||
lastPressed = pressed;
|
||||
pressed = new Dictionary<Xbox360Button, DateTime>();
|
||||
submitReport = false;
|
||||
Connected = SettingsDebug.Default.KeepX360AlwaysConnected;
|
||||
}
|
||||
|
|
@ -138,6 +142,8 @@ namespace SteamController.Devices
|
|||
}
|
||||
}
|
||||
|
||||
UpdateMinimumPressedTime();
|
||||
|
||||
if (isConnected && submitReport)
|
||||
{
|
||||
try
|
||||
|
|
@ -159,6 +165,25 @@ namespace SteamController.Devices
|
|||
}
|
||||
}
|
||||
|
||||
private void UpdateMinimumPressedTime()
|
||||
{
|
||||
var now = DateTime.Now;
|
||||
|
||||
foreach (var key in lastPressed)
|
||||
{
|
||||
if (pressed.ContainsKey(key.Key))
|
||||
continue;
|
||||
|
||||
// until time elapsed, keep setting button state
|
||||
if (key.Value < DateTime.Now)
|
||||
continue;
|
||||
|
||||
device?.SetButtonState(key.Key, true);
|
||||
pressed.Add(key.Key, key.Value);
|
||||
submitReport = true;
|
||||
}
|
||||
}
|
||||
|
||||
public bool Valid
|
||||
{
|
||||
get { return device is not null; }
|
||||
|
|
@ -200,6 +225,19 @@ namespace SteamController.Devices
|
|||
}
|
||||
}
|
||||
|
||||
public void Overwrite(Xbox360Button button, bool value, int minPresTimeMs = 0)
|
||||
{
|
||||
device?.SetButtonState(button, value);
|
||||
submitReport = true;
|
||||
|
||||
if (value && minPresTimeMs > 0)
|
||||
{
|
||||
if (!lastPressed.TryGetValue(button, out var firstPressed))
|
||||
firstPressed = DateTime.Now.AddMilliseconds(minPresTimeMs);
|
||||
pressed.Add(button, firstPressed);
|
||||
}
|
||||
}
|
||||
|
||||
public void ResetFeedback()
|
||||
{
|
||||
FeedbackReceived = null;
|
||||
|
|
|
|||
Loading…
Reference in a new issue