59 lines
No EOL
1.3 KiB
C#
59 lines
No EOL
1.3 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace Domain.Input {
|
|
public class GeminadaReader : InputReader {
|
|
protected sealed override int Key { get; } = 0x33;
|
|
private int LKey { get; } = 76;
|
|
|
|
private bool _lPressed;
|
|
private bool _lWasPressed;
|
|
private bool _dotPressed;
|
|
private bool _dotWasPressed;
|
|
|
|
private readonly KeyHistory _history;
|
|
private readonly List<int> _desiredSequence;
|
|
|
|
public GeminadaReader(KeyHistory history) {
|
|
_history = history;
|
|
_desiredSequence = new List<int> { LKey, Key, LKey };
|
|
}
|
|
|
|
public override void UpdateInput() {
|
|
if (UpdateDotInputDown()) {
|
|
_history.KeyPressed(Key);
|
|
}
|
|
|
|
WasPressed = IsPressed;
|
|
IsPressed = _history.ContainsSequence(_desiredSequence);
|
|
}
|
|
|
|
private bool UpdateDotInputDown() {
|
|
_dotWasPressed = _dotPressed;
|
|
short dotState = Win32API.GetAsyncKeyState(Key);
|
|
|
|
if (!_dotWasPressed && dotState != 0) {
|
|
_dotPressed = true;
|
|
return true;
|
|
}
|
|
if (_dotPressed && dotState == 0) {
|
|
_dotPressed = false;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private bool UpdateLInputDown() {
|
|
_lWasPressed = _lPressed;
|
|
short lState = Win32API.GetAsyncKeyState(LKey);
|
|
|
|
if (!_lWasPressed && lState != 0) {
|
|
_lPressed = true;
|
|
return true;
|
|
}
|
|
if (_lPressed && lState == 0) {
|
|
_lPressed = false;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
} |