Advertisement
Guest User

Untitled

a guest
May 4th, 2015
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. --------------------------------------------------------------------------------------------------------------------
  3. --> GLOBALS
  4. --------------------------------------------------------------------------------------------------------------------
  5.  
  6. -- Position we reside in, relative to time of execution
  7. local pos = vector.new(0, 0, 0);
  8.  
  9. -- Direction we're facing
  10. DIRECTION_FORWARD = 0x0;
  11. DIRECTION_LEFT = 0x1;
  12. DIRECTION_BACK = 0x2;
  13. DIRECTION_RIGHT = 0x3;
  14. local dir = DIRECTION_FORWARD;
  15.  
  16. --------------------------------------------------------------------------------------------------------------------
  17. --> TURTLE ABSTRACTION FUNCTIONS
  18. --------------------------------------------------------------------------------------------------------------------
  19.  
  20. ---
  21. --- Rotates in dir, x times. x will default to one.
  22. --- This updates the orientation of the turtle.
  23. ---
  24. local function rotate(d, x)
  25. if (not x) then
  26. x = 1;
  27. end
  28.  
  29. for i = 1, x do
  30. if (d == DIRECTION_LEFT) then
  31. turtle.turnLeft();
  32.  
  33. -- Increase with clamp
  34. if (dir == 3) then
  35. dir = 0;
  36. else
  37. dir = dir + 1;
  38. end
  39. else
  40. turtle.turnRight();
  41.  
  42. -- Decrease with clamp
  43. if (dir == 0) then
  44. dir = 3;
  45. else
  46. dir = dir - 1;
  47. end
  48. end
  49. end
  50. end
  51.  
  52. -- Helper functions for above
  53. local function left(x) rotate(DIRECTION_LEFT, x); end
  54. local function right(x) rotate(DIRECTION_RIGHT, x); end
  55.  
  56. ---
  57. --- Changes the angle of a turtle to match desired using
  58. --- as little rotations possible
  59. ---
  60. local function setAngle(desired)
  61. local min = math.min(dir, desired);
  62. local max = math.max(dir, desired);
  63. local diff = max - min;
  64.  
  65. -- 180 spins / right - forward
  66. if (diff == 2) then
  67. return left(2);
  68. elseif (diff == 3) then
  69. return left();
  70. end
  71.  
  72. -- Should always be one right/left change
  73. if (desired > dir) then
  74. left();
  75. elseif (desired < dir) then
  76. right();
  77. end
  78. end
  79.  
  80. ---
  81. --- Moves x blocks fowards caving one block above the turtle
  82. --- and one infront of it. Updates coords.
  83. ---
  84. local function move(x)
  85. for i = 1, x do
  86.  
  87. -- Forward can fail, dig until we move
  88. -- forwards succesfully
  89. repeat
  90. turtle.dig();
  91. turtle.digUp();
  92. until turtle.forward();
  93.  
  94. -- Update coords
  95. if (dir == DIRECTION_FORWARD) then
  96. pos.y = pos.y + 1;
  97. elseif (dir == DIRECTION_LEFT) then
  98. pos.x = pos.x + 1;
  99. elseif (dir == DIRECTION_BACK) then
  100. pos.y = pos.y - 1;
  101. elseif (dir == DIRECTION_RIGHT) then
  102. pos.x = pos.x - 1;
  103. end
  104.  
  105. end
  106. end
  107.  
  108. ---
  109. --- Returns the turtle so that it's facing the block that it started on
  110. ---
  111. local function goHome()
  112. if (pos.x ~= 0) then
  113.  
  114. -- Point in the direction of home
  115. if (pos.x > 0) then
  116. setAngle(DIRECTION_RIGHT);
  117. else
  118. setAngle(DIRECTION_LEFT);
  119. end
  120.  
  121. move(math.abs(pos.x) - 1);
  122.  
  123. -- Y-Axis will have offset
  124. if (pos.y ~= 0) then
  125. move(1);
  126. end
  127. end
  128.  
  129. if (pos.y ~= 0) then
  130.  
  131. -- Point in the direction of home
  132. if (pos.y > 0) then
  133. setAngle(DIRECTION_BACK);
  134. else
  135. setAngle(DIRECTION_FORWARD);
  136. end
  137.  
  138. -- Always have offset on Y, X will have an offset if Y is aligned
  139. move(math.abs(pos.y) - 1);
  140. end
  141. end
  142.  
  143. --[[
  144. ---
  145. --
  146. ---
  147. local function dump()
  148.  
  149. -- Cache selected index
  150. local selected = ttl("getSelectedSlot");
  151.  
  152. -- Dump items
  153. for i = 1, 16 do
  154. if (ttl("select", i)) then
  155. local count = ttl("getItemCount");
  156.  
  157. if (count > 0) then
  158. ttl("drop", count - 1);
  159. end
  160. end
  161. end
  162.  
  163. -- Restore selected index
  164. ttl("select", selected);
  165. end
  166.  
  167. ---
  168. --- Refuel from chest infront of the turtle
  169. ---
  170. function refuel()
  171.  
  172. local limit = ttl("getFuelLimit");
  173. local current = ttl("getFuelLevel");
  174. local need = limit - current;
  175. local count = math.ceil(need / 1000);
  176. local selected = ttl("getSelectedSlot");
  177.  
  178. if (count > 64) then
  179. count = 64;
  180. end
  181.  
  182. -- Attempt to aqquire fuel
  183. if (not ttl("suck", count)) then
  184. error("Could not refuel from storage");
  185. end
  186.  
  187. -- Find fuel and refuel from it
  188. for i = 1, 16 do
  189. if (ttl("select", i)) then
  190. local count = ttl("getItemCount");
  191. if (ttl("refuel", count - 1)) then
  192. break;
  193. end
  194. end
  195. end
  196.  
  197. ttl("select", selected);
  198. end]]--
  199.  
  200. move(10);
  201. for i = 1, math.random(1, 5) do
  202. left()
  203. move(math.random(1, 15));
  204. end
  205. goHome();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement