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;