aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDanila Shutov <dcbrwn2@gmail.com>2020-03-17 00:58:13 +0300
committerGitHub <noreply@github.com>2020-03-16 22:58:13 +0100
commit5c1b72544a6158346b7d8608c895678fe7d5a19b (patch)
treee7e60a4fce51f67d7d91a0ba450823edcb3635f5 /src
parentca646487f22223ef676d928ba9345e41cff63e43 (diff)
downloadminetest-5c1b72544a6158346b7d8608c895678fe7d5a19b.tar.gz
minetest-5c1b72544a6158346b7d8608c895678fe7d5a19b.tar.bz2
minetest-5c1b72544a6158346b7d8608c895678fe7d5a19b.zip
Fix entity lighting (#9514)
fixes #9482
Diffstat (limited to 'src')
-rw-r--r--src/client/content_cao.cpp72
-rw-r--r--src/client/content_cao.h2
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();