feat(ship): la nau entra a HURT al xocar amb un enemic, mor en un segon impacte
This commit is contained in:
1 parent
c6560514d8
commit
87138f9a1f
5 files changed
+81
-7
No files matched your search
@@ -53,10 +53,31 @@ class Ship : public Entities::Entity {
|
||||
body_.velocity = Vec2{}; // Detener al morir
|
||||
}
|
||||
|
||||
// Estat "ferit": primera col·lisió amb enemic dispara HURT; segona durant HURT mata.
|
||||
void herir();
|
||||
[[nodiscard]] auto isHurt() const -> bool { return hurt_timer_ > 0.0F; }
|
||||
[[nodiscard]] auto getHurtTimer() const -> float { return hurt_timer_; }
|
||||
|
||||
// Edge-trigger del contacte amb enemics: un impacte només compta a la transició
|
||||
// no-tocant → tocant. Sense açò, el contacte continu durant el rebot frame-a-frame
|
||||
// dispararia HURT i mort en frames consecutius.
|
||||
[[nodiscard]] auto wasTouchingEnemyPrevFrame() const -> bool { return touching_enemy_prev_frame_; }
|
||||
void setTouchingEnemyPrevFrame(bool touching) { touching_enemy_prev_frame_ = touching; }
|
||||
|
||||
private:
|
||||
// Miembros específicos de Ship (heredados: renderer_, shape_, center_, angle_, brightness_, body_).
|
||||
// Inicializados en la declaración: el ctor por defecto deja la nave "viva y sin invulnerabilidad",
|
||||
// que es el estado coherente al que llevan tanto init() como el ctor con renderer.
|
||||
bool is_hit_{false};
|
||||
float invulnerable_timer_{0.0F}; // 0.0f = vulnerable, >0.0f = invulnerable
|
||||
|
||||
// Colors de la nau (propietats, prep per migració a YAML).
|
||||
SDL_Color color_normal_{Defaults::Palette::SHIP};
|
||||
SDL_Color color_hurt_{Defaults::Palette::WOUNDED};
|
||||
|
||||
// >0 → estat HURT (parpelleig color_normal_ ↔ color_hurt_).
|
||||
float hurt_timer_{0.0F};
|
||||
|
||||
// Edge-trigger: true si el frame anterior la nau ja estava en contacte amb un enemic.
|
||||
bool touching_enemy_prev_frame_{false};
|
||||
};
|
||||
Reference in new issue
Block a user