]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/mapblock_mesh.cpp
Add disable_jump and fall_damage_add_percent node groups
[dragonfireclient.git] / src / mapblock_mesh.cpp
index a928b82ff764c24c4f3d2ca446affba3d28ac735..9ae9b21c07058d7be6cce5ba33cc27edeeab807e 100644 (file)
@@ -29,6 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "content_mapblock.h"
 #include "noise.h"
 #include "settings.h"
+#include "util/directiontables.h"
 
 /*
        MeshMakeData
@@ -604,7 +605,46 @@ TileSpec getNodeTile(MapNode mn, v3s16 p, v3s16 dir, MeshMakeData *data)
                   0,  5,  0,  2,  0,  3,  1,  4,  // facedir = 3
        };
        u8 tileindex = dir_to_tile[facedir*8 + dir_i];
-       return getNodeTileN(mn, p, tileindex, data);
+
+       // If not rotated or is side tile, we're done
+       if(facedir == 0 || (tileindex != 0 && tileindex != 1))
+               return getNodeTileN(mn, p, tileindex, data);
+
+       // This is the top or bottom tile, and it shall be rotated; thus rotate it
+       TileSpec spec = getNodeTileN(mn, p, tileindex, data);
+       if(tileindex == 0){
+               if(facedir == 1){ // -90
+                       std::string name = data->m_gamedef->tsrc()->getTextureName(spec.texture.id);
+                       name += "^[transformR270";
+                       spec.texture = data->m_gamedef->tsrc()->getTexture(name);
+               }
+               else if(facedir == 2){ // 180
+                       spec.texture.pos += spec.texture.size;
+                       spec.texture.size *= -1;
+               }
+               else if(facedir == 3){ // 90
+                       std::string name = data->m_gamedef->tsrc()->getTextureName(spec.texture.id);
+                       name += "^[transformR90";
+                       spec.texture = data->m_gamedef->tsrc()->getTexture(name);
+               }
+       }
+       else if(tileindex == 1){
+               if(facedir == 1){ // -90
+                       std::string name = data->m_gamedef->tsrc()->getTextureName(spec.texture.id);
+                       name += "^[transformR90";
+                       spec.texture = data->m_gamedef->tsrc()->getTexture(name);
+               }
+               else if(facedir == 2){ // 180
+                       spec.texture.pos += spec.texture.size;
+                       spec.texture.size *= -1;
+               }
+               else if(facedir == 3){ // 90
+                       std::string name = data->m_gamedef->tsrc()->getTextureName(spec.texture.id);
+                       name += "^[transformR270";
+                       spec.texture = data->m_gamedef->tsrc()->getTexture(name);
+               }
+       }
+       return spec;
 }
 
 static void getTileInfo(