mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-23 07:40:14 +00:00
Fix movement desync: strafe animation and missing SET_FACING
Two bugs caused the client to look like a bot to server GMs: 1. Strafe animation played during forward+strafe (W+A) instead of the walk/run animation. Added pureStrafe guard so strafe animations only play when exclusively strafing (no forward key or auto-run active). 2. CMSG_MOVE_SET_FACING was never sent on mouse-look turns. The server predicts movement from the last known facing; without SET_FACING the heartbeat position appeared to teleport each time the player changed direction. Now sent at up to 10 Hz whenever facing changes >3°, skipped while keyboard-turning (handled server-side by TURN flags).
This commit is contained in:
parent
4e5d424b34
commit
2bbd0fdc5f
5 changed files with 31 additions and 2 deletions
|
|
@ -820,6 +820,26 @@ void Application::update(float deltaTime) {
|
|||
// equivalent canonical yaw is radians(180 - yawDeg).
|
||||
float canonicalYaw = core::coords::normalizeAngleRad(glm::radians(180.0f - yawDeg));
|
||||
gameHandler->setOrientation(canonicalYaw);
|
||||
|
||||
// Send CMSG_MOVE_SET_FACING when the player changes facing direction
|
||||
// (e.g. via mouse-look). Without this, the server predicts movement in
|
||||
// the old facing and position-corrects on the next heartbeat — the
|
||||
// micro-teleporting the GM observed.
|
||||
// Skip while keyboard-turning: the server tracks that via TURN_LEFT/RIGHT flags.
|
||||
facingSendCooldown_ -= deltaTime;
|
||||
const auto& mi = gameHandler->getMovementInfo();
|
||||
constexpr uint32_t kTurnFlags =
|
||||
static_cast<uint32_t>(game::MovementFlags::TURN_LEFT) |
|
||||
static_cast<uint32_t>(game::MovementFlags::TURN_RIGHT);
|
||||
bool keyboardTurning = (mi.flags & kTurnFlags) != 0;
|
||||
if (!keyboardTurning && facingSendCooldown_ <= 0.0f) {
|
||||
float yawDiff = core::coords::normalizeAngleRad(canonicalYaw - lastSentCanonicalYaw_);
|
||||
if (std::abs(yawDiff) > glm::radians(3.0f)) {
|
||||
gameHandler->sendMovement(game::Opcode::CMSG_MOVE_SET_FACING);
|
||||
lastSentCanonicalYaw_ = canonicalYaw;
|
||||
facingSendCooldown_ = 0.1f; // max 10 Hz
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue