feat: key history algorithm
This commit is contained in:
parent
5d2da3ddbf
commit
1869a92580
8 changed files with 115 additions and 10 deletions
|
@ -17,7 +17,5 @@ namespace Domain {
|
|||
}
|
||||
|
||||
public bool KeyDown(Type key) => _readers[key].KeyDown();
|
||||
public bool KeyPressed(Type key) => _readers[key].KeyPressed();
|
||||
public bool KeyUp(Type key) => _readers[key].KeyUp();
|
||||
}
|
||||
}
|
57
Assets/Scripts/Domain/Input/GeminadaReader.cs
Normal file
57
Assets/Scripts/Domain/Input/GeminadaReader.cs
Normal file
|
@ -0,0 +1,57 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Domain.Input {
|
||||
public class GeminadaReader : InputReader {
|
||||
protected override int Key { get; } = 0x33;
|
||||
private int LKey { get; } = 76;
|
||||
|
||||
private bool _lPressed;
|
||||
private bool _lWasPressed;
|
||||
private bool _dotPressed;
|
||||
private bool _dotWasPressed;
|
||||
|
||||
private List<int> _lastPresses;
|
||||
|
||||
public override void UpdateInput() {
|
||||
if (UpdateLInput()) {
|
||||
if (_lastPresses.Count == 0) {
|
||||
_lastPresses.Add(LKey);
|
||||
} else if (_lastPresses.Count >= 2) {
|
||||
if (_lastPresses[^1] == Key && _lastPresses[^2] == LKey) {
|
||||
IsPressed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
UpdateDotInput();
|
||||
}
|
||||
|
||||
private bool UpdateDotInput() {
|
||||
_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 UpdateLInput() {
|
||||
_lWasPressed = _lPressed;
|
||||
short lState = Win32API.GetAsyncKeyState(LKey);
|
||||
|
||||
if (!_lWasPressed && lState != 0) {
|
||||
_lPressed = true;
|
||||
return true;
|
||||
}
|
||||
if (_lPressed && lState == 0) {
|
||||
_lPressed = false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
3
Assets/Scripts/Domain/Input/GeminadaReader.cs.meta
Normal file
3
Assets/Scripts/Domain/Input/GeminadaReader.cs.meta
Normal file
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 057b144441c443ccb0a24de75397b551
|
||||
timeCreated: 1713114678
|
|
@ -1,17 +1,15 @@
|
|||
namespace Domain.Input {
|
||||
public abstract class InputReader {
|
||||
private bool _wasPressed;
|
||||
private bool _isPressed;
|
||||
protected bool WasPressed;
|
||||
protected bool IsPressed;
|
||||
|
||||
protected abstract int Key { get; }
|
||||
|
||||
public void UpdateInput() {
|
||||
_wasPressed = _isPressed;
|
||||
_isPressed = Win32API.GetAsyncKeyState(Key) != 0;
|
||||
public virtual void UpdateInput() {
|
||||
WasPressed = IsPressed;
|
||||
IsPressed = Win32API.GetAsyncKeyState(Key) != 0;
|
||||
}
|
||||
|
||||
public bool KeyDown() => _isPressed && !_wasPressed;
|
||||
public bool KeyPressed() => _isPressed;
|
||||
public bool KeyUp() => !_isPressed && _wasPressed;
|
||||
public bool KeyDown() => IsPressed && !WasPressed;
|
||||
}
|
||||
}
|
34
Assets/Scripts/Domain/KeyHistory.cs
Normal file
34
Assets/Scripts/Domain/KeyHistory.cs
Normal file
|
@ -0,0 +1,34 @@
|
|||
using System.Collections.Generic;
|
||||
|
||||
namespace Domain {
|
||||
public class KeyHistory {
|
||||
private readonly List<int> _lastPresses = new();
|
||||
private readonly List<int> _desiredSequence;
|
||||
|
||||
public KeyHistory(List<int> desiredSequence) {
|
||||
_desiredSequence = desiredSequence;
|
||||
}
|
||||
|
||||
public void KeyPressed(int key) => _lastPresses.Add(key);
|
||||
public void ClearPressed() => _lastPresses.Clear();
|
||||
|
||||
public bool ContainsSequence() {
|
||||
if (_lastPresses.Count < _desiredSequence.Count)
|
||||
return false;
|
||||
|
||||
for (int i = 0; i < _lastPresses.Count; i++) {
|
||||
if (i >= _desiredSequence.Count)
|
||||
break;
|
||||
|
||||
int keyPressed = _lastPresses[_lastPresses.Count - 1 - i];
|
||||
int sequenceKey = _desiredSequence[_desiredSequence.Count - 1 - i];
|
||||
|
||||
if (keyPressed != sequenceKey) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
3
Assets/Scripts/Domain/KeyHistory.cs.meta
Normal file
3
Assets/Scripts/Domain/KeyHistory.cs.meta
Normal file
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a63e60d016a84434ac8ae1855004239e
|
||||
timeCreated: 1713116240
|
Loading…
Add table
Add a link
Reference in a new issue