physics: block client-side movement when server roots the player

When SMSG_FORCE_MOVE_ROOT sets ROOT in movementInfo.flags, the
camera controller was not aware and continued to accept directional
input. This caused position desync (client moves, server sees player
as rooted).

- Add movementRooted_ flag to CameraController with setter/getter.
- Block nowForward/nowBackward/nowStrafe when movementRooted_ is set.
- Sync isPlayerRooted() from GameHandler to CameraController each
  frame alongside the existing run-speed sync in application.cpp.
- Add GameHandler::isPlayerRooted() convenience accessor.
This commit is contained in:
Kelsi 2026-03-10 13:01:44 -07:00
parent ea291179dd
commit 21604461fc
4 changed files with 12 additions and 2 deletions

View file

@ -1009,6 +1009,7 @@ void Application::update(float deltaTime) {
runInGameStage("post-update sync", [&] {
if (renderer && gameHandler && renderer->getCameraController()) {
renderer->getCameraController()->setRunSpeedOverride(gameHandler->getServerRunSpeed());
renderer->getCameraController()->setMovementRooted(gameHandler->isPlayerRooted());
}
bool onTaxi = gameHandler &&