sinmai-mods/TouchPanel/IO/patch_NewTouchPanel.cs
2024-08-08 13:32:25 +07:00

61 lines
1.9 KiB
C#

// ReSharper disable CheckNamespace
// ReSharper disable InconsistentNaming
using System.Globalization;
using MAI2System;
using Manager;
namespace IO;
class patch_NewTouchPanel : NewTouchPanel
{
private int _touchPanelDelayMsec;
private Dictionary<InputManager.TouchPanelArea, byte> _sensitivityOverrides = new();
public extern void orig_Initialize(uint index);
public new void Initialize(uint index)
{
orig_Initialize(index);
using var ini = new IniFile("mai2.ini");
_touchPanelDelayMsec = ini.getIntValue("TouchPanel", "DelayMs", 0);
foreach (InputManager.TouchPanelArea sensor in Enum.GetValues(typeof(InputManager.TouchPanelArea)))
{
var sensitivityStr = ini.getValue("TouchPanel", $"Sensitivity{sensor}", null);
if (sensitivityStr == null)
{
continue;
}
if (byte.TryParse(sensitivityStr, NumberStyles.Integer, CultureInfo.InvariantCulture, out var sensitivity))
{
System.Console.WriteLine($"[TouchPanel] [WARN] Invalid value for TouchPanel.Sensitivity{sensor}: {sensitivityStr}");
continue;
}
_sensitivityOverrides[sensor] = sensitivity;
}
}
private extern void orig_Recv();
private void Recv()
{
Thread.Sleep(_touchPanelDelayMsec);
orig_Recv();
}
private extern void orig_SetTouchPanelSensitivity(List<byte> sensitivity);
private void SetTouchPanelSensitivity(List<byte> sensitivity)
{
foreach (var s in _sensitivityOverrides)
{
System.Console.WriteLine($"[TouchPanel] Overriding sensitivity for panel {s.Key}: {s.Value}");
sensitivity[(int)s.Key] = s.Value;
}
orig_SetTouchPanelSensitivity(sensitivity);
}
}