feat(hazard): nou hazard Hole — caiguda per forat amb clip rect
This commit is contained in:
1 parent
d4593d0686
commit
4da50571eb
17 files changed
+376
-15
No files matched your search
@@ -88,6 +88,27 @@ class Entity {
|
||||
[[nodiscard]] auto collides() const -> bool { return collides_; }
|
||||
[[nodiscard]] auto interactable() const -> bool { return interactable_; }
|
||||
|
||||
// Trigger d'àrea: l'entitat NO bloqueja el moviment (`collides_=false`)
|
||||
// però sí vol rebre `onPlayerContact` quan el jugador la solapa. Pensat
|
||||
// per a hazards "no físics" (forats al sòl, picos retràctils, plaques
|
||||
// de pressió). El bucle de contacte (`checkPlayerCollisions`) admet
|
||||
// l'entitat si compleix `collides_ || triggers_on_overlap_`. El filtre
|
||||
// d'altura per salt (`height_`) i la caixa de col·lisió funcionen igual.
|
||||
[[nodiscard]] auto triggersOnOverlap() const -> bool { return triggers_on_overlap_; }
|
||||
void setTriggersOnOverlap(bool v) { triggers_on_overlap_ = v; }
|
||||
|
||||
// Decal de sòl: hazards estàtics sense presència vertical (forats,
|
||||
// plaques de pressió, charcos). Es pinten ABANS de qualsevol actor
|
||||
// dins del Y-sort de `GameScene` perquè conceptualment són "pintura
|
||||
// sobre el tile". Implementació: `getFeetY()` retorna un sentinel
|
||||
// mínim (`std::numeric_limits<float>::lowest()`) per quedar al
|
||||
// principi del `stable_sort` ascendent — així no calen passades de
|
||||
// render extra. Les subclasses (p.ex. `Hole`) poden sobreescriure
|
||||
// `getFeetY` per saltar-se el sentinel en moments concrets (p.ex.
|
||||
// un forat que està tragant un jugador i ha de pintar-se al damunt).
|
||||
[[nodiscard]] auto isFloorDecal() const -> bool { return is_floor_decal_; }
|
||||
void setFloorDecal(bool v) { is_floor_decal_ = v; }
|
||||
|
||||
// Marca per a entitats transitòries: efectes (polvet, espurnes,
|
||||
// explosions...) que viuen una sola animació i s'autoeliminen quan
|
||||
// acaba. L'`EntityManager` purga totes les entitats amb `dead_=true`
|
||||
@@ -172,6 +193,8 @@ class Entity {
|
||||
std::shared_ptr<Surface> surface_{nullptr};
|
||||
bool collides_{false};
|
||||
bool interactable_{false};
|
||||
bool triggers_on_overlap_{false};
|
||||
bool is_floor_decal_{false};
|
||||
int height_{0};
|
||||
bool dead_{false};
|
||||
SDL_FlipMode flip_{SDL_FLIP_NONE};
|
||||
|
||||
Reference in new issue
Block a user