mirror of
https://github.com/luanti-org/luanti.git
synced 2025-08-01 17:38:41 +00:00
ContentCAO: Update light of all attached entities (#9975)
This commit is contained in:
parent
f849917bbe
commit
a08d18acad
4 changed files with 22 additions and 60 deletions
|
@ -181,7 +181,7 @@ public:
|
|||
|
||||
void addToScene(ITextureSource *tsrc);
|
||||
void removeFromScene(bool permanent);
|
||||
void updateLight(u8 light_at_pos);
|
||||
void updateLight(u32 day_night_ratio);
|
||||
v3s16 getLightPosition();
|
||||
void updateNodePos();
|
||||
|
||||
|
@ -254,7 +254,7 @@ void TestCAO::removeFromScene(bool permanent)
|
|||
m_node = NULL;
|
||||
}
|
||||
|
||||
void TestCAO::updateLight(u8 light_at_pos)
|
||||
void TestCAO::updateLight(u32 day_night_ratio)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -784,34 +784,22 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
|
|||
setNodeLight(m_last_light);
|
||||
}
|
||||
|
||||
void GenericCAO::updateLight(u8 light_at_pos)
|
||||
void GenericCAO::updateLight(u32 day_night_ratio)
|
||||
{
|
||||
// Don't update light of attached one
|
||||
if (getParent() != NULL) {
|
||||
return;
|
||||
}
|
||||
u8 light_at_pos = 0;
|
||||
bool pos_ok;
|
||||
|
||||
updateLightNoCheck(light_at_pos);
|
||||
v3s16 p = getLightPosition();
|
||||
MapNode n = m_env->getMap().getNode(p, &pos_ok);
|
||||
if (pos_ok)
|
||||
light_at_pos = n.getLightBlend(day_night_ratio, m_client->ndef());
|
||||
else
|
||||
light_at_pos = blend_light(day_night_ratio, LIGHT_SUN, 0);
|
||||
|
||||
// Update light of all children
|
||||
for (u16 i : m_attachment_child_ids) {
|
||||
ClientActiveObject *obj = m_env->getActiveObject(i);
|
||||
if (obj) {
|
||||
obj->updateLightNoCheck(light_at_pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GenericCAO::updateLightNoCheck(u8 light_at_pos)
|
||||
{
|
||||
if (m_glow < 0)
|
||||
return;
|
||||
|
||||
u8 li = decode_light(light_at_pos + m_glow);
|
||||
|
||||
if (li != m_last_light) {
|
||||
m_last_light = li;
|
||||
setNodeLight(li);
|
||||
u8 light = decode_light(light_at_pos);
|
||||
if (light != m_last_light) {
|
||||
m_last_light = light;
|
||||
setNodeLight(light);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue