Skip to content

Commit

Permalink
Upright sprite objects: Horizontally flip the front image
Browse files Browse the repository at this point in the history
For consistent horizontal sprite structure when seen from front and back
Fix code style
  • Loading branch information
SmallJoker authored and paramat committed Jul 27, 2016
1 parent 2cb0f64 commit 8a98cbd
Showing 1 changed file with 40 additions and 44 deletions.
84 changes: 40 additions & 44 deletions src/content_cao.cpp
Expand Up @@ -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();
Expand Down

0 comments on commit 8a98cbd

Please sign in to comment.