summaryrefslogtreecommitdiff
path: root/src/mapnode.cpp
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-06-17 23:20:31 +0300
committerPerttu Ahola <celeron55@gmail.com>2011-06-17 23:20:31 +0300
commit682c9d8e7d05ca7462eda7fee9b07fb6ad94d860 (patch)
treef3bda59d590598729992dea75a84b22f55ab3648 /src/mapnode.cpp
parentdf5affe836080d35a0e89d2799cb1b525fcdd6ce (diff)
downloadminetest-682c9d8e7d05ca7462eda7fee9b07fb6ad94d860.tar.gz
minetest-682c9d8e7d05ca7462eda7fee9b07fb6ad94d860.tar.bz2
minetest-682c9d8e7d05ca7462eda7fee9b07fb6ad94d860.zip
Moved stuff from mapblock{h,cpp} to mapblock_mesh.{h,cpp} and content_mapblock.{h,cpp}
Diffstat (limited to 'src/mapnode.cpp')
-rw-r--r--src/mapnode.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/mapnode.cpp b/src/mapnode.cpp
index 3717bf0ab..dae21e7cc 100644
--- a/src/mapnode.cpp
+++ b/src/mapnode.cpp
@@ -230,4 +230,54 @@ u8 MapNode::getMineral()
return MINERAL_NONE;
}
+/*
+ Gets lighting value at face of node
+
+ Parameters must consist of air and !air.
+ Order doesn't matter.
+
+ If either of the nodes doesn't exist, light is 0.
+
+ parameters:
+ daynight_ratio: 0...1000
+ n: getNodeParent(p)
+ n2: getNodeParent(p + face_dir)
+ face_dir: axis oriented unit vector from p to p2
+
+ returns encoded light value.
+*/
+u8 getFaceLight(u32 daynight_ratio, MapNode n, MapNode n2,
+ v3s16 face_dir)
+{
+ try{
+ u8 light;
+ u8 l1 = n.getLightBlend(daynight_ratio);
+ u8 l2 = n2.getLightBlend(daynight_ratio);
+ if(l1 > l2)
+ light = l1;
+ else
+ light = l2;
+
+ // Make some nice difference to different sides
+
+ // This makes light come from a corner
+ /*if(face_dir.X == 1 || face_dir.Z == 1 || face_dir.Y == -1)
+ light = diminish_light(diminish_light(light));
+ else if(face_dir.X == -1 || face_dir.Z == -1)
+ light = diminish_light(light);*/
+
+ // All neighboring faces have different shade (like in minecraft)
+ if(face_dir.X == 1 || face_dir.X == -1 || face_dir.Y == -1)
+ light = diminish_light(diminish_light(light));
+ else if(face_dir.Z == 1 || face_dir.Z == -1)
+ light = diminish_light(light);
+
+ return light;
+ }
+ catch(InvalidPositionException &e)
+ {
+ return 0;
+ }
+}
+