physics: sync all server movement speeds to CameraController

Previously only run speed was synced. Now all server-driven movement
speeds are forwarded to the camera controller each frame:
- runSpeedOverride_: server run speed (existing)
- walkSpeedOverride_: server walk speed (Ctrl key movement)
- swimSpeedOverride_: swim speed (Swim Form, Engineering fins)
- flightSpeedOverride_: flight speed (epic vs normal flying mounts)
- runBackSpeedOverride_: back-pedal speed

Each uses the server value when non-zero/sane, falling back to the
hardcoded WoW default constant otherwise.
This commit is contained in:
Kelsi 2026-03-10 13:28:53 -07:00
parent a1ee9827d8
commit 56ec49f837
4 changed files with 7 additions and 1 deletions

View file

@ -1155,6 +1155,7 @@ public:
float getServerWalkSpeed() const { return serverWalkSpeed_; } float getServerWalkSpeed() const { return serverWalkSpeed_; }
float getServerSwimSpeed() const { return serverSwimSpeed_; } float getServerSwimSpeed() const { return serverSwimSpeed_; }
float getServerFlightSpeed() const { return serverFlightSpeed_; } float getServerFlightSpeed() const { return serverFlightSpeed_; }
float getServerRunBackSpeed() const { return serverRunBackSpeed_; }
bool isPlayerRooted() const { bool isPlayerRooted() const {
return (movementInfo.flags & static_cast<uint32_t>(MovementFlags::ROOT)) != 0; return (movementInfo.flags & static_cast<uint32_t>(MovementFlags::ROOT)) != 0;
} }

View file

@ -95,6 +95,7 @@ public:
void setWalkSpeedOverride(float speed) { walkSpeedOverride_ = speed; } void setWalkSpeedOverride(float speed) { walkSpeedOverride_ = speed; }
void setSwimSpeedOverride(float speed) { swimSpeedOverride_ = speed; } void setSwimSpeedOverride(float speed) { swimSpeedOverride_ = speed; }
void setFlightSpeedOverride(float speed) { flightSpeedOverride_ = speed; } void setFlightSpeedOverride(float speed) { flightSpeedOverride_ = speed; }
void setRunBackSpeedOverride(float speed) { runBackSpeedOverride_ = speed; }
void setMovementRooted(bool rooted) { movementRooted_ = rooted; } void setMovementRooted(bool rooted) { movementRooted_ = rooted; }
bool isMovementRooted() const { return movementRooted_; } bool isMovementRooted() const { return movementRooted_; }
void setGravityDisabled(bool disabled) { gravityDisabled_ = disabled; } void setGravityDisabled(bool disabled) { gravityDisabled_ = disabled; }
@ -280,6 +281,7 @@ private:
float walkSpeedOverride_ = 0.0f; float walkSpeedOverride_ = 0.0f;
float swimSpeedOverride_ = 0.0f; float swimSpeedOverride_ = 0.0f;
float flightSpeedOverride_ = 0.0f; float flightSpeedOverride_ = 0.0f;
float runBackSpeedOverride_ = 0.0f;
// Server-driven root state: when true, block all horizontal movement input. // Server-driven root state: when true, block all horizontal movement input.
bool movementRooted_ = false; bool movementRooted_ = false;
// Server-driven gravity disable (levitate/hover): skip gravity accumulation. // Server-driven gravity disable (levitate/hover): skip gravity accumulation.

View file

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

View file

@ -318,7 +318,9 @@ void CameraController::update(float deltaTime) {
if (useWoWSpeed) { if (useWoWSpeed) {
// Movement speeds (WoW-like: Ctrl walk, default run, backpedal slower) // Movement speeds (WoW-like: Ctrl walk, default run, backpedal slower)
if (nowBackward && !nowForward) { if (nowBackward && !nowForward) {
speed = WOW_BACK_SPEED; speed = (runBackSpeedOverride_ > 0.0f && runBackSpeedOverride_ < 100.0f
&& !std::isnan(runBackSpeedOverride_))
? runBackSpeedOverride_ : WOW_BACK_SPEED;
} else if (ctrlDown) { } else if (ctrlDown) {
speed = (walkSpeedOverride_ > 0.0f && walkSpeedOverride_ < 100.0f && !std::isnan(walkSpeedOverride_)) speed = (walkSpeedOverride_ > 0.0f && walkSpeedOverride_ < 100.0f && !std::isnan(walkSpeedOverride_))
? walkSpeedOverride_ : WOW_WALK_SPEED; ? walkSpeedOverride_ : WOW_WALK_SPEED;