mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-17 17:43:52 +00:00
physics: add server swim-back speed override to CameraController
Backward swimming was using 50% of forward swim speed as a hardcoded fallback. Wire up the server-authoritative swim back speed so Warlock Dark Pact, buffs, and server-forced speed changes all apply correctly when swimming backward. - game_handler.hpp: add getServerSwimBackSpeed() accessor - camera_controller.hpp: add swimBackSpeedOverride_ field + setter - camera_controller.cpp: apply swimBackSpeedOverride_ when player swims backward without forward input; fall back to 50% of swim speed - application.cpp: sync swim back speed each frame
This commit is contained in:
parent
23293d6453
commit
a33f635490
4 changed files with 11 additions and 1 deletions
|
|
@ -1154,6 +1154,7 @@ public:
|
||||||
float getServerRunSpeed() const { return serverRunSpeed_; }
|
float getServerRunSpeed() const { return serverRunSpeed_; }
|
||||||
float getServerWalkSpeed() const { return serverWalkSpeed_; }
|
float getServerWalkSpeed() const { return serverWalkSpeed_; }
|
||||||
float getServerSwimSpeed() const { return serverSwimSpeed_; }
|
float getServerSwimSpeed() const { return serverSwimSpeed_; }
|
||||||
|
float getServerSwimBackSpeed() const { return serverSwimBackSpeed_; }
|
||||||
float getServerFlightSpeed() const { return serverFlightSpeed_; }
|
float getServerFlightSpeed() const { return serverFlightSpeed_; }
|
||||||
float getServerRunBackSpeed() const { return serverRunBackSpeed_; }
|
float getServerRunBackSpeed() const { return serverRunBackSpeed_; }
|
||||||
bool isPlayerRooted() const {
|
bool isPlayerRooted() const {
|
||||||
|
|
|
||||||
|
|
@ -94,6 +94,7 @@ public:
|
||||||
void setRunSpeedOverride(float speed) { runSpeedOverride_ = speed; }
|
void setRunSpeedOverride(float speed) { runSpeedOverride_ = speed; }
|
||||||
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 setSwimBackSpeedOverride(float speed) { swimBackSpeedOverride_ = speed; }
|
||||||
void setFlightSpeedOverride(float speed) { flightSpeedOverride_ = speed; }
|
void setFlightSpeedOverride(float speed) { flightSpeedOverride_ = 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; }
|
||||||
|
|
@ -281,6 +282,7 @@ private:
|
||||||
float runSpeedOverride_ = 0.0f;
|
float runSpeedOverride_ = 0.0f;
|
||||||
float walkSpeedOverride_ = 0.0f;
|
float walkSpeedOverride_ = 0.0f;
|
||||||
float swimSpeedOverride_ = 0.0f;
|
float swimSpeedOverride_ = 0.0f;
|
||||||
|
float swimBackSpeedOverride_ = 0.0f;
|
||||||
float flightSpeedOverride_ = 0.0f;
|
float flightSpeedOverride_ = 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.
|
||||||
|
|
|
||||||
|
|
@ -1011,6 +1011,7 @@ void Application::update(float deltaTime) {
|
||||||
renderer->getCameraController()->setRunSpeedOverride(gameHandler->getServerRunSpeed());
|
renderer->getCameraController()->setRunSpeedOverride(gameHandler->getServerRunSpeed());
|
||||||
renderer->getCameraController()->setWalkSpeedOverride(gameHandler->getServerWalkSpeed());
|
renderer->getCameraController()->setWalkSpeedOverride(gameHandler->getServerWalkSpeed());
|
||||||
renderer->getCameraController()->setSwimSpeedOverride(gameHandler->getServerSwimSpeed());
|
renderer->getCameraController()->setSwimSpeedOverride(gameHandler->getServerSwimSpeed());
|
||||||
|
renderer->getCameraController()->setSwimBackSpeedOverride(gameHandler->getServerSwimBackSpeed());
|
||||||
renderer->getCameraController()->setFlightSpeedOverride(gameHandler->getServerFlightSpeed());
|
renderer->getCameraController()->setFlightSpeedOverride(gameHandler->getServerFlightSpeed());
|
||||||
renderer->getCameraController()->setRunBackSpeedOverride(gameHandler->getServerRunBackSpeed());
|
renderer->getCameraController()->setRunBackSpeedOverride(gameHandler->getServerRunBackSpeed());
|
||||||
renderer->getCameraController()->setMovementRooted(gameHandler->isPlayerRooted());
|
renderer->getCameraController()->setMovementRooted(gameHandler->isPlayerRooted());
|
||||||
|
|
|
||||||
|
|
@ -537,6 +537,10 @@ void CameraController::update(float deltaTime) {
|
||||||
// Use character's facing direction for strafe, not camera's right vector
|
// Use character's facing direction for strafe, not camera's right vector
|
||||||
glm::vec3 swimRight = right; // Character's right (horizontal facing), not camera's
|
glm::vec3 swimRight = right; // Character's right (horizontal facing), not camera's
|
||||||
|
|
||||||
|
float swimBackSpeed = (swimBackSpeedOverride_ > 0.0f && swimBackSpeedOverride_ < 100.0f
|
||||||
|
&& !std::isnan(swimBackSpeedOverride_))
|
||||||
|
? swimBackSpeedOverride_ : swimSpeed * 0.5f;
|
||||||
|
|
||||||
glm::vec3 swimMove(0.0f);
|
glm::vec3 swimMove(0.0f);
|
||||||
if (nowForward) swimMove += swimForward;
|
if (nowForward) swimMove += swimForward;
|
||||||
if (nowBackward) swimMove -= swimForward;
|
if (nowBackward) swimMove -= swimForward;
|
||||||
|
|
@ -545,7 +549,9 @@ void CameraController::update(float deltaTime) {
|
||||||
|
|
||||||
if (glm::length(swimMove) > 0.001f) {
|
if (glm::length(swimMove) > 0.001f) {
|
||||||
swimMove = glm::normalize(swimMove);
|
swimMove = glm::normalize(swimMove);
|
||||||
targetPos += swimMove * swimSpeed * physicsDeltaTime;
|
// Use backward swim speed when moving backwards only (not when combining with strafe)
|
||||||
|
float applySpeed = (nowBackward && !nowForward) ? swimBackSpeed : swimSpeed;
|
||||||
|
targetPos += swimMove * applySpeed * physicsDeltaTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Spacebar = swim up (continuous, not a jump)
|
// Spacebar = swim up (continuous, not a jump)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue