process method

Future<void> process()

Implementation

Future<void> process() async {
  _processing = true;
  for (var gestureType in _inputDeltas.keys) {
    var vector = _inputDeltas[gestureType]!;
    var action = _actions[gestureType];
    if (action == null) {
      continue;
    }
    final transform = _axes[gestureType];
    if (transform != null) {
      vector = transform * vector;
    }

    await transformDelegate?.queue(action, vector);
  }
  final keyTypes = <InputType>[];
  for (final key in _pressedKeys) {
    InputAction? keyAction;
    InputType? keyType = null;
    Vector3? vector;

    switch (key) {
      case PhysicalKey.W:
        keyType = InputType.KEYDOWN_W;
        vector = Vector3(0, 0, -1);
        break;
      case PhysicalKey.A:
        keyType = InputType.KEYDOWN_A;
        vector = Vector3(-1, 0, 0);
        break;
      case PhysicalKey.S:
        keyType = InputType.KEYDOWN_S;
        vector = Vector3(0, 0, 1);
        break;
      case PhysicalKey.D:
        keyType = InputType.KEYDOWN_D;
        vector = Vector3(1, 0, 0);
        break;
    }

    // ignore: unnecessary_null_comparison
    if (keyType != null) {
      keyAction = _actions[keyType];

      if (keyAction != null) {
        var transform = _axes[keyAction];
        if (transform != null) {
          vector = transform * vector;
        }
        transformDelegate?.queue(keyAction, vector!);
        keyTypes.add(keyType);
      }
    }
  }

  await transformDelegate?.execute();
  var updates = _inputDeltas.keys.followedBy(keyTypes).toList();
  if (updates.isNotEmpty) {
    _gesturesController.add(updates);
    _cameraUpdatedController.add(true);
  }

  _inputDeltas.clear();
  _processing = false;
}