writeMovement method

void writeMovement(
  1. Vector3 out, {
  2. required Vector3 forward,
  3. required Vector3 screenRight,
  4. required double dt,
  5. double speed = 3.0,
})

Writes an XZ-plane displacement, with no diagonal/pitch speed boost.

Implementation

void writeMovement(
  Vector3 out, {
  required Vector3 forward,
  required Vector3 screenRight,
  required double dt,
  double speed = 3.0,
}) {
  out.setZero();
  if (!dt.isFinite || dt <= 0 || !speed.isFinite || speed < 0) return;
  final forwardLength = math.sqrt(
    forward.x * forward.x + forward.z * forward.z,
  );
  final rightLength = math.sqrt(
    screenRight.x * screenRight.x + screenRight.z * screenRight.z,
  );
  if (forwardLength <= 1e-9 || rightLength <= 1e-9) return;
  final magnitude = math.max(1.0, math.sqrt(moveX * moveX + moveY * moveY));
  final distance = speed * dt / magnitude;
  out.setValues(
    (screenRight.x / rightLength * moveX +
            forward.x / forwardLength * moveY) *
        distance,
    0,
    (screenRight.z / rightLength * moveX +
            forward.z / forwardLength * moveY) *
        distance,
  );
}