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
@@ -153,6 +153,8 @@ void Player::readLightBlock(const fkyaml::node& yaml) {
|
||||
light_color_r = 255;
|
||||
light_color_g = 255;
|
||||
light_color_b = 255;
|
||||
light_offset_x = 0;
|
||||
light_offset_y = 0;
|
||||
if (!yaml.contains("light")) { return; }
|
||||
const auto& l = yaml["light"];
|
||||
if (l.contains("radius")) { light_radius = l["radius"].get_value<int>(); }
|
||||
@@ -167,6 +169,15 @@ void Player::readLightBlock(const fkyaml::node& yaml) {
|
||||
light_color_b = static_cast<std::uint8_t>(std::clamp(c[2].get_value<int>(), 0, 255));
|
||||
}
|
||||
}
|
||||
// `offset: [x, y]` opcional, píxels enters. Default (0, 0) → centre
|
||||
// del sprite. Y creix cap avall, així que `y: -3` puja la llum 3 px.
|
||||
if (l.contains("offset")) {
|
||||
const auto& o = l["offset"];
|
||||
if (o.is_sequence() && o.size() == 2) {
|
||||
light_offset_x = o[0].get_value<int>();
|
||||
light_offset_y = o[1].get_value<int>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Player::readCollisionBlock(const fkyaml::node& yaml, const std::string& yaml_path) {
|
||||
@@ -1492,9 +1503,10 @@ auto Player::getLightCenter() const -> SDL_FPoint {
|
||||
// Sprite top-left = (pos_.x, pos_.y). El render desplaça verticalment
|
||||
// `jump_z_` píxels durant el salt; aplicar el mateix offset aquí fa
|
||||
// que la llum "salti" amb el jugador en lloc de quedar-se al sòl.
|
||||
// Sumem també l'offset estàtic configurat al YAML del personatge.
|
||||
return {
|
||||
.x = getPosX() + (static_cast<float>(sprite_w) * 0.5F),
|
||||
.y = getPosY() - jump_z_ + (static_cast<float>(sprite_h) * 0.5F),
|
||||
.x = getPosX() + (static_cast<float>(sprite_w) * 0.5F) + static_cast<float>(light_offset_x),
|
||||
.y = getPosY() - jump_z_ + (static_cast<float>(sprite_h) * 0.5F) + static_cast<float>(light_offset_y),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user