]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/client/content_cao.cpp
Fix lighting of upright_sprite entities (#12336)
[dragonfireclient.git] / src / client / content_cao.cpp
index 19569d4b62239df4183b73b9741bf64a3dac1a04..9c3e5aa059c46c82a6dfb98dca0abe39f88158a2 100644 (file)
@@ -435,7 +435,7 @@ const v3f GenericCAO::getPosition() const
        return m_position;
 }
 
-const bool GenericCAO::isImmortal()
+bool GenericCAO::isImmortal() const
 {
        return itemgroup_get(getGroups(), "immortal");
 }
@@ -905,12 +905,8 @@ void GenericCAO::setNodeLight(const video::SColor &light_color)
                if (m_prop.visual == "upright_sprite") {
                        if (!m_meshnode)
                                return;
-
-                       scene::IMesh *mesh = m_meshnode->getMesh();
-                       for (u32 i = 0; i < mesh->getMeshBufferCount(); ++i) {
-                               scene::IMeshBuffer *buf = mesh->getMeshBuffer(i);
-                               buf->getMaterial().EmissiveColor = light_color;
-                       }
+                       for (u32 i = 0; i < m_meshnode->getMaterialCount(); ++i)
+                               m_meshnode->getMaterial(i).EmissiveColor = light_color;
                } else {
                        scene::ISceneNode *node = getSceneNode();
                        if (!node)
@@ -1974,20 +1970,17 @@ void GenericCAO::updateMeshCulling()
 
        const bool hidden = m_client->getCamera()->getCameraMode() == CAMERA_MODE_FIRST;
 
-       if (m_meshnode && m_prop.visual == "upright_sprite") {
-               u32 buffers = m_meshnode->getMesh()->getMeshBufferCount();
-               for (u32 i = 0; i < buffers; i++) {
-                       video::SMaterial &mat = m_meshnode->getMesh()->getMeshBuffer(i)->getMaterial();
-                       // upright sprite has no backface culling
-                       mat.setFlag(video::EMF_FRONT_FACE_CULLING, hidden);
-               }
-               return;
-       }
-
        scene::ISceneNode *node = getSceneNode();
+
        if (!node)
                return;
 
+       if (m_prop.visual == "upright_sprite") {
+               // upright sprite has no backface culling
+               node->setMaterialFlag(video::EMF_FRONT_FACE_CULLING, hidden);
+               return;
+       }
+
        if (hidden) {
                // Hide the mesh by culling both front and
                // back faces. Serious hackyness but it works for our