Advertisement
columna1

[Computercraft] turtle printer

Nov 25th, 2012
1,102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.94 KB | None | 0 0
  1. --[[ Made by columna1 Please dont claim as your own
  2. Version 1.1
  3. Changelog:
  4. 1.0 release
  5. 1.1 fixed bug when 3d printing files that were not square (the turtle would not go back to the start pos)
  6. ]]--
  7. arg = {...}
  8. plane = 0
  9. line = {}
  10. x = 0
  11. selecteditem = 1
  12. mainmenu = true
  13. menu2d = false
  14. menu3d = false
  15.  
  16. col = {
  17. w = 1,
  18. o = 2,
  19. m = 3,
  20. b = 4,
  21. y = 5,
  22. l = 6,
  23. p = 7,
  24. G = 8,
  25. g = 9,
  26. c = 10,
  27. P = 11,
  28. B = 12,
  29. n = 13,
  30. e = 14,
  31. r = 15,
  32. d = 16,
  33. s = 20
  34. }
  35. --functions
  36. function forward()
  37.     forw = true
  38.     while forw do
  39.         if turtle.forward() then
  40.             forw = false
  41.         else
  42.             turtle.dig()
  43.             turtle.attack()
  44.         end
  45.     end
  46. end
  47.  
  48. function placeDown()
  49.     if turtle.getItemCount(selected) > 1 then
  50.         turtle.placeDown()
  51.     else
  52.         nom = true
  53.         print("Enter material")
  54.         while nom do
  55.             sleep(1)
  56.             if turtle.getItemCount(selected) > 1 then
  57.                 nom = false
  58.                 print("continuing")
  59.                 turtle.placeDown()
  60.             end
  61.         end
  62.     end
  63. end
  64.  
  65. function place()
  66.     if turtle.getItemCount(selected) > 1 then
  67.         turtle.place()
  68.     else
  69.         nom = true
  70.         print("Enter material")
  71.         while nom do
  72.             sleep(1)
  73.             if turtle.getItemCount(selected) > 1 then
  74.                 nom = false
  75.                 print("continuing")
  76.                 turtle.place()
  77.             end
  78.         end
  79.     end
  80. end
  81.  
  82. function printer()
  83.     sleep(0.1)
  84.     up = job.readLine()
  85.     for j = 1,tonumber(up) do
  86.         curline = job.readLine()
  87.         if x == 1 then
  88.             curline = curline:reverse()
  89.         end
  90.         for i = 1,#curline do
  91.             line[i] = curline:sub(i,i)
  92.         end
  93.         for i = 1,#line do
  94.             if col[line[i]] == 20 then
  95.                 --no selecting
  96.             else
  97.                 turtle.select(col[line[i]])
  98.                 selected = col[line[i]]
  99.             end
  100.             if plane == 0 then
  101.                 if col[line[i]] == 20 then
  102.                     --no placing
  103.                 else
  104.                     placeDown()
  105.                 end
  106.                 forward()
  107.             else
  108.                 if x == 0 then
  109.                     if col[line[i]] == 20 then
  110.                         --no placing
  111.                     else
  112.                         place()
  113.                     end
  114.                     turtle.turnRight()
  115.                     forward()
  116.                     turtle.turnLeft()
  117.                 elseif x == 1 then
  118.                     if col[line[i]] == 20 then
  119.                         --no placing
  120.                     else
  121.                         place()
  122.                     end
  123.                     turtle.turnLeft()
  124.                     forward()
  125.                     turtle.turnRight()
  126.                 end
  127.             end
  128.         end
  129.         if plane == 0 then
  130.             if x == 0 then
  131.                 turtle.turnRight()
  132.                 forward()
  133.                 turtle.turnRight()
  134.                 forward()
  135.                 x = 1
  136.             elseif x == 1 then
  137.                 turtle.turnLeft()
  138.                 forward()
  139.                 turtle.turnLeft()
  140.                 forward()
  141.                 x = 0
  142.             end
  143.         else
  144.             if x == 0 then
  145.                 turtle.down()
  146.                 turtle.turnLeft()
  147.                 forward()
  148.                 turtle.turnRight()
  149.                 x = 1
  150.             elseif x == 1 then
  151.                 turtle.down()
  152.                 turtle.turnRight()
  153.                 forward()
  154.                 turtle.turnLeft()
  155.                 x = 0
  156.             end
  157.         end
  158.     end
  159. end
  160. function exit()
  161. main = false
  162. term.clear()
  163. term.setCursorPos(1,1)
  164. print("Thanks for using Columna1's printer")
  165. end
  166.  
  167. function face()
  168. plane = 1
  169. end
  170. function d3()
  171.   sleep(0.1)
  172.   selecteditem = 1
  173.   menu3d = true
  174.   while menu3d do
  175.     term.clear()
  176.     term.setCursorPos(1,1)
  177.     printmenu(menu3)
  178.     event,key = os.pullEvent("key")
  179.     onkeypress(key,menu3)
  180.   end
  181. end
  182. function d2()
  183.   selecteditem = 1
  184.   menu2d = true
  185.   while menu2d do
  186.     term.clear()
  187.     term.setCursorPos(1,1)
  188.     printmenu(menu2)
  189.     event,key = os.pullEvent("key")
  190.     onkeypress(key,menu2)
  191.   end
  192. end
  193. function exit3d()
  194.   selecteditem = 1
  195.   menu3d = false
  196.   selecteditem = 1
  197. end
  198. function exit2d()
  199.   selecteditem = 1
  200.   menu2d = false
  201.   selecteditem = 1  
  202. end
  203. function print3d()
  204.     sleep(0.1)
  205.     x = 0
  206.     if tip then
  207.         files = job.readLine()
  208.         job.close()
  209.         for k = 1,tonumber(files) do
  210.             job = fs.open(timp.."_"..k,"r")
  211.             printer()
  212.             if up %2 == 0 then
  213.                 turtle.turnLeft()
  214.                 for h = 1,up do
  215.                     forward()
  216.                 end
  217.                 turtle.turnRight()
  218.                 turtle.up()
  219.             else
  220.                 turtle.turnRight()
  221.                 for h = 1,up do
  222.                     forward()
  223.                     end
  224.                 turtle.turnLeft()
  225.                 for h = 1,#curline-1 do
  226.                     forward()
  227.                 end
  228.                 turtle.turnLeft()
  229.                 turtle.turnLeft()
  230.                 turtle.up()
  231.             end
  232.             job.close()
  233.             x = 0
  234.             tip = nil
  235.         end
  236.     else
  237.         print("No file Entered")
  238.         sleep(1)
  239.     end
  240. end
  241. function print2d()
  242.     x = 0
  243.     if tipe then
  244.         printer()
  245.         tipe = nil
  246.     else
  247.         print("No file entered")
  248.         sleep(1)
  249.     end
  250. end
  251. function enter3d()
  252.     print("Enter file prefix")
  253.     timp = read()
  254.     if fs.exists(timp) then
  255.         job = fs.open(timp,"r")
  256.         tip = job.readLine()
  257.         if tip == "3d" then
  258.             -- over with
  259.         else
  260.             print("Not a 3d file")
  261.             sleep(1)
  262.         end
  263.     else
  264.         print("invalid file")
  265.         tip = nil
  266.         sleep(1)
  267.     end
  268. end
  269. function enter2d()
  270.     print("Enter filename")
  271.     local temp = read()
  272.     if fs.exists(temp) then
  273.         job = fs.open(temp,"r")
  274.         tipe = job.readLine()
  275.         if tipe == "2d" then
  276.           --another comment to do nothing
  277.         else
  278.             print("Not a 2d file")
  279.             sleep(1)
  280.         end
  281.     else
  282.         print("invalid file")
  283.         tipe = nil
  284.         sleep(1)
  285.     end
  286. end
  287.  
  288. menu = {
  289. [1] = {text = "2D",handler = d2},
  290. [2] = {text = "3D",handler = d3},
  291. [3] = {text = "Exit",handler = exit}
  292. }
  293. menu2 = {
  294. [1] = {text = "Enter filename",handler = enter2d},
  295. [2] = {text = "Print",handler = print2d},
  296. [3] = {text = "Plane y",handler = face},
  297. [4] = {text = "Main menu",handler = exit2d}
  298. }
  299. menu3 = {
  300. [1] = {text = "Enter filename",handler = enter3d},
  301. [2] = {text = "Print",handler = print3d},
  302. [3] = {text = "Main menu",handler = exit3d}
  303. }
  304. --printmenu
  305. function printmenu(menu)
  306.   for i = 1,#menu do
  307.     if i == selecteditem then
  308.       print("[[ "..menu[i].text.." ]]")
  309.     else
  310.       print("   "..menu[i].text.."   ")
  311.     end
  312.   end
  313. end
  314. --handlers
  315. function onkeypress(key,menu)
  316.   if key == keys.enter then
  317.     onitemselected(menu)
  318.   elseif key == keys.up then
  319.     if selecteditem > 1 then
  320.       selecteditem = selecteditem - 1
  321.     end
  322.   elseif key == keys.down then
  323.     if selecteditem < #menu then
  324.       selecteditem = selecteditem + 1
  325.     end
  326.   end
  327. end
  328. function onitemselected(menu)
  329.   menu[selecteditem].handler()
  330. end
  331. --main
  332. function main()
  333.   while main do
  334.     term.clear()
  335.     term.setCursorPos(1,1)
  336.     printmenu(menu)
  337.     event,key = os.pullEvent()
  338.     onkeypress(key,menu)
  339.   end
  340. end
  341. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement