Advertisement
hevohevo

ComputerCraft Tutorial: h2turtle_API_0_1

Apr 26th, 2014
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.55 KB | None | 0 0
  1. local H2Turtle = {}
  2. setmetatable(H2Turtle,{__index = turtle})
  3.  
  4. --[[
  5. turtle.select( slotNum )
  6. turtle.getSelectedSlot()
  7. turtle.getItemCount( [slotNum] )
  8. turtle.getItemSpace( [slotNum] )
  9. turtle.equipLeft()
  10. turtle.equipRight()
  11. turtle.dig( [toolSide] )
  12. turtle.digUp( [toolSide] )
  13. turtle.digDown( [toolSide] )
  14. turtle.place()
  15. turtle.placeUp()
  16. turtle.placeDown()
  17. turtle.attack( [toolSide] )
  18. turtle.attackUp( [toolSide] )
  19. turtle.attackDown( [toolSide] )
  20. turtle.detect()
  21. turtle.detectUp()
  22. turtle.detectDown()
  23. turtle.compare()
  24. turtle.compareUp()
  25. turtle.compareDown()
  26. turtle.compareTo( slotNum )
  27. turtle.transferTo( slotNum, [quantity] )
  28. turtle.drop( [quantity] )
  29. turtle.dropUp( [quantity] )
  30. turtle.dropDown( [quantity] )
  31. turtle.suck( [quantity] )
  32. turtle.suckUp( [quantity] )
  33. turtle.suckDown( [quantity] )
  34. turtle.getFuelLevel()
  35. turtle.getFuelLimit()
  36. turtle.refuel( [quantity] )
  37. turtle.craft( [quantity] ) (requires Crafty Turtle)
  38. --]]
  39.  
  40. H2Turtle.new = function()
  41.   local obj = {}
  42.   obj.direction = 0 -- 0-3, 0: start dir., 1: turn right, 2: two times, 3: three times
  43.   obj.x = 0 -- side pos.
  44.   obj.y = 0 -- height
  45.   obj.z = 0 -- depth
  46.   if turtle.select(1) then obj.slot = 1 end
  47.   return setmetatable(obj,{__index = H2Turtle})
  48. end
  49.  
  50. H2Turtle.turnRight = function(self, _n)
  51.   _n = _n or 1
  52.   if type(_n)=="number" and _n > 0 then
  53.     for i=1,_n do
  54.       turtle.turnRight()
  55.     end
  56.     self.direction = (self.direction + _n)%4
  57.   elseif type(_n)=="number" and _n == 0 then
  58.     -- do nothing.
  59.   else
  60.     assert(false, "Illegal argument: turnRight(n)")
  61.   end
  62.   return self.direction
  63. end
  64.  
  65. H2Turtle.turnLeft = function(self, _n)
  66.   _n = _n or 1
  67.   if type(_n)=="number" and _n > 0 then
  68.     for i=1,_n do
  69.       turtle.turnLeft()
  70.     end
  71.     self.direction = (self.direction + (4-_n))%4
  72.   elseif type(_n)=="number" and _n == 0 then
  73.     -- do nothing.
  74.   else
  75.     assert(false, "Illegal argument: turnLeft(n)")
  76.   end
  77.   return self.direction
  78. end
  79.  
  80. H2Turtle.select = function(self, _n)
  81.   _n = _n or 0
  82.   if type(_n)=="number" then
  83.     if _n >= 1 and _n <= 16 then
  84.       self.slot = _n
  85.       turtle.select(self.slot)
  86.     elseif _n == 0 then
  87.       -- do nothing
  88.     else
  89.       assert(false, "select(n): n is 1..16")
  90.     end
  91.     return self.slot
  92.   else
  93.     assert(false, "select(n): n is integer")
  94.   end
  95. end
  96.  
  97. H2Turtle.selectRelative = function(self, _delta)
  98.   _delta = _delta or 0
  99.   if type(_delta)=="number" then
  100.     local n = self.slot + _delta
  101.     n = ((n-1) % 16) + 1 -- 1 < n < 16
  102.     return self:select(n)
  103.   end
  104. end
  105.  
  106. H2Turtle.forward = function(self, n)
  107.   local _forward = function(self)
  108.     local _status, _err_msg
  109.     for i=1,3 do
  110.       _status, _err_msg = turtle.forward()
  111.       if _status or (_err_msg ~= "Movement obstructed") then break end
  112.       os.sleep(0.1)
  113.     end
  114.     if _status then
  115.       if self.direction == 0 then
  116.         self.z = self.z+1
  117.       elseif self.direction == 1 then
  118.         self.x = self.x+1
  119.       elseif self.direction == 2 then
  120.         self.z = self.z-1
  121.       elseif self.direction == 3 then
  122.         self.x = self.x-1
  123.       end
  124.     end
  125.     return _status, _err_msg
  126.   end
  127.  
  128.   -- main loop
  129.   n = tonumber(n) or 1
  130.   local status, err_msg
  131.   for i=1, n do
  132.     status, err_msg = _forward(self)
  133.     if not status then break end
  134.   end
  135.   return status, err_msg
  136. end
  137.  
  138. H2Turtle.back = function(self, n)
  139.   local _back = function(self)
  140.     local _status, _err_msg
  141.     for i=1,3 do
  142.       _status, _err_msg = turtle.back()
  143.       if _status or (_err_msg ~= "Movement obstructed") then break end
  144.       os.sleep(0.1)
  145.     end
  146.     if _status then
  147.       if self.direction == 0 then
  148.         self.z = self.z-1
  149.       elseif self.direction == 1 then
  150.         self.x = self.x-1
  151.       elseif self.direction == 2 then
  152.         self.z = self.z+1
  153.       elseif self.direction == 3 then
  154.         self.x = self.x+1
  155.       end
  156.     end
  157.     return _status, _err_msg
  158.   end
  159.  
  160.   -- main loop
  161.   n = tonumber(n) or 1
  162.   local status, err_msg
  163.   for i=1, n do
  164.     status, err_msg = _back(self)
  165.     if not status then break end
  166.   end
  167.   return status, err_msg  
  168. end
  169. H2Turtle.up = function(self, n)
  170.   local _up = function(self)
  171.     local _status, _err_msg
  172.     for i=1,3 do
  173.       _status, _err_msg = turtle.up()
  174.       if _status or (_err_msg ~= "Movement obstructed") then break end
  175.       os.sleep(0.1)
  176.     end
  177.     if _status then
  178.         self.y = self.y+1
  179.     end
  180.     return _status, _err_msg
  181.   end
  182.  
  183.   -- main loop
  184.   n = tonumber(n) or 1
  185.   local status, err_msg
  186.   for i=1, n do
  187.     status, err_msg = _up(self)
  188.     if not status then break end
  189.   end
  190.   return status, err_msg
  191. end
  192. H2Turtle.down = function(self, n)
  193.   local _down = function(self)
  194.     local _status, _err_msg
  195.     for i=1,3 do
  196.       _status, _err_msg = turtle.down()
  197.       if _status or (_err_msg ~= "Movement obstructed") then break end
  198.       os.sleep(0.1)
  199.     end
  200.     if _status then
  201.         self.y = self.y-1
  202.     end
  203.     return _status, _err_msg
  204.   end
  205.  
  206.   -- main loop
  207.   n = tonumber(n) or 1
  208.   local status, err_msg
  209.   for i=1, n do
  210.     status, err_msg = _down(self)
  211.     if not status then break end
  212.   end
  213.   return status, err_msg
  214. end
  215.  
  216.  
  217. H2Turtle.place = function(self, slot)
  218.   H2Turtle.select(slot)
  219.   return turtle.place()
  220. end
  221.  
  222.  
  223.  
  224. -- shortened name
  225. --[[
  226. H2Turtle.fwd = H2Turle.forward
  227. H2Turtle.tL = H2Turtle.turnLeft
  228. H2Turtle.tR = H2Turtle.turnRight
  229. H2Turtle.sel = H2Turtle.select
  230. H2Turtle.selRel = H2Turtle.selectRelative
  231. --]]
  232.  
  233. -- ##################################
  234. -- API Functions
  235. function new()
  236.   return H2Turtle.new()
  237. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement