]> git.lizzy.rs Git - dragonfireclient.git/commitdiff
Fix player sprite visibility in first person
authorsfan5 <sfan5@live.de>
Tue, 10 Nov 2020 20:36:58 +0000 (21:36 +0100)
committersfan5 <sfan5@live.de>
Thu, 12 Nov 2020 20:08:26 +0000 (21:08 +0100)
closes #10525

src/client/content_cao.cpp

index c52bc62c52d2e554c5bcebbf9b61c9ff13b5e5bb..c645900aa258c3c903359bd65f8dfd18fcbb8c4e 100644 (file)
@@ -1919,13 +1919,23 @@ void GenericCAO::updateMeshCulling()
        if (!m_is_local_player)
                return;
 
-       // Grab the active player scene node so we know there's
-       // at least a mesh to occlude from the camera.
+       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;
+       }
+
        irr::scene::ISceneNode *node = getSceneNode();
        if (!node)
                return;
 
-       if (m_client->getCamera()->getCameraMode() == CAMERA_MODE_FIRST) {
+       if (hidden) {
                // Hide the mesh by culling both front and
                // back faces. Serious hackyness but it works for our
                // purposes. This also preserves the skeletal armature.