summaryrefslogtreecommitdiff
path: root/src/mapblock.cpp
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-04-03 16:21:06 +0300
committerPerttu Ahola <celeron55@gmail.com>2011-04-03 16:21:06 +0300
commit01c2b003e1efb839ad246eb939af7fa8336b9ad5 (patch)
tree9771fbd3321709f6aff0761ed7efc5a177823352 /src/mapblock.cpp
parent06eb0ad4d063c696afa53cad75824c7778c5c157 (diff)
downloadminetest-01c2b003e1efb839ad246eb939af7fa8336b9ad5.tar.gz
minetest-01c2b003e1efb839ad246eb939af7fa8336b9ad5.tar.bz2
minetest-01c2b003e1efb839ad246eb939af7fa8336b9ad5.zip
commit before some more radical changes
Diffstat (limited to 'src/mapblock.cpp')
-rw-r--r--src/mapblock.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/mapblock.cpp b/src/mapblock.cpp
index 66833addb..26280dec4 100644
--- a/src/mapblock.cpp
+++ b/src/mapblock.cpp
@@ -799,6 +799,7 @@ void MapBlock::updateMesh(u32 daynight_ratio)
{
video::SColor c(255,255,255,255);
+ // Wall at X+ of node
video::S3DVertex vertices[4] =
{
video::S3DVertex(-BS/2,-BS/2,0, 0,0,0, c, 0,1),
@@ -855,6 +856,61 @@ void MapBlock::updateMesh(u32 daynight_ratio)
collector.append(material, vertices, 4, indices, 6);
}
/*
+ Signs on walls
+ */
+ if(n.d == CONTENT_SIGN_WALL)
+ {
+ u8 l = decode_light(n.getLightBlend(daynight_ratio));
+ video::SColor c(255,l,l,l);
+
+ float d = (float)BS/16;
+ // Wall at X+ of node
+ video::S3DVertex vertices[4] =
+ {
+ video::S3DVertex(BS/2-d,-BS/2,-BS/2, 0,0,0, c, 0,1),
+ video::S3DVertex(BS/2-d,-BS/2,BS/2, 0,0,0, c, 1,1),
+ video::S3DVertex(BS/2-d,BS/2,BS/2, 0,0,0, c, 1,0),
+ video::S3DVertex(BS/2-d,BS/2,-BS/2, 0,0,0, c, 0,0),
+ };
+
+ v3s16 dir = unpackDir(n.dir);
+
+ for(s32 i=0; i<4; i++)
+ {
+ if(dir == v3s16(1,0,0))
+ vertices[i].Pos.rotateXZBy(0);
+ if(dir == v3s16(-1,0,0))
+ vertices[i].Pos.rotateXZBy(180);
+ if(dir == v3s16(0,0,1))
+ vertices[i].Pos.rotateXZBy(90);
+ if(dir == v3s16(0,0,-1))
+ vertices[i].Pos.rotateXZBy(-90);
+ if(dir == v3s16(0,-1,0))
+ vertices[i].Pos.rotateXYBy(-90);
+ if(dir == v3s16(0,1,0))
+ vertices[i].Pos.rotateXYBy(90);
+
+ vertices[i].Pos += intToFloat(p + getPosRelative(), BS);
+ }
+
+ // Set material
+ video::SMaterial material;
+ material.setFlag(video::EMF_LIGHTING, false);
+ material.setFlag(video::EMF_BACK_FACE_CULLING, false);
+ material.setFlag(video::EMF_BILINEAR_FILTER, false);
+ material.setFlag(video::EMF_FOG_ENABLE, true);
+ //material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
+ material.MaterialType
+ = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
+
+ material.setTexture(0,
+ g_texturesource->getTextureRaw("sign_wall.png"));
+
+ u16 indices[] = {0,1,2,2,3,0};
+ // Add to mesh collector
+ collector.append(material, vertices, 4, indices, 6);
+ }
+ /*
Add flowing water to mesh
*/
else if(n.d == CONTENT_WATER)