feat(game): spawn inicial de ROOM_INTRO sense immunitat
This commit is contained in:
1 parent
2cbf1bb6e0
commit
b7811180ba
3 files changed
+19
-8
No files matched your search
@@ -1589,10 +1589,13 @@ void Player::respawn(float x, float y) {
|
|||||||
setPosX(x);
|
setPosX(x);
|
||||||
setPosY(y);
|
setPosY(y);
|
||||||
// Immunitat post-spawn: armem la finestra de gràcia amb la durada del
|
// Immunitat post-spawn: armem la finestra de gràcia amb la durada del
|
||||||
// YAML. Cobreix l'aparició inicial (`spawnFromAir` → `respawn`) i el
|
// YAML. Cobreix el join mid-partida (`joinPlayer` → `spawnFromAir` →
|
||||||
// respawn post-mort (`respawnFromDying` → `respawn`). Si el bloc
|
// `respawn`) i el respawn post-mort (`respawnFromDying` → `respawn`).
|
||||||
// `immunity:` manca al YAML, `duration_ms` és 0 i `setImmunity` és
|
// L'spawn inicial de ROOM_INTRO també hi passa, però `triggerPlayerSpawn`
|
||||||
// no-op — comportament idèntic al d'abans.
|
// crida `setImmunity(0)` immediatament després per cancel·lar-la (els
|
||||||
|
// enemics ja estan apareixent i el jugador no ha de tindre gràcia).
|
||||||
|
// Si el bloc `immunity:` manca al YAML, `duration_ms` és 0 i el timer
|
||||||
|
// queda a 0 — sense gràcia, comportament idèntic al d'abans.
|
||||||
setImmunity(immunity_config.duration_ms);
|
setImmunity(immunity_config.duration_ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -331,11 +331,11 @@ class Player : public AnimatedSprite {
|
|||||||
// sortida lògica del món. Idempotent: una segona crida reescriu el
|
// sortida lògica del món. Idempotent: una segona crida reescriu el
|
||||||
// timer (no acumula). Visualment, el render alterna la paleta del
|
// timer (no acumula). Visualment, el render alterna la paleta del
|
||||||
// sprite amb una paleta plana cada `immunity_config.blink_period_ms`
|
// sprite amb una paleta plana cada `immunity_config.blink_period_ms`
|
||||||
// ms. Si `duration_ms <= 0` és no-op (manera de cancel·lar
|
// ms. `setImmunity(0)` cancel·la la immunitat activa (sobreescriu el
|
||||||
// explícitament la immunitat seria `setImmunity(0)` — equivalent al
|
// timer a 0) — equivalent al comportament natural quan el timer
|
||||||
// comportament natural quan el timer s'esgota).
|
// s'esgota. Valors negatius es clampejen a 0.
|
||||||
void setImmunity(float duration_ms) {
|
void setImmunity(float duration_ms) {
|
||||||
if (duration_ms > 0.0F) { immunity_remaining_ms_ = duration_ms; }
|
immunity_remaining_ms_ = duration_ms > 0.0F ? duration_ms : 0.0F;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cert mentre el jugador té immunitat activa. Comprovat per
|
// Cert mentre el jugador té immunitat activa. Comprovat per
|
||||||
|
|||||||
@@ -701,6 +701,14 @@ void GameScene::triggerPlayerSpawn(std::size_t slot_index) {
|
|||||||
// pot canviar de geometria de porta entre cicles.
|
// pot canviar de geometria de porta entre cicles.
|
||||||
players_[slot_index]->setSpawnPoint(x, SPAWN.y);
|
players_[slot_index]->setSpawnPoint(x, SPAWN.y);
|
||||||
players_[slot_index]->spawnFromAir(x, SPAWN.y);
|
players_[slot_index]->spawnFromAir(x, SPAWN.y);
|
||||||
|
// Spawn inicial sense gràcia: l'aparició coincideix amb el moment
|
||||||
|
// en què comencen a aparèixer els enemics, i la finestra d'immunitat
|
||||||
|
// que arma `respawn` deixaria al jugador immune just quan ja hauria
|
||||||
|
// de poder ser tocat. Cancel·lem el timer recent armat. Els altres
|
||||||
|
// camins (`joinPlayer` mid-partida i `respawnFromDying`) sí que
|
||||||
|
// mantenen la immunitat: són situacions on el jugador apareix enmig
|
||||||
|
// de l'acció ja en curs i necessita la finestra de gràcia.
|
||||||
|
players_[slot_index]->setImmunity(0.0F);
|
||||||
// Arma el reverb del primer LAND com a part de la cinemàtica
|
// Arma el reverb del primer LAND com a part de la cinemàtica
|
||||||
// d'INTRO. Una sola vegada per spawn aeri: el respawn post-mort
|
// d'INTRO. Una sola vegada per spawn aeri: el respawn post-mort
|
||||||
// (que no passa per ací) cau al camí sec. Si el preset està buit
|
// (que no passa per ací) cau al camí sec. Si el preset està buit
|
||||||
|
|||||||
Reference in new issue
Block a user