InputHandler now accepts a List of events, not a Set

add batch argument to DelegateInputHandler
This commit is contained in:
Nick Fisher
2025-05-10 09:07:19 +08:00
parent fac7e9a894
commit 12a96cceee

View File

@@ -9,7 +9,7 @@ import 'implementations/free_flight_camera_delegate.dart';
typedef PointerEventDetails = (Vector2 localPosition, Vector2 delta); typedef PointerEventDetails = (Vector2 localPosition, Vector2 delta);
abstract class InputHandlerDelegate { abstract class InputHandlerDelegate {
Future handle(Set<InputEvent> events); Future handle(List<InputEvent> events);
} }
/// ///
@@ -24,10 +24,13 @@ class DelegateInputHandler implements InputHandler {
Stream<List<InputEvent>> get events => _gesturesController.stream; Stream<List<InputEvent>> get events => _gesturesController.stream;
final _gesturesController = StreamController<List<InputEvent>>.broadcast(); final _gesturesController = StreamController<List<InputEvent>>.broadcast();
final _events = <InputEvent>{}; final _events = <InputEvent>[];
final List<InputHandlerDelegate> delegates; final List<InputHandlerDelegate> delegates;
DelegateInputHandler({required this.viewer, required this.delegates}) { final bool batch;
DelegateInputHandler(
{required this.viewer, required this.delegates, this.batch = true}) {
FilamentApp.instance!.registerRequestFrameHook(process); FilamentApp.instance!.registerRequestFrameHook(process);
} }
@@ -69,7 +72,7 @@ class DelegateInputHandler implements InputHandler {
case KeyEventType.down: case KeyEventType.down:
keyDown[event.key] = event; keyDown[event.key] = event;
} }
} }
} }
for (final key in keyUp.keys) { for (final key in keyUp.keys) {
_events.remove(keyDown[key]); _events.remove(keyDown[key]);
@@ -95,5 +98,8 @@ class DelegateInputHandler implements InputHandler {
} }
_events.add(event); _events.add(event);
if (!this.batch) {
await process();
}
} }
} }