feat(collisions): filtre per altura — saltar esquiva momies, roques i altres jugadors

This commit is contained in:
JailDesigner committed 2026-04-25 11:49:48 +02:00
1 parent 7b09a076b2
commit cd50626b88
11 files changed
+88 -1

No files matched your search

+12
View File
@@ -113,6 +113,17 @@ class Entity {
// Entitats sense animació retornen `nullopt` → frame 0 per defecte.
[[nodiscard]] auto getAnimation() const -> const std::optional<AnimationComponent>& { return anim_; }
// Alçada del cos de l'entitat en píxels. La consulten els filtres
// de col·lisió per altura: si un jugador en l'aire passa per damunt
// d'aquest valor (jump_z_ > height), no col·lisiona amb l'entitat —
// és la mecànica del salt per esquivar momies, roques, etc. Valor
// 0 = sense altura (no es pot esquivar saltant; per a entitats amb
// collides=false el camp és irrellevant). Per a obstacles que
// representen "murs" (sarcs, portes), el YAML els pot donar un
// valor molt alt (p.ex. 999) per fer-los infranquejables.
[[nodiscard]] auto getHeight() const -> int { return height_; }
void setHeight(int h) { height_ = h; }
// Caixa de col·lisió: per defecte és el `pixel_rect_` sencer (entitats
// AABB-aligned). Si s'ha configurat un `CollisionBox`, retorna el
// sub-rect dins del sprite — vida útil: validar col·lisions amb el
@@ -150,6 +161,7 @@ class Entity {
std::shared_ptr<Surface> surface_{nullptr};
bool collides_{false};
bool interactable_{false};
int height_{0};
SDL_FlipMode flip_{SDL_FLIP_NONE};
EventBus* bus_{nullptr};
};