From 4667e0abf987ce06bbb223a97b0b9920b50bf50c Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sat, 25 Apr 2026 15:17:45 +0200 Subject: [PATCH] =?UTF-8?q?fix(player):=20saltar=20enmig=20d'un=20gir=20de?= =?UTF-8?q?=20180=C2=B0=20comprometeix=20la=20direcci=C3=B3=20final?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/player/sam.yaml | 2 +- source/game/entities/player.cpp | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/data/player/sam.yaml b/data/player/sam.yaml index 828fc93..a685f11 100644 --- a/data/player/sam.yaml +++ b/data/player/sam.yaml @@ -111,7 +111,7 @@ turn: jump: impulse: 200 gravity: 600 - landing_stun_ms: 200 + landing_stun_ms: 300 shadow_y_offset: 3 sound: jump.wav land_sound: land.wav diff --git a/source/game/entities/player.cpp b/source/game/entities/player.cpp index 42b4e3b..1f1e23b 100644 --- a/source/game/entities/player.cpp +++ b/source/game/entities/player.cpp @@ -559,6 +559,20 @@ void Player::startJump() { // empentant en mig d'un frame on intentàvem saltar, el flanc es perd // — comportament acceptable: l'empenta guanya al toc curt. if (state_ != State::GROUNDED) { return; } + + // Un gir de 180° en curs es compromet immediatament: si l'usuari + // ha disparat un giro (oest→est, p.ex.) i salta abans que s'esgote + // el timer, l'animació del salt ha de mostrar la direcció final + // (jump lateral), no la intermèdia (jump_down). Aplem el pending + // ara mateix i resetem l'estat del gir. Si no hi havia gir en + // curs, és no-op. + if (turning_remaining_ms_ > 0.0F) { + applyCardinal(pending_cardinal_); + turning_remaining_ms_ = 0.0F; + pending_cardinal_ = Cardinal::NONE; + intermediate_cardinal_ = Cardinal::NONE; + } + state_ = State::AIRBORNE; jump_z_ = 0.0F; jump_vz_ = jump_config.impulse_px_per_s;