diff options
author | Danila Shutov <dcbrwn2@gmail.com> | 2020-03-17 00:58:13 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-16 22:58:13 +0100 |
commit | 5c1b72544a6158346b7d8608c895678fe7d5a19b (patch) | |
tree | e7e60a4fce51f67d7d91a0ba450823edcb3635f5 /src/client | |
parent | ca646487f22223ef676d928ba9345e41cff63e43 (diff) | |
download | minetest-5c1b72544a6158346b7d8608c895678fe7d5a19b.tar.gz minetest-5c1b72544a6158346b7d8608c895678fe7d5a19b.tar.bz2 minetest-5c1b72544a6158346b7d8608c895678fe7d5a19b.zip |
Fix entity lighting (#9514)
fixes #9482
Diffstat (limited to 'src/client')
-rw-r--r-- | src/client/content_cao.cpp | 72 | ||||
-rw-r--r-- | src/client/content_cao.h | 2 |
2 files changed, 37 insertions, 37 deletions
diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index 3b203bc07..49463c3d3 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -621,8 +621,6 @@ void GenericCAO::addToScene(ITextureSource *tsrc) setSceneNodeMaterial(m_spritenode); - u8 li = m_last_light; - m_spritenode->setColor(video::SColor(255,li,li,li)); m_spritenode->setSize(v2f(m_prop.visual_size.X, m_prop.visual_size.Y) * BS); { @@ -636,8 +634,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc) scene::SMesh *mesh = new scene::SMesh(); double dx = BS * m_prop.visual_size.X / 2; double dy = BS * m_prop.visual_size.Y / 2; - u8 li = m_last_light; - video::SColor c(255, li, li, li); + video::SColor c(0xFFFFFFFF); { // Front scene::IMeshBuffer *buf = new scene::SMeshBuffer(); @@ -717,8 +714,6 @@ void GenericCAO::addToScene(ITextureSource *tsrc) mesh->drop(); m_meshnode->setScale(m_prop.visual_size); - u8 li = m_last_light; - setMeshColor(m_meshnode->getMesh(), video::SColor(255,li,li,li)); setSceneNodeMaterial(m_meshnode); } else if (m_prop.visual == "mesh") { @@ -731,12 +726,11 @@ void GenericCAO::addToScene(ITextureSource *tsrc) mesh->drop(); // The scene node took hold of it m_animated_meshnode->animateJoints(); // Needed for some animations m_animated_meshnode->setScale(m_prop.visual_size); - u8 li = m_last_light; // set vertex colors to ensure alpha is set - setMeshColor(m_animated_meshnode->getMesh(), video::SColor(255,li,li,li)); + setMeshColor(m_animated_meshnode->getMesh(), video::SColor(0xFFFFFFFF)); - setAnimatedMeshColor(m_animated_meshnode, video::SColor(255,li,li,li)); + setAnimatedMeshColor(m_animated_meshnode, video::SColor(0xFFFFFFFF)); setSceneNodeMaterial(m_animated_meshnode); @@ -766,8 +760,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc) (m_prop.visual == "wielditem")); m_wield_meshnode->setScale(m_prop.visual_size / 2.0f); - u8 li = m_last_light; - m_wield_meshnode->setColor(video::SColor(255, li, li, li)); + m_wield_meshnode->setColor(video::SColor(0xFFFFFFFF)); } else { infostream<<"GenericCAO::addToScene(): \""<<m_prop.visual <<"\" not supported"<<std::endl; @@ -795,6 +788,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc) updateAnimation(); updateBonePosition(); updateAttachments(); + setNodeLight(m_last_light); } void GenericCAO::updateLight(u8 light_at_pos) @@ -824,39 +818,43 @@ void GenericCAO::updateLightNoCheck(u8 light_at_pos) if (li != m_last_light) { m_last_light = li; - video::SColor color(255,li,li,li); + setNodeLight(li); + } +} - if (m_enable_shaders) { - scene::ISceneNode *node = getSceneNode(); +void GenericCAO::setNodeLight(u8 light) +{ + video::SColor color(255, light, light, light); - if (node == nullptr) { - return; - } + if (m_enable_shaders) { + scene::ISceneNode *node = getSceneNode(); - if (m_prop.visual == "upright_sprite") { - scene::IMesh *mesh = m_meshnode->getMesh(); - for (u32 i = 0; i < mesh->getMeshBufferCount(); ++i) { - scene::IMeshBuffer* buf = mesh->getMeshBuffer(i); - video::SMaterial& material = buf->getMaterial(); - material.EmissiveColor = color; - } - } else { - for (u32 i = 0; i < node->getMaterialCount(); ++i) { - video::SMaterial& material = node->getMaterial(i); - material.EmissiveColor = color; - } + if (node == nullptr) + return; + + if (m_prop.visual == "upright_sprite") { + scene::IMesh *mesh = m_meshnode->getMesh(); + for (u32 i = 0; i < mesh->getMeshBufferCount(); ++i) { + scene::IMeshBuffer *buf = mesh->getMeshBuffer(i); + video::SMaterial &material = buf->getMaterial(); + material.EmissiveColor = color; } } else { - if (m_meshnode) { - setMeshColor(m_meshnode->getMesh(), color); - } else if (m_animated_meshnode) { - setAnimatedMeshColor(m_animated_meshnode, color); - } else if (m_wield_meshnode) { - m_wield_meshnode->setColor(color); - } else if (m_spritenode) { - m_spritenode->setColor(color); + for (u32 i = 0; i < node->getMaterialCount(); ++i) { + video::SMaterial &material = node->getMaterial(i); + material.EmissiveColor = color; } } + } else { + if (m_meshnode) { + setMeshColor(m_meshnode->getMesh(), color); + } else if (m_animated_meshnode) { + setAnimatedMeshColor(m_animated_meshnode, color); + } else if (m_wield_meshnode) { + m_wield_meshnode->setColor(color); + } else if (m_spritenode) { + m_spritenode->setColor(color); + } } } diff --git a/src/client/content_cao.h b/src/client/content_cao.h index a1098305a..7c29cbf17 100644 --- a/src/client/content_cao.h +++ b/src/client/content_cao.h @@ -238,6 +238,8 @@ public: void updateLightNoCheck(u8 light_at_pos); + void setNodeLight(u8 light); + v3s16 getLightPosition(); void updateNodePos(); |