physics: apply server flight speed to flying mount movement

serverFlightSpeed_ (from SMSG_FORCE_FLIGHT_SPEED_CHANGE) was stored but
never synced to CameraController. Add getServerFlightSpeed() accessor,
flightSpeedOverride_ field, and use it in the flying physics path so
normal vs epic flying mounts actually move at their correct speeds.
This commit is contained in:
Kelsi 2026-03-10 13:25:10 -07:00
parent 27d18b2189
commit a1ee9827d8
4 changed files with 8 additions and 1 deletions

View file

@ -1011,6 +1011,7 @@ void Application::update(float deltaTime) {
renderer->getCameraController()->setRunSpeedOverride(gameHandler->getServerRunSpeed());
renderer->getCameraController()->setWalkSpeedOverride(gameHandler->getServerWalkSpeed());
renderer->getCameraController()->setSwimSpeedOverride(gameHandler->getServerSwimSpeed());
renderer->getCameraController()->setFlightSpeedOverride(gameHandler->getServerFlightSpeed());
renderer->getCameraController()->setMovementRooted(gameHandler->isPlayerRooted());
renderer->getCameraController()->setGravityDisabled(gameHandler->isGravityDisabled());
renderer->getCameraController()->setFeatherFallActive(gameHandler->isFeatherFalling());

View file

@ -714,7 +714,10 @@ void CameraController::update(float deltaTime) {
if (flyDescend) flyMove.z -= 1.0f;
if (glm::length(flyMove) > 0.001f) {
flyMove = glm::normalize(flyMove);
targetPos += flyMove * speed * physicsDeltaTime;
float flySpeed = (flightSpeedOverride_ > 0.0f && flightSpeedOverride_ < 200.0f
&& !std::isnan(flightSpeedOverride_))
? flightSpeedOverride_ : speed;
targetPos += flyMove * flySpeed * physicsDeltaTime;
}
targetPos.z += verticalVelocity * physicsDeltaTime;
// Skip all ground physics — go straight to collision/WMO sections