mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-03 08:03:50 +00:00
physics: add server flight-back speed override to CameraController
SMSG_FORCE_FLIGHT_BACK_SPEED_CHANGE was already ACK'd and stored in serverFlightBackSpeed_, but the value was never accessible or synced to the CameraController. Backward flight movement always used forward flight speed (flightSpeedOverride_), making it faster than the server intended. - Add getServerFlightBackSpeed() accessor in GameHandler - Add flightBackSpeedOverride_ field and setter in CameraController - Apply it in the fly movement block: backward-only flight uses the back speed; forward or strafing uses the forward speed as WoW does - Fallback: 50% of forward flight speed when override is unset - Sync per-frame in application.cpp alongside the other speed overrides
This commit is contained in:
parent
a33f635490
commit
e2f65dfc59
4 changed files with 11 additions and 3 deletions
|
|
@ -1156,6 +1156,7 @@ public:
|
||||||
float getServerSwimSpeed() const { return serverSwimSpeed_; }
|
float getServerSwimSpeed() const { return serverSwimSpeed_; }
|
||||||
float getServerSwimBackSpeed() const { return serverSwimBackSpeed_; }
|
float getServerSwimBackSpeed() const { return serverSwimBackSpeed_; }
|
||||||
float getServerFlightSpeed() const { return serverFlightSpeed_; }
|
float getServerFlightSpeed() const { return serverFlightSpeed_; }
|
||||||
|
float getServerFlightBackSpeed() const { return serverFlightBackSpeed_; }
|
||||||
float getServerRunBackSpeed() const { return serverRunBackSpeed_; }
|
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;
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,7 @@ public:
|
||||||
void setSwimSpeedOverride(float speed) { swimSpeedOverride_ = speed; }
|
void setSwimSpeedOverride(float speed) { swimSpeedOverride_ = speed; }
|
||||||
void setSwimBackSpeedOverride(float speed) { swimBackSpeedOverride_ = speed; }
|
void setSwimBackSpeedOverride(float speed) { swimBackSpeedOverride_ = speed; }
|
||||||
void setFlightSpeedOverride(float speed) { flightSpeedOverride_ = speed; }
|
void setFlightSpeedOverride(float speed) { flightSpeedOverride_ = speed; }
|
||||||
|
void setFlightBackSpeedOverride(float speed) { flightBackSpeedOverride_ = speed; }
|
||||||
void setRunBackSpeedOverride(float speed) { runBackSpeedOverride_ = 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_; }
|
||||||
|
|
@ -284,6 +285,7 @@ private:
|
||||||
float swimSpeedOverride_ = 0.0f;
|
float swimSpeedOverride_ = 0.0f;
|
||||||
float swimBackSpeedOverride_ = 0.0f;
|
float swimBackSpeedOverride_ = 0.0f;
|
||||||
float flightSpeedOverride_ = 0.0f;
|
float flightSpeedOverride_ = 0.0f;
|
||||||
|
float flightBackSpeedOverride_ = 0.0f;
|
||||||
float runBackSpeedOverride_ = 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;
|
||||||
|
|
|
||||||
|
|
@ -1013,6 +1013,7 @@ void Application::update(float deltaTime) {
|
||||||
renderer->getCameraController()->setSwimSpeedOverride(gameHandler->getServerSwimSpeed());
|
renderer->getCameraController()->setSwimSpeedOverride(gameHandler->getServerSwimSpeed());
|
||||||
renderer->getCameraController()->setSwimBackSpeedOverride(gameHandler->getServerSwimBackSpeed());
|
renderer->getCameraController()->setSwimBackSpeedOverride(gameHandler->getServerSwimBackSpeed());
|
||||||
renderer->getCameraController()->setFlightSpeedOverride(gameHandler->getServerFlightSpeed());
|
renderer->getCameraController()->setFlightSpeedOverride(gameHandler->getServerFlightSpeed());
|
||||||
|
renderer->getCameraController()->setFlightBackSpeedOverride(gameHandler->getServerFlightBackSpeed());
|
||||||
renderer->getCameraController()->setRunBackSpeedOverride(gameHandler->getServerRunBackSpeed());
|
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());
|
||||||
|
|
|
||||||
|
|
@ -722,9 +722,13 @@ void CameraController::update(float deltaTime) {
|
||||||
if (flyDescend) flyMove.z -= 1.0f;
|
if (flyDescend) flyMove.z -= 1.0f;
|
||||||
if (glm::length(flyMove) > 0.001f) {
|
if (glm::length(flyMove) > 0.001f) {
|
||||||
flyMove = glm::normalize(flyMove);
|
flyMove = glm::normalize(flyMove);
|
||||||
float flySpeed = (flightSpeedOverride_ > 0.0f && flightSpeedOverride_ < 200.0f
|
float flyFwdSpeed = (flightSpeedOverride_ > 0.0f && flightSpeedOverride_ < 200.0f
|
||||||
&& !std::isnan(flightSpeedOverride_))
|
&& !std::isnan(flightSpeedOverride_))
|
||||||
? flightSpeedOverride_ : speed;
|
? flightSpeedOverride_ : speed;
|
||||||
|
float flyBackSpeed = (flightBackSpeedOverride_ > 0.0f && flightBackSpeedOverride_ < 200.0f
|
||||||
|
&& !std::isnan(flightBackSpeedOverride_))
|
||||||
|
? flightBackSpeedOverride_ : flyFwdSpeed * 0.5f;
|
||||||
|
float flySpeed = (nowBackward && !nowForward) ? flyBackSpeed : flyFwdSpeed;
|
||||||
targetPos += flyMove * flySpeed * physicsDeltaTime;
|
targetPos += flyMove * flySpeed * physicsDeltaTime;
|
||||||
}
|
}
|
||||||
targetPos.z += verticalVelocity * physicsDeltaTime;
|
targetPos.z += verticalVelocity * physicsDeltaTime;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue