mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 09:15:29 +01:00 
			
		
		
		
	Upright sprite objects: Horizontally flip the front image
For consistent horizontal sprite structure when seen from front and back Fix code style
This commit is contained in:
		@@ -839,54 +839,50 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr,
 | 
			
		||||
			setBillboardTextureMatrix(m_spritenode,
 | 
			
		||||
					txs, tys, 0, 0);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else if(m_prop.visual == "upright_sprite") {
 | 
			
		||||
	} else if (m_prop.visual == "upright_sprite") {
 | 
			
		||||
		scene::SMesh *mesh = new scene::SMesh();
 | 
			
		||||
		double dx = BS*m_prop.visual_size.X/2;
 | 
			
		||||
		double dy = BS*m_prop.visual_size.Y/2;
 | 
			
		||||
		{ // Front
 | 
			
		||||
		scene::IMeshBuffer *buf = new scene::SMeshBuffer();
 | 
			
		||||
		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::S3DVertex vertices[4] =
 | 
			
		||||
		{
 | 
			
		||||
			video::S3DVertex(-dx,-dy,0, 0,0,0, c, 0,1),
 | 
			
		||||
			video::S3DVertex(dx,-dy,0, 0,0,0, c, 1,1),
 | 
			
		||||
			video::S3DVertex(dx,dy,0, 0,0,0, c, 1,0),
 | 
			
		||||
			video::S3DVertex(-dx,dy,0, 0,0,0, c, 0,0),
 | 
			
		||||
		};
 | 
			
		||||
		u16 indices[] = {0,1,2,2,3,0};
 | 
			
		||||
		buf->append(vertices, 4, indices, 6);
 | 
			
		||||
		// Set material
 | 
			
		||||
		buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
 | 
			
		||||
		buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
 | 
			
		||||
		buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
 | 
			
		||||
		buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
 | 
			
		||||
		// Add to mesh
 | 
			
		||||
		mesh->addMeshBuffer(buf);
 | 
			
		||||
		buf->drop();
 | 
			
		||||
		video::SColor c(255, li, li, li);
 | 
			
		||||
 | 
			
		||||
		{ // Front
 | 
			
		||||
			scene::IMeshBuffer *buf = new scene::SMeshBuffer();
 | 
			
		||||
			video::S3DVertex vertices[4] = {
 | 
			
		||||
				video::S3DVertex(-dx, -dy, 0, 0,0,0, c, 1,1),
 | 
			
		||||
				video::S3DVertex( dx, -dy, 0, 0,0,0, c, 0,1),
 | 
			
		||||
				video::S3DVertex( dx,  dy, 0, 0,0,0, c, 0,0),
 | 
			
		||||
				video::S3DVertex(-dx,  dy, 0, 0,0,0, c, 1,0),
 | 
			
		||||
			};
 | 
			
		||||
			u16 indices[] = {0,1,2,2,3,0};
 | 
			
		||||
			buf->append(vertices, 4, indices, 6);
 | 
			
		||||
			// Set material
 | 
			
		||||
			buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
 | 
			
		||||
			buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
 | 
			
		||||
			buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
 | 
			
		||||
			buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
 | 
			
		||||
			// Add to mesh
 | 
			
		||||
			mesh->addMeshBuffer(buf);
 | 
			
		||||
			buf->drop();
 | 
			
		||||
		}
 | 
			
		||||
		{ // Back
 | 
			
		||||
		scene::IMeshBuffer *buf = new scene::SMeshBuffer();
 | 
			
		||||
		u8 li = m_last_light;
 | 
			
		||||
		video::SColor c(255,li,li,li);
 | 
			
		||||
		video::S3DVertex vertices[4] =
 | 
			
		||||
		{
 | 
			
		||||
			video::S3DVertex(dx,-dy,0, 0,0,0, c, 1,1),
 | 
			
		||||
			video::S3DVertex(-dx,-dy,0, 0,0,0, c, 0,1),
 | 
			
		||||
			video::S3DVertex(-dx,dy,0, 0,0,0, c, 0,0),
 | 
			
		||||
			video::S3DVertex(dx,dy,0, 0,0,0, c, 1,0),
 | 
			
		||||
		};
 | 
			
		||||
		u16 indices[] = {0,1,2,2,3,0};
 | 
			
		||||
		buf->append(vertices, 4, indices, 6);
 | 
			
		||||
		// Set material
 | 
			
		||||
		buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
 | 
			
		||||
		buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
 | 
			
		||||
		buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
 | 
			
		||||
		buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
 | 
			
		||||
		// Add to mesh
 | 
			
		||||
		mesh->addMeshBuffer(buf);
 | 
			
		||||
		buf->drop();
 | 
			
		||||
			scene::IMeshBuffer *buf = new scene::SMeshBuffer();
 | 
			
		||||
			video::S3DVertex vertices[4] = {
 | 
			
		||||
				video::S3DVertex( dx,-dy, 0, 0,0,0, c, 1,1),
 | 
			
		||||
				video::S3DVertex(-dx,-dy, 0, 0,0,0, c, 0,1),
 | 
			
		||||
				video::S3DVertex(-dx, dy, 0, 0,0,0, c, 0,0),
 | 
			
		||||
				video::S3DVertex( dx, dy, 0, 0,0,0, c, 1,0),
 | 
			
		||||
			};
 | 
			
		||||
			u16 indices[] = {0,1,2,2,3,0};
 | 
			
		||||
			buf->append(vertices, 4, indices, 6);
 | 
			
		||||
			// Set material
 | 
			
		||||
			buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
 | 
			
		||||
			buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
 | 
			
		||||
			buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
 | 
			
		||||
			buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
 | 
			
		||||
			// Add to mesh
 | 
			
		||||
			mesh->addMeshBuffer(buf);
 | 
			
		||||
			buf->drop();
 | 
			
		||||
		}
 | 
			
		||||
		m_meshnode = smgr->addMeshSceneNode(mesh, NULL);
 | 
			
		||||
		m_meshnode->grab();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user