pass both logical key & physical key to input handler on keyboard keypress

This commit is contained in:
Nick Fisher
2025-05-21 12:01:47 +08:00
parent e432b0be1d
commit 9a6bacc73f
5 changed files with 70 additions and 39 deletions

View File

@@ -64,16 +64,16 @@ class DelegateInputHandler implements InputHandler {
_processing = true;
final delegate = delegates.first;
final keyUp = <PhysicalKey, KeyEvent>{};
final keyDown = <PhysicalKey, KeyEvent>{};
final keyUp = <LogicalKey, KeyEvent>{};
final keyDown = <LogicalKey, KeyEvent>{};
for (final event in _events) {
if (event is KeyEvent) {
switch (event.type) {
case KeyEventType.up:
keyUp[event.key] = event;
keyUp[event.logicalKey] = event;
case KeyEventType.down:
keyDown[event.key] = event;
keyDown[event.logicalKey] = event;
}
}
}

View File

@@ -69,32 +69,33 @@ class FreeFlightInputHandlerDelegateV2 implements InputHandlerDelegate {
break;
case ScaleEndEvent(numPointers: final numPointers):
break;
case KeyEvent(type: final type, key: var key):
switch (key) {
case PhysicalKey.A:
case KeyEvent(type: final type, logicalKey: var logicalKey, physicalKey: var physicalKey ):
switch (physicalKey) {
case PhysicalKey.a:
translation += Vector3(
-sensitivity.keySensitivity,
0,
0,
);
break;
case PhysicalKey.S:
case PhysicalKey.s:
translation += Vector3(0, 0, sensitivity.keySensitivity);
break;
case PhysicalKey.D:
case PhysicalKey.d:
translation += Vector3(
sensitivity.keySensitivity,
0,
0,
);
break;
case PhysicalKey.W:
case PhysicalKey.w:
translation += Vector3(
0,
0,
-sensitivity.keySensitivity,
);
break;
default:
}
break;
}

View File

@@ -80,13 +80,16 @@ class ScrollEvent extends InputEvent {
class KeyEvent extends InputEvent {
final KeyEventType type;
final PhysicalKey key;
final LogicalKey logicalKey;
final PhysicalKey physicalKey;
KeyEvent(this.type, this.key);
KeyEvent(this.type, this.logicalKey, this.physicalKey);
}
enum KeyEventType { down, up }
enum PhysicalKey { W, A, S, D }
enum LogicalKey { w, a, s, d, g, r, shift, esc, del }
enum PhysicalKey { w, a, s, d, g, r, shift, esc, del }
enum InputAction { TRANSLATE, ROTATE, PICK, ZOOM, NONE }