Fix taxi mount orientation and eliminate tile loading hitches

Fixes two critical taxi flight issues:

1. Mount orientation now correctly faces flight direction:
   - Prevent camera controller from updating facingYaw during taxi (externalFollow_ check)
   - Taxi orientation callback system updates mount rotation from spline tangent
   - Initial orientation set when flight starts
   - Smooth Catmull-Rom spline interpolation for natural curved paths

2. Eliminate frame hitches from tile loading during flight:
   - New taxiFlightStartCallback uploads ALL precached tiles to GPU before flight begins
   - Previously tiles loaded async during 3s mount delay but uploaded 1/frame during flight
   - Now processAllReadyTiles() blocks briefly after mount delay to batch upload everything
   - Combined with 2.0s terrain update interval and aggressive culling for smooth flight

Additional optimizations:
   - Aggressive taxi culling: skip models <15 units, all foliage/trees, underwater objects
   - Max render distance reduced to 150 units during taxi
   - Movement heartbeat packets disabled during taxi (server controls position)
   - Reduced taxi speed from 32 to 18 units/sec to prevent streaming overload
This commit is contained in:
Kelsi 2026-02-08 22:00:33 -08:00
parent 536b3cea48
commit 2e0a7e0039
7 changed files with 119 additions and 21 deletions

View file

@ -224,7 +224,8 @@ void CameraController::update(float deltaTime) {
// Get camera axes — project forward onto XY plane for walking
glm::vec3 forward3D = camera->getForward();
bool cameraDrivesFacing = rightMouseDown || mouseAutorun;
if (cameraDrivesFacing) {
// During taxi flights, orientation is controlled by the flight path, not player input
if (cameraDrivesFacing && !externalFollow_) {
facingYaw = yaw;
}
float moveYaw = cameraDrivesFacing ? yaw : facingYaw;