feat(lighting): offset del centre de la llum per emissor
This commit is contained in:
1 parent
dacc4a9909
commit
3a42c7958a
9 files changed
+114
-25
No files matched your search
@@ -280,6 +280,22 @@ class Entity {
|
||||
light_color_b_ = b;
|
||||
}
|
||||
|
||||
// Desplaçament en píxels del centre del cercle de llum respecte el
|
||||
// centre visual del sprite (que és el que retornaria per defecte
|
||||
// `getLightCenter`). Útil quan el "punt de llum" iconogràfic no
|
||||
// coincideix amb el centre del bounding box — per exemple, la flama
|
||||
// d'una antorxa està a la part de dalt del sprite i interessa pujar
|
||||
// l'emissor 3-4 px per a que el cercle de llum surti de la flama,
|
||||
// no del peu. Y creix cap avall al canvas, així que `y: -3` puja
|
||||
// la llum 3 píxels. Cadena de resolució idèntica al color: tipus →
|
||||
// sala → spawn.
|
||||
[[nodiscard]] auto getLightOffsetX() const -> int { return light_offset_x_; }
|
||||
[[nodiscard]] auto getLightOffsetY() const -> int { return light_offset_y_; }
|
||||
void setLightOffset(int x, int y) {
|
||||
light_offset_x_ = x;
|
||||
light_offset_y_ = y;
|
||||
}
|
||||
|
||||
// Identificador estable per al flicker. Cada Entity rep un valor
|
||||
// únic a la construcció (contador estàtic) i el conserva fins a la
|
||||
// mort — així el patró del flicker no "deriva" quan l'entitat es
|
||||
@@ -288,11 +304,13 @@ class Entity {
|
||||
// un problema.
|
||||
[[nodiscard]] auto getLightSeed() const -> int { return light_seed_; }
|
||||
|
||||
// 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.
|
||||
// Centre de la llum en píxels del canvas. Per defecte és el centre
|
||||
// del `pixel_rect_` (caixa de render) més l'offset configurat al
|
||||
// YAML (`light.offset: [x, y]`). 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 — l'override n'és
|
||||
// responsable d'incloure l'offset (com fa `Player::getLightCenter`).
|
||||
[[nodiscard]] virtual auto getLightCenter() const -> SDL_FPoint;
|
||||
|
||||
protected:
|
||||
@@ -319,6 +337,8 @@ class Entity {
|
||||
std::uint8_t light_color_r_{255};
|
||||
std::uint8_t light_color_g_{255};
|
||||
std::uint8_t light_color_b_{255};
|
||||
int light_offset_x_{0};
|
||||
int light_offset_y_{0};
|
||||
bool dead_{false};
|
||||
SDL_FlipMode flip_{SDL_FLIP_NONE};
|
||||
EventBus* bus_{nullptr};
|
||||
|
||||
Reference in new issue
Block a user