feat(entities): light_radius + getLightCenter a Entity i Player

This commit is contained in:
JailDesigner committed 2026-05-12 21:06:01 +02:00
1 parent 68be8e55ec
commit ebb161f1f5
5 files changed
+67

No files matched your search

+14
View File
@@ -253,6 +253,19 @@ class Entity {
[[nodiscard]] auto getFlip() const -> SDL_FlipMode { return flip_; }
void setFlip(SDL_FlipMode flip) { flip_ = flip; }
// Radi de la llum emesa per aquesta entitat (en píxels del canvas).
// 0 = no emet (cas habitual). El bloc opcional `light: { radius: N }`
// del YAML de la plantilla el pobla via `EntityManager::buildEntity`.
[[nodiscard]] auto getLightRadius() const -> int { return light_radius_; }
void setLightRadius(int r) { light_radius_ = r; }
// Centre de la llum en píxels del canvas. Per defecte és el centre del
// `pixel_rect_` (que és la caixa de render: sprite top-left + mida).
// Virtual perquè entitats amb desplaçament visual sobre la posició
// lògica (p.ex. el Player en l'aire, que rebaixa visualment `pos_.y`
// amb `jump_z_`) puguin retornar el centre que realment es veu.
[[nodiscard]] virtual auto getLightCenter() const -> SDL_FPoint;
protected:
std::string name_;
TilePos tile_{};
@@ -266,6 +279,7 @@ class Entity {
bool is_floor_decal_{false};
bool blocks_movement_{false};
int height_{0};
int light_radius_{0};
bool dead_{false};
SDL_FlipMode flip_{SDL_FLIP_NONE};
EventBus* bus_{nullptr};