feat(player): so de hurt al morir + respawn cinemàtic amb limbo invisible
This commit is contained in:
1 parent
9f0a566ffb
commit
38070b33aa
1 file changed
+20
-5
@@ -1075,6 +1075,13 @@ void Player::enterDying() {
|
||||
death_animation_complete_ = false;
|
||||
respawn_remaining_ms_ = 0.0F;
|
||||
setCurrentAnimation("death_spinning");
|
||||
|
||||
// So del cop letal: reaprofitem `hurt.wav` (ja precarregat per
|
||||
// `readHurtBlock`). El bloc `death:` no té camp de so propi —
|
||||
// semànticament l'impacte mortal és la versió forta de `hurt`.
|
||||
if (!hurt_config.sound_key.empty() && Audio::get() != nullptr) {
|
||||
Audio::get()->playSound(hurt_config.sound_key, Audio::Group::GAME);
|
||||
}
|
||||
}
|
||||
|
||||
void Player::applyDyingMovement(float delta_time) {
|
||||
@@ -1101,11 +1108,12 @@ void Player::respawnFromDying() {
|
||||
--lives_remaining_;
|
||||
death_animation_complete_ = false;
|
||||
respawn_remaining_ms_ = 0.0F;
|
||||
// `respawn` reseteja l'estat (GROUNDED, facing SOUTH, animació
|
||||
// `stand_south`) i mou el sprite a les coords del spawn que el
|
||||
// GameScene ha assignat. No fem `spawnFromAir` per disseny: el
|
||||
// respawn post-mort és sec, sense cinemàtica de caiguda.
|
||||
respawn(spawn_x_, spawn_y_);
|
||||
// Cinemàtica idèntica a la d'INTRO de sala: el jugador cau des de
|
||||
// dalt fins al passadís d'spawn (`spawnFromAir` reseteja primer i
|
||||
// després posa AIRBORNE amb l'altura derivada de la geometria).
|
||||
// Així el respawn post-mort comparteix tota la sensació visual i
|
||||
// física del primer spawn — incloent el LANDING_STUN final.
|
||||
spawnFromAir(spawn_x_, spawn_y_);
|
||||
}
|
||||
|
||||
void Player::applyHurtMovement(float delta_time) {
|
||||
@@ -1160,6 +1168,13 @@ void Player::render() {
|
||||
// vector.
|
||||
if (isOutOfPlay()) { return; }
|
||||
|
||||
// Limbo post-mort: durant `respawn_delay_ms` entre la fi de
|
||||
// `death_spinning` i el `spawnFromAir`, el jugador queda invisible.
|
||||
// Així el cicle complet és: animació rodant → desapareix → ressuscita
|
||||
// caient des de dalt. Sense aquest gat, el sprite quedaria pintat al
|
||||
// darrer frame de la roda mentre passa el delay.
|
||||
if (state_ == State::DYING && death_animation_complete_) { return; }
|
||||
|
||||
// Mentre el jugador està enlaire, el sprite es desplaça visualment
|
||||
// cap amunt `jump_z_` píxels. Modifiquem `pos_.y` (la posició entera
|
||||
// de render) abans de cridar el render base, i la restaurem després
|
||||
|
||||
Reference in new issue
Block a user