feat(lighting): flicker tipus foc per antorxes

This commit is contained in:
JailDesigner committed 2026-05-12 22:07:25 +02:00
1 parent 3195746189
commit 35aaa6c519
8 files changed
+124 -16

No files matched your search

@@ -155,15 +155,23 @@ namespace {
return c["height"].get_value<int>();
}
// Bloc opcional `light: { radius: N }` de la plantilla. Si manca, el
// radi és 0 i l'entitat no entra a la pasada d'il·luminació. La forma
// del gradient (3 anells) viu a data/config/lighting.yaml — no cal
// declarar-la per entitat.
auto readLightRadius(const fkyaml::node& tmpl) -> int {
if (!tmpl.contains("light")) { return 0; }
// Bloc opcional `light: { radius: N, flicker: bool }` de la plantilla.
// Si manca, el radi és 0 i l'entitat no entra a la pasada d'il·luminació.
// `flicker` activa la modulació "tipus foc" del radi (només antorxes
// l'haurien d'usar). La forma del gradient (3 anells) i els paràmetres
// del flicker viuen a data/config/lighting.yaml — no cal declarar-los
// per entitat.
struct LightTemplate {
int radius{0};
bool flicker{false};
};
auto readLight(const fkyaml::node& tmpl) -> LightTemplate {
if (!tmpl.contains("light")) { return {}; }
const auto& l = tmpl["light"];
if (!l.contains("radius")) { return 0; }
return l["radius"].get_value<int>();
LightTemplate out;
if (l.contains("radius")) { out.radius = l["radius"].get_value<int>(); }
if (l.contains("flicker")) { out.flicker = l["flicker"].get_value<bool>(); }
return out;
}
// Bloc `collision: { size: [w, h], base_size: [bw, bh]?, offset: [x, y]? }`
@@ -288,7 +296,9 @@ namespace {
entity->setCollisionBox(*BOX);
}
entity->setHeight(readHeight(tmpl));
entity->setLightRadius(readLightRadius(tmpl));
const auto LIGHT = readLight(tmpl);
entity->setLightRadius(LIGHT.radius);
entity->setLightFlicker(LIGHT.flicker);
anchor_out = readAnchor(tmpl);
return entity;
}