Advertisement
Guest User

Untitled

a guest
Feb 14th, 2013
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.49 KB | None | 0 0
  1. TileSpec getNodeTile(MapNode mn, v3s16 p, v3s16 dir, MeshMakeData *data)
  2. {
  3. INodeDefManager *ndef = data->m_gamedef->ndef();
  4.  
  5. // Direction must be (1,0,0), (-1,0,0), (0,1,0), (0,-1,0),
  6. // (0,0,1), (0,0,-1) or (0,0,0)
  7. assert(dir.X * dir.X + dir.Y * dir.Y + dir.Z * dir.Z <= 1);
  8.  
  9. // Convert direction to single integer for table lookup
  10. // 0 = (0,0,0)
  11. // 1 = (1,0,0)
  12. // 2 = (0,1,0)
  13. // 3 = (0,0,1)
  14. // 4 = invalid, treat as (0,0,0)
  15. // 5 = (0,0,-1)
  16. // 6 = (0,-1,0)
  17. // 7 = (-1,0,0)
  18. u8 dir_i = (dir.X + 2 * dir.Y + 3 * dir.Z) & 7;
  19.  
  20. // Get rotation for things like chests
  21. u8 facedir = mn.getFaceDir(ndef);
  22. // assert(facedir <= 5);
  23.  
  24. static const u8 dir_to_tile[24 * 8] =
  25. {
  26. // 0 +X +Y +Z 0 -Z -Y -X
  27. 0, 2, 0, 4, 0, 5, 1, 3, // rotate over y+ 0 - 3
  28. 0, 4, 0, 3, 0, 2, 1, 5,
  29. 0, 3, 0, 5, 0, 4, 1, 2,
  30. 0, 5, 0, 2, 0, 3, 1, 4,
  31.  
  32. 0, 3, 5, 0, 0, 1, 4, 2, // rotate over z+ 4 - 7
  33. 0, 5, 3, 0, 0, 1, 2, 4,
  34. 0, 3, 4, 0, 0, 1, 5, 2,
  35. 0, 4, 2, 0, 0, 1, 3, 5,
  36.  
  37. 0, 2, 5, 1, 0, 0, 4, 3, // rotate over z- 8 - 11
  38. 0, 5, 2, 1, 0, 0, 3, 4,
  39. 0, 3, 4, 1, 0, 0, 5, 2,
  40. 0, 4, 3, 1, 0, 0, 2, 5,
  41.  
  42. 0, 0, 5, 2, 0, 3, 4, 1, // rotate over x+ 12 - 15
  43. 0, 0, 3, 5, 0, 4, 2, 1,
  44. 0, 0, 4, 3, 0, 2, 5, 1,
  45. 0, 0, 2, 4, 0, 5, 3, 1,
  46.  
  47. 0, 1, 5, 3, 0, 2, 4, 0, // rotate over x- 16 - 19
  48. 0, 1, 2, 5, 0, 4, 3, 0,
  49. 0, 1, 4, 2, 0, 3, 5, 0,
  50. 0, 1, 3, 4, 0, 5, 2, 0,
  51.  
  52. 0, 3, 1, 4, 0, 5, 0, 2, // rotate over y- 20 - 23
  53. 0, 4, 1, 2, 0, 3, 0, 5,
  54. 0, 2, 1, 5, 0, 4, 0, 3,
  55. 0, 5, 1, 3, 0, 2, 0, 4,
  56. };
  57.  
  58. u8 tileindex = dir_to_tile[facedir*8 + dir_i];
  59.  
  60. TileSpec spec = getNodeTileN(mn, p, tileindex, data);
  61. std::string name = data->m_gamedef->tsrc()->getTextureName(spec.texture.id);
  62.  
  63. switch (facedir)
  64. {
  65. case 0:
  66. break;
  67. case 1:
  68. if(tileindex == 0) name += "^[transformR270";
  69. if(tileindex == 1) name += "^[transformR90";
  70. break;
  71. case 2:
  72. if(tileindex == 0) name += "^[transformR180";
  73. if(tileindex == 1) name += "^[transformR180";
  74. break;
  75. case 3:
  76. if(tileindex == 0) name += "^[transformR90";
  77. if(tileindex == 1) name += "^[transformR270";
  78. break;
  79. case 4:
  80. if(tileindex == 0) name += "^[transformR180";
  81. if(tileindex == 2) name += "^[transformFYR270";
  82. if(tileindex == 3) name += "^[transformFYR90";
  83. if(tileindex == 4) name += "^[transformR180";
  84. break;
  85. case 5:
  86. if(tileindex == 0) name += "^[transformR270";
  87. if(tileindex == 1) name += "^[transformFYR90";
  88. if(tileindex == 2) name += "^[transformR180";
  89. if(tileindex == 4) name += "^[transformR90";
  90. if(tileindex == 5) name += "^[transformR270";
  91. break;
  92. case 6:
  93. if(tileindex == 1) name += "^[transformR180";
  94. if(tileindex == 2) name += "^[transformR90";
  95. if(tileindex == 3) name += "^[transformR270";
  96. if(tileindex == 5) name += "^[transformR180";
  97. break;
  98. case 7:
  99. if(tileindex == 0) name += "^[transformR90";
  100. if(tileindex == 1) name += "^[transformR90";
  101. if(tileindex == 3) name += "^[transformR180";
  102. if(tileindex == 4) name += "^[transformR270";
  103. if(tileindex == 5) name += "^[transformR90";
  104. break;
  105. case 8:
  106. if(tileindex == 0) name += "^[transformR180";
  107. if(tileindex == 2) name += "^[transformFYR270";
  108. if(tileindex == 3) name += "^[transformFYR90";
  109. if(tileindex == 5) name += "^[transformR180";
  110. break;
  111. case 9:
  112. if(tileindex == 0) name += "^[transformR90";
  113. if(tileindex == 1) name += "^[transformFYR90";
  114. if(tileindex == 2) name += "^[transformR180";
  115. if(tileindex == 4) name += "^[transformR270";
  116. if(tileindex == 5) name += "^[transformR90";
  117. break;
  118. case 10:
  119. if(tileindex == 1) name += "^[transformR180";
  120. if(tileindex == 2) name += "^[transformFYR90";
  121. if(tileindex == 3) name += "^[transformFYR270";
  122. if(tileindex == 4) name += "^[transformR180";
  123. break;
  124. case 11:
  125. if(tileindex == 0) name += "^[transformR270";
  126. if(tileindex == 1) name += "^[transformR270";
  127. if(tileindex == 3) name += "^[transformR180";
  128. if(tileindex == 4) name += "^[transformR90";
  129. if(tileindex == 5) name += "^[transformR270";
  130. break;
  131. case 12:
  132. if(tileindex == 0) name += "^[transformR180";
  133. if(tileindex == 2) name += "^[transformFXR90";
  134. if(tileindex == 3) name += "^[transformFXR270";
  135. if(tileindex == 4) name += "^[transformR270";
  136. if(tileindex == 5) name += "^[transformR270";
  137. break;
  138. case 13:
  139. if(tileindex == 0) name += "^[transformR90";
  140. if(tileindex == 1) name += "^[transformR90";
  141. if(tileindex == 2) name += "^[transformFXR270";
  142. if(tileindex == 3) name += "^[transformFXR270";
  143. if(tileindex == 4) name += "^[transformR270";
  144. if(tileindex == 5) name += "^[transformR90";
  145. break;
  146. case 14:
  147. if(tileindex == 1) name += "^[transformR180";
  148. if(tileindex == 2) name += "^[transformFXR270";
  149. if(tileindex == 3) name += "^[transformFXR90";
  150. if(tileindex == 4) name += "^[transformR270";
  151. if(tileindex == 5) name += "^[transformR270";
  152. break;
  153. case 15:
  154. if(tileindex == 0) name += "^[transformR270";
  155. if(tileindex == 1) name += "^[transformR270";
  156. if(tileindex == 2) name += "^[transformFXR270";
  157. if(tileindex == 3) name += "^[transformFXR270";
  158. if(tileindex == 4) name += "^[transformR90";
  159. if(tileindex == 5) name += "^[transformR270";
  160. break;
  161. case 16:
  162. if(tileindex == 2) name += "^[transformFXR90";
  163. if(tileindex == 3) name += "^[transformFXR270";
  164. if(tileindex == 4) name += "^[transformR90";
  165. if(tileindex == 5) name += "^[transformR90";
  166. break;
  167. case 17:
  168. if(tileindex == 0) name += "^[transformR270";
  169. if(tileindex == 1) name += "^[transformR270";
  170. if(tileindex == 2) name += "^[transformFXR90";
  171. if(tileindex == 3) name += "^[transformFXR90";
  172. if(tileindex == 4) name += "^[transformR90";
  173. if(tileindex == 5) name += "^[transformR270";
  174. break;
  175. case 18:
  176. if(tileindex == 0) name += "^[transformFX";
  177. if(tileindex == 1) name += "^[transformR180";
  178. if(tileindex == 2) name += "^[transformFXR270";
  179. if(tileindex == 3) name += "^[transformFXR90";
  180. if(tileindex == 4) name += "^[transformR90";
  181. if(tileindex == 5) name += "^[transformR90";
  182. break;
  183. case 19:
  184. if(tileindex == 0) name += "^[transformR90";
  185. if(tileindex == 1) name += "^[transformR90";
  186. if(tileindex == 2) name += "^[transformFXR90";
  187. if(tileindex == 3) name += "^[transformFXR90";
  188. if(tileindex == 4) name += "^[transformR270";
  189. if(tileindex == 5) name += "^[transformR90";
  190. break;
  191. case 20:
  192. name += "^[transformR180";
  193. break;
  194. case 21:
  195. if(tileindex == 0) name += "^[transformR270";
  196. if(tileindex == 1) name += "^[transformR90";
  197. if(tileindex == 2) name += "^[transformR180";
  198. if(tileindex == 3) name += "^[transformR180";
  199. if(tileindex == 4) name += "^[transformR180";
  200. if(tileindex == 5) name += "^[transformR180";
  201. break;
  202. case 22:
  203. if(tileindex == 2) name += "^[transformR180";
  204. if(tileindex == 3) name += "^[transformR180";
  205. if(tileindex == 4) name += "^[transformR180";
  206. if(tileindex == 5) name += "^[transformR180";
  207. break;
  208. case 23:
  209. if(tileindex == 0) name += "^[transformR90";
  210. if(tileindex == 1) name += "^[transformR270";
  211. if(tileindex == 2) name += "^[transformR180";
  212. if(tileindex == 3) name += "^[transformR180";
  213. if(tileindex == 4) name += "^[transformR180";
  214. if(tileindex == 5) name += "^[transformR180";
  215. break;
  216. default:
  217. break;
  218. }
  219. spec.texture = data->m_gamedef->tsrc()->getTexture(name);
  220. return spec;
  221. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement