writeMovement method
void
writeMovement(})
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,
);
}