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
@@ -66,6 +66,18 @@ namespace Map {
|
||||
};
|
||||
}
|
||||
|
||||
// Parser comú d'una 2-tupla d'enters (offset de llum). Retorna
|
||||
// nullopt si el node no és una seqüència de 2 elements. Sense
|
||||
// clamp: els offsets negatius són legítims (Y creix cap avall,
|
||||
// així que `y: -3` puja la llum 3 px).
|
||||
auto parseIntPair(const fkyaml::node& node) -> std::optional<std::array<int, 2>> {
|
||||
if (!node.is_sequence() || node.size() != 2) { return std::nullopt; }
|
||||
return std::array<int, 2>{
|
||||
node[0].get_value<int>(),
|
||||
node[1].get_value<int>(),
|
||||
};
|
||||
}
|
||||
|
||||
// Llegeix el bloc opcional `lighting:` del YAML d'una sala i
|
||||
// actualitza `light_level`, `lighting_mode` i el mapping
|
||||
// `g_room_emitters`. Idempotent: cada `Map::loadFrom` reseteja
|
||||
@@ -102,6 +114,7 @@ namespace Map {
|
||||
if (val.contains("radius")) { ov.radius = val["radius"].get_value<int>(); }
|
||||
if (val.contains("flicker")) { ov.flicker = val["flicker"].get_value<bool>(); }
|
||||
if (val.contains("color")) { ov.color = parseColorTriplet(val["color"]); }
|
||||
if (val.contains("offset")) { ov.offset = parseIntPair(val["offset"]); }
|
||||
}
|
||||
g_room_emitters[KEY] = ov;
|
||||
}
|
||||
|
||||
@@ -95,6 +95,10 @@ namespace Map {
|
||||
// del tipus (default blanc 255,255,255 si el tipus no en declara).
|
||||
// La forma YAML és `color: [r, g, b]` (bytes 0..255).
|
||||
std::optional<std::array<std::uint8_t, 3>> color;
|
||||
// Offset del centre del cercle de llum respecte el centre del
|
||||
// sprite (píxels enters; Y creix avall). `nullopt` → conservar
|
||||
// l'offset del tipus (default [0, 0]). Forma YAML: `offset: [x, y]`.
|
||||
std::optional<std::array<int, 2>> offset;
|
||||
};
|
||||
|
||||
// Consulta l'override de sala per a un tipus d'entitat (clau singular,
|
||||
|
||||
Reference in new issue
Block a user