copy input events before passing to delegate

This commit is contained in:
Nick Fisher
2025-05-15 16:54:03 +08:00
parent 871a327d99
commit 66f3e20489

View File

@@ -3,8 +3,6 @@ import 'package:logging/logging.dart';
import 'package:thermion_dart/src/input/src/implementations/fixed_orbit_camera_delegate_v2.dart'; import 'package:thermion_dart/src/input/src/implementations/fixed_orbit_camera_delegate_v2.dart';
import 'package:thermion_dart/src/input/src/implementations/free_flight_camera_delegate_v2.dart'; import 'package:thermion_dart/src/input/src/implementations/free_flight_camera_delegate_v2.dart';
import 'package:thermion_dart/thermion_dart.dart'; import 'package:thermion_dart/thermion_dart.dart';
import 'implementations/fixed_orbit_camera_rotation_delegate.dart';
import 'implementations/free_flight_camera_delegate.dart';
typedef PointerEventDetails = (Vector2 localPosition, Vector2 delta); typedef PointerEventDetails = (Vector2 localPosition, Vector2 delta);
@@ -28,7 +26,7 @@ class DelegateInputHandler implements InputHandler {
final List<InputHandlerDelegate> delegates; final List<InputHandlerDelegate> delegates;
final bool batch; final bool batch;
bool _ready = false; bool _ready = false;
bool _processing = false; bool _processing = false;
@@ -62,6 +60,7 @@ class DelegateInputHandler implements InputHandler {
]); ]);
Future<void> process() async { Future<void> process() async {
_processing = true; _processing = true;
final delegate = delegates.first; final delegate = delegates.first;
@@ -83,7 +82,7 @@ class DelegateInputHandler implements InputHandler {
_events.remove(keyUp[key]); _events.remove(keyUp[key]);
} }
await delegate.handle(_events); await delegate.handle(_events.sublist(0));
_events.clear(); _events.clear();
_events.addAll(keyDown.values); _events.addAll(keyDown.values);
@@ -97,8 +96,7 @@ class DelegateInputHandler implements InputHandler {
@override @override
Future handle(InputEvent event) async { Future handle(InputEvent event) async {
if (!_ready || _processing) {
if (!_ready) {
return; return;
} }