pitch method

void pitch(
  1. double angle, {
  2. bool lockView = false,
  3. bool rotateAroundTarget = false,
  4. bool rotateUp = false,
})

Implementation

void pitch(
  double angle, {
  bool lockView = false,
  bool rotateAroundTarget = false,
  bool rotateUp = false,
}) {
  var localAngle = angle;
  final up = this.up;
  final targetPosition = target - position;

  if (lockView) {
    final maxAngleUp = up.angleTo(targetPosition);
    if (localAngle > maxAngleUp) {
      localAngle = maxAngleUp;
    }

    var maxAngleDown = (-up).angleTo(targetPosition);
    maxAngleDown *= -1.0;

    if (localAngle < maxAngleDown) {
      localAngle = maxAngleDown;
    }
  }

  final right = this.right;
  targetPosition.applyAxisAngle(right, localAngle);

  if (rotateAroundTarget) {
    position.setValues(
      target.x - targetPosition.x,
      target.y - targetPosition.y,
      target.z - targetPosition.z,
    );
  } else {
    target.setValues(
      position.x + targetPosition.x,
      position.y + targetPosition.y,
      position.z + targetPosition.z,
    );
  }

  if (rotateUp) {
    _up.applyAxisAngle(right, angle);
  }
}