fire method

HitResult fire({
  1. required Shot shot,
  2. required Distance trajectoryRange,
  3. Distance? trajectoryStep,
  4. double timeStep = 0.0,
  5. int filterFlags = 8,
  6. bool raiseRangeError = true,
})

Fires a shot and returns the full trajectory as a HitResult.

trajectoryRange and trajectoryStep accept a Distance object or a raw number in the preferred distance unit.

Implementation

HitResult fire({
  required Shot shot,
  required Distance trajectoryRange,
  Distance? trajectoryStep,
  double timeStep = 0.0,
  int filterFlags = 8, // BCLIBCFFI_TrajFlag.BCLIBCFFI_TRAJ_FLAG_RANGE
  bool raiseRangeError = true,
}) {
  final rangeFt = _toFeet(trajectoryRange);
  final stepFt = trajectoryStep != null ? _toFeet(trajectoryStep) : rangeFt;

  final request = BcTrajectoryRequest(
    rangeLimitFt: rangeFt,
    rangeStepFt: stepFt,
    timeStep: timeStep,
    filterFlags: filterFlags,
  );

  late BcHitResult bcResult;
  try {
    bcResult = _engine.integrateShot(_toBcShot(shot), request);
  } on BcException catch (e) {
    if (raiseRangeError) rethrow;
    return HitResult(shot, [], filterFlags: filterFlags, error: e);
  }

  final traj = bcResult.trajectory.map(_toTrajectoryData).toList();
  return HitResult(shot, traj, filterFlags: filterFlags);
}