added drawallfaces to luaentities 20120204_luaentity_allfaces
authorsapier <sapier at gmx dot net>
Sat, 4 Feb 2012 17:08:25 +0000 (18:08 +0100)
committersapier <sapier at gmx dot net>
Sat, 4 Feb 2012 17:08:25 +0000 (18:08 +0100)
src/content_cao.cpp
src/mesh.cpp
src/mesh.h

index 37da0f67d718ddf2903bac00ac01decbe72c7150..d08be6f1a71d1fcd98c9339b418933498a4dde4b 100644 (file)
@@ -1815,6 +1815,15 @@ public:
                        m_meshnode = smgr->addMeshSceneNode(mesh, NULL);
                        mesh->drop();
                        
+                       m_meshnode->setScale(v3f(1));
+                       // Will be shown when we know the brightness
+                       m_meshnode->setVisible(false);
+               } else if(m_prop->visual == "cube_allfaces"){
+                       infostream<<"LuaEntityCAO::addToScene(): cube_allfaces"<<std::endl;
+                       scene::IMesh *mesh = createCubeMesh(v3f(BS,BS,BS),true);
+                       m_meshnode = smgr->addMeshSceneNode(mesh, NULL);
+                       mesh->drop();
+
                        m_meshnode->setScale(v3f(1));
                        // Will be shown when we know the brightness
                        m_meshnode->setVisible(false);
index 44b3b9bbbe32f2ebafa4f41b0052944c24f4d0f7..134f2b30d139e57744fda8a401115e31db1f3464 100644 (file)
@@ -33,7 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #define MY_ETLM_READ_ONLY video::ETLM_READ_ONLY
 #endif
 
-scene::IAnimatedMesh* createCubeMesh(v3f scale)
+scene::IAnimatedMesh* createCubeMesh(v3f scale,bool allfaces)
 {
        video::SColor c(255,255,255,255);
        video::S3DVertex vertices[24] =
@@ -86,6 +86,58 @@ scene::IAnimatedMesh* createCubeMesh(v3f scale)
                buf->drop();
        }
 
+       if (allfaces) {
+               video::S3DVertex vertices[24] =
+               {
+                       // Up
+                       video::S3DVertex(-0.5,-0.5,-0.5, 0,1,0, c, 0,1),
+                       video::S3DVertex(-0.5,-0.5,+0.5, 0,1,0, c, 0,0),
+                       video::S3DVertex(+0.5,-0.5,+0.5, 0,1,0, c, 1,0),
+                       video::S3DVertex(+0.5,-0.5,-0.5, 0,1,0, c, 1,1),
+                       // Down
+                       video::S3DVertex(-0.5,+0.5,-0.5, 0,-1,0, c, 0,0),
+                       video::S3DVertex(+0.5,+0.5,-0.5, 0,-1,0, c, 1,0),
+                       video::S3DVertex(+0.5,+0.5,+0.5, 0,-1,0, c, 1,1),
+                       video::S3DVertex(-0.5,+0.5,+0.5, 0,-1,0, c, 0,1),
+                       // Right
+                       video::S3DVertex(-0.5,-0.5,-0.5, 1,0,0, c, 0,1),
+                       video::S3DVertex(-0.5,+0.5,-0.5, 1,0,0, c, 0,0),
+                       video::S3DVertex(-0.5,+0.5,+0.5, 1,0,0, c, 1,0),
+                       video::S3DVertex(-0.5,-0.5,+0.5, 1,0,0, c, 1,1),
+                       // Left
+                       video::S3DVertex(+0.5,-0.5,-0.5, -1,0,0, c, 1,1),
+                       video::S3DVertex(+0.5,-0.5,+0.5, -1,0,0, c, 0,1),
+                       video::S3DVertex(+0.5,+0.5,+0.5, -1,0,0, c, 0,0),
+                       video::S3DVertex(+0.5,+0.5,-0.5, -1,0,0, c, 1,0),
+                       // Back
+                       video::S3DVertex(-0.5,-0.5,-0.5, 0,0,1, c, 1,1),
+                       video::S3DVertex(+0.5,-0.5,-0.5, 0,0,1, c, 0,1),
+                       video::S3DVertex(+0.5,+0.5,-0.5, 0,0,1, c, 0,0),
+                       video::S3DVertex(-0.5,+0.5,-0.5, 0,0,1, c, 1,0),
+                       // Front
+                       video::S3DVertex(-0.5,-0.5,+0.5, 0,0,-1, c, 0,1),
+                       video::S3DVertex(-0.5,+0.5,+0.5, 0,0,-1, c, 0,0),
+                       video::S3DVertex(+0.5,+0.5,+0.5, 0,0,-1, c, 1,0),
+                       video::S3DVertex(+0.5,-0.5,+0.5, 0,0,-1, c, 1,1),
+               };
+
+               u16 indices[6] = {0,1,2,2,3,0};
+
+               for (u32 i=0; i<6; ++i)
+               {
+                       scene::IMeshBuffer *buf = new scene::SMeshBuffer();
+                       buf->append(vertices + 4 * i, 4, indices, 6);
+                       // Set default material
+                       buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
+                       buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
+                       buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
+                       // Add mesh buffer to mesh
+                       mesh->addMeshBuffer(buf);
+                       buf->drop();
+               }
+
+       }
+
        scene::SAnimatedMesh *anim_mesh = new scene::SAnimatedMesh(mesh);
        mesh->drop();
        scaleMesh(anim_mesh, scale);  // also recalculates bounding box
index 631dc0cca111e5b32f2772a3e85ef3564110a2e7..89c8fae030b25ba7efb25d57f67082e0869e9b7b 100644 (file)
@@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
        The resulting mesh has 6 materials (up, down, right, left, back, front)
        which must be defined by the caller.
 */
-scene::IAnimatedMesh* createCubeMesh(v3f scale);
+scene::IAnimatedMesh* createCubeMesh(v3f scale, bool allfaces=false);
 
 /*
        Create a new cube mesh not linked to mapnode size.