Advertisement
Vrill

Computercraft: 3D printer for turtle

Aug 27th, 2019
1,187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 16.91 KB | None | 0 0
  1. -----------------------------------------
  2. -- Vrill's 3D printer for turtle 1.0.0 --
  3. -----------------------------------------
  4.  
  5.  
  6. function getSchemeList()
  7. local allFiles
  8. local selectedFiles={}
  9. local i
  10. local n=1
  11. local strlen
  12.  
  13.     selectedFiles[1]="No-Files-Found"
  14.     allFiles=shell.programs(true)
  15.  
  16.     for i=1,#allFiles do
  17.         strlen=string.len(allFiles[i])
  18.         --print( allFiles[i]," len=",strlen )
  19.         if strlen > 4 then
  20.             if string.lower(string.sub(allFiles[i], strlen-3)) == ".3dp" then
  21.                 selectedFiles[n]=allFiles[i]
  22.                 n=n+1
  23.             end
  24.         end  
  25.     end
  26.  
  27.     for i=1,#selectedFiles do
  28.         --print( selectedFiles[i])
  29.     end
  30.     return selectedFiles
  31. end
  32.  
  33. function GUIopenFile()
  34. local fileName="noFile"
  35. local posX,posY=2,1
  36. local i
  37. local schemes
  38. local event, key
  39. local line=1
  40. local page=0
  41.  
  42.     schemes=getSchemeList()
  43.     ------
  44.     term.clear()
  45.     term.setTextColor(colors.white)
  46.     term.setCursorPos(posX,posY)
  47.     term.write("+--- Select scheme file: -----------+")
  48.     for i=2,12 do
  49.         term.setCursorPos(posX,i)
  50.         term.write("|                                   |")
  51.     end
  52.     term.setCursorPos(posX,13)
  53.     term.write("+-----------------------------------+")
  54.    
  55.     term.setTextColor(colors.lime)
  56.     for i=1,math.min(#schemes-page,10) do
  57.         term.setCursorPos(posX+1,posY+i+1)
  58.         term.write(i+page)
  59.         term.write(":  ")
  60.         term.write(schemes[i+page])
  61.     end
  62.    
  63.     term.setTextColor(colors.yellow)
  64.     term.setCursorPos(1+5,line+2)
  65.     term.write(">")
  66.     term.setTextColor(colors.white)
  67.     term.write(schemes[line+page])
  68.     term.write("   ")
  69.     ------
  70.     while true do
  71.         event, key = os.pullEvent( "key" )
  72.        
  73.         if key == keys.enter then
  74.             term.setTextColor(colors.white)
  75.             term.setCursorPos(1,1)
  76.             term.clear()
  77.             fileName=schemes[line+page]
  78.             break
  79.         end
  80.        
  81.         if key == keys.up then
  82.             if line == 1 and page >= 10 then
  83.                 line=10
  84.                 page=page-10
  85.                 ------
  86.                 term.clear()
  87.                 term.setTextColor(colors.white)
  88.                 term.setCursorPos(posX,posY)
  89.                 term.write("+--- Select scheme file: -----------+")
  90.                 for i=2,12 do
  91.                     term.setCursorPos(posX,i)
  92.                     term.write("|                                   |")
  93.                 end
  94.                 term.setCursorPos(posX,13)
  95.                 term.write("+-----------------------------------+")
  96.                 term.setTextColor(colors.lime)
  97.                 for i=1,math.min(#schemes-page,10) do
  98.                     term.setCursorPos(posX+1,posY+i+1)
  99.                     term.write(i+page)
  100.                     term.write(":  ")
  101.                     term.write(schemes[i+page])
  102.                 end
  103.                 term.setTextColor(colors.yellow)
  104.                 term.setCursorPos(1+5,line+2)
  105.                 term.write(">")
  106.                 term.setTextColor(colors.white)
  107.                 term.write(schemes[line+page])
  108.                 term.write("   ")
  109.                 ------
  110.             else
  111.             term.setCursorPos(1+5,line+2)
  112.             term.write(" ")
  113.             term.setTextColor(colors.lime)
  114.             term.write(schemes[line+page])
  115.             term.write("   ")
  116.             if line > 1 then line=line-1 end
  117.             term.setCursorPos(1+5,line+2)
  118.             term.setTextColor(colors.yellow)
  119.             term.write(">")
  120.             term.setTextColor(colors.white)
  121.             term.write(schemes[line+page])
  122.             term.write("   ")
  123.             end
  124.         end
  125.        
  126.         if key == keys.down then
  127.             if line == 10 and page+line < #schemes then
  128.                 line=1
  129.                 page=page+10
  130.                 ------
  131.                 term.clear()
  132.                 term.setTextColor(colors.white)
  133.                 term.setCursorPos(posX,posY)
  134.                 term.write("+--- Select scheme file: -----------+")
  135.                 for i=2,12 do
  136.                     term.setCursorPos(posX,i)
  137.                     term.write("|                                   |")
  138.                 end
  139.                 term.setCursorPos(posX,13)
  140.                 term.write("+-----------------------------------+")
  141.                 term.setTextColor(colors.lime)
  142.                 for i=1,math.min(#schemes-page,10) do
  143.                     term.setCursorPos(posX+1,posY+i+1)
  144.                     term.write(i+page)
  145.                     term.write(":  ")
  146.                     term.write(schemes[i+page])
  147.                 end
  148.                 term.setTextColor(colors.yellow)
  149.                 term.setCursorPos(1+5,line+2)
  150.                 term.write(">")
  151.                 term.setTextColor(colors.white)
  152.                 term.write(schemes[line+page])
  153.                 term.write("   ")
  154.                 ------
  155.             else
  156.             term.setCursorPos(1+5,line+2)
  157.             term.write(" ")
  158.             term.setTextColor(colors.lime)
  159.             term.write(schemes[line+page])
  160.             term.write("   ")
  161.             if line < math.min(#schemes-page,10) then line=line+1 end
  162.             term.setCursorPos(1+5,line+2)
  163.             term.setTextColor(colors.yellow)
  164.             term.write(">")
  165.             term.setTextColor(colors.white)
  166.             term.write(schemes[line+page])
  167.             term.write("   ")
  168.             end
  169.         end
  170.     end
  171.    
  172. return fileName
  173. end
  174.  
  175. function createSchemeFile(filename,slotsNameTable,sX,sY,sZ,matrix)
  176. local i,x,y,z
  177. local file
  178.    
  179.     file = io.open(filename, "w")
  180.    
  181.     file:write("3dp -> 3D printer scheme file for ComputerCraft turtle\n")
  182.     file:write("title = '")
  183.     file:write(filename)
  184.     file:write("'\n")
  185.     for i=1,16 do
  186.         file:write("slot")
  187.         file:write(tostring(i))
  188.         file:write(" = '")
  189.         file:write(slotsNameTable[i])
  190.         file:write("'\n")
  191.     end
  192.    
  193.     file:write("sizeX = ")
  194.     file:write(tostring(sX))
  195.     file:write("\n")
  196.     file:write("sizeY = ")
  197.     file:write(tostring(sY))
  198.     file:write("\n")
  199.     file:write("sizeZ = ")
  200.     file:write(tostring(sZ))
  201.     file:write("\n")
  202.     file:write("--Use 0123456789ABCDEFG chars --\n")
  203.    
  204.     for z=1,sZ do
  205.         file:write("--layer")
  206.         file:write(tostring(z))
  207.         file:write("--\n")
  208.         for y=1,sY do
  209.             for x=1,sX do
  210.                 if matrix[z][sY-y+1][x] >=0 and matrix[z][sY-y+1][x] <=9 then
  211.                     file:write(tostring(matrix[z][sY-y+1][x]))
  212.                 elseif matrix[z][sY-y+1][x] == 10 then
  213.                     file:write("A")
  214.                 elseif matrix[z][sY-y+1][x] == 11 then
  215.                     file:write("B")
  216.                 elseif matrix[z][sY-y+1][x] == 12 then
  217.                     file:write("C")
  218.                 elseif matrix[z][sY-y+1][x] == 13 then
  219.                     file:write("D")
  220.                 elseif matrix[z][sY-y+1][x] == 14 then
  221.                     file:write("E")
  222.                 elseif matrix[z][sY-y+1][x] == 15 then
  223.                     file:write("F")
  224.                 elseif matrix[z][sY-y+1][x] == 16 then
  225.                     file:write("G")
  226.                 end
  227.             end
  228.             file:write("\n")
  229.         end
  230.     end
  231.    
  232.     file:close()  
  233. end
  234.  
  235. function findText(textString)
  236. local str,i,j
  237.     i, j = string.find(textString, "'")
  238.     str = string.sub(textString,i+1)
  239.     i, j = string.find(str, "'")
  240.     str = string.sub(str,1,i-1)
  241. return str
  242. end
  243.  
  244. function getInfoFromSchemeFile(filename)
  245. local slotsNameTable={}
  246. local x,y,z,sX,sY,sZ
  247. local matr={}
  248. local file,str,i,j,num
  249. local tmpTable={}
  250.  
  251.     file = io.open(filename, "r")
  252.     file:read() -- first string
  253.     str = file:read()
  254.     str=findText(str)
  255.     -- 1 -> title --
  256.     tmpTable[1]=str
  257.     --print(str)
  258.    
  259.     for i=1,16 do
  260.         str = file:read()
  261.         str=findText(str)
  262.         slotsNameTable[i]=str
  263.         --print(str)
  264.     end
  265.     -- 2 -> slotsName --
  266.     tmpTable[2]=slotsNameTable
  267.    
  268.     str = file:read()
  269.     i, j = string.find(str, "sizeX = ")
  270.     str = string.sub(str,j)
  271.     -- 3 -> sizeX --
  272.     sX=tonumber(str)
  273.     tmpTable[3]=sX
  274.     --print(sX)
  275.    
  276.     str = file:read()
  277.     i, j = string.find(str, "sizeY = ")
  278.     str = string.sub(str,j)
  279.     -- 4 -> sizeY --
  280.     sY=tonumber(str)
  281.     tmpTable[4]=sY
  282.     --print(sY)
  283.    
  284.     str = file:read()
  285.     i, j = string.find(str, "sizeZ = ")
  286.     str = string.sub(str,j)
  287.     -- 5 -> sizeZ --
  288.     sZ=tonumber(str)
  289.     tmpTable[5]=sZ
  290.     --print(sZ)
  291.        
  292.     file:read() --Use 0123456789ABCDEFG chars --
  293.    
  294.     for z=1,sZ do
  295.         matr[z]={}
  296.         file:read() --layer i--
  297.         for y=1,sY do
  298.             matr[z][sY-y+1]={}
  299.             str = file:read()
  300.             for x=1,sX do
  301.                 num=string.sub(str,x,x)
  302.                 if num == "A" then
  303.                     num=10
  304.                 elseif num == "B" then
  305.                     num=11
  306.                 elseif num == "C" then
  307.                     num=12
  308.                 elseif num == "D" then
  309.                     num=13
  310.                 elseif num == "E" then
  311.                     num=14
  312.                 elseif num == "F" then
  313.                     num=15
  314.                 elseif num == "G" then
  315.                     num=16
  316.                 else
  317.                     num=tonumber(num)
  318.                 end
  319.                 --io.write(num)
  320.                 matr[z][sY-y+1][x]=num
  321.             end
  322.         end
  323.     end
  324.    
  325.     -- 6 -> the matrix --
  326.     tmpTable[6]=matr
  327.    
  328.     file:close()
  329. return tmpTable
  330. end
  331.  
  332. function calculateBlockSum()
  333. local i, x, y, z
  334.     for i=1,16 do
  335.         blockSum[i]=0
  336.     end
  337.     for z=1,sizeZ do
  338.         for y=1,sizeY do
  339.             for x=1,sizeX do
  340.                 if matr[z][y][x] ~= 0 then
  341.                     blockSum[matr[z][y][x]] = blockSum[matr[z][y][x]] + 1
  342.                 end
  343.             end
  344.         end
  345.     end
  346.     totalSum=0
  347.     for i=1,16 do
  348.         totalSum = totalSum + blockSum[i]
  349.     end
  350. end
  351.  
  352. function buildGUI()
  353. local i
  354. local curentSum={}
  355. local addX,addY=0,0
  356.  
  357.     IAmReady = true
  358.  
  359.     term.clear()   
  360.     term.setTextColor(colors.white)
  361.     term.setCursorPos(1,1)
  362.     term.write("---------------------------------------")
  363.     term.setTextColor(colors.yellow)
  364.     term.setCursorPos(14,1)
  365.     term.write("[Height=" .. workHeight .. "]")
  366.     term.setTextColor(colors.white)
  367.    
  368.     for i=1,16 do
  369.         if i>8 and addX==0 then
  370.             addX,addY=20,-8
  371.         end
  372.         curentSum[i]=turtle.getItemCount(i)
  373.         term.setCursorPos(1+addX,2+i+addY)
  374.         term.write(i .. ": ")
  375.     end
  376.     term.setTextColor(colors.lime)
  377.     addX,addY=0,0
  378.     for i=1,16 do
  379.         if i>8 and addX==0 then
  380.             addX,addY=20,-8
  381.         end
  382.         if blockSum[i] == 0 then
  383.             term.setTextColor(colors.gray)
  384.         elseif blockSum[i] > 0 and curentSum[i] == 0 then
  385.             term.setTextColor(colors.red)
  386.             IAmReady = false
  387.         elseif blockSum[i] > 0 and curentSum[i] > 0 then   
  388.             term.setTextColor(colors.lime)
  389.         end
  390.         if blockSum[i] > 1 and curentSum[i] == 1 then
  391.             term.setTextColor(colors.yellow)
  392.         end
  393.         term.setCursorPos(4+addX,2+i+addY)
  394.         term.write(string.sub(slotName[i],1,8) .. " ")
  395.         term.write(curentSum[i])
  396.         term.write("/")
  397.         term.write(blockSum[i])    
  398.     end
  399.    
  400.     term.setCursorPos(3,13)
  401.     term.setTextColor(colors.cyan)
  402.     term.write("[ENTER]")
  403.     term.setTextColor(colors.white)
  404.     term.write("-start  ")
  405.     term.setTextColor(colors.cyan)
  406.     term.write("[BACKSPACE]")
  407.     term.setTextColor(colors.white)
  408.     term.write("-exit")
  409.    
  410.     term.setCursorPos(1,12)
  411.     term.setTextColor(colors.white)
  412.     term.write("---------------------------------------")
  413.     term.setCursorPos(10,12)   
  414.     term.setTextColor(colors.green)
  415.     term.write("[Build progress:")
  416.     term.write(math.floor ((blockPlaced/totalSum)*100))
  417.     term.write("%]")
  418.    
  419.     term.setTextColor(colors.white)
  420.     term.setCursorPos(1,1)
  421. end
  422.  
  423. function imFull()
  424. local i
  425. local result=true
  426. local num1, num2
  427. local res
  428.     for i=1,16 do
  429.         num1=turtle.getItemCount(i)
  430.         num2=turtle.getItemSpace(i)
  431.         if num1 >= blockSum[i] or num2 == 0 then
  432.             res=true
  433.         else
  434.             res=false
  435.         end
  436.         result = result and res
  437.     end
  438. return result
  439. end
  440.  
  441. function keyWaiting()
  442. local event,key
  443. local keyPressed=""
  444.     while true do
  445.         event, key = os.pullEvent()
  446.         if event=="key" then
  447.             --ENTER
  448.             if key == keys.enter then
  449.                 if IAmReady == true then
  450.                     keyPressed="enter"
  451.                     break
  452.                 else
  453.                     term.setCursorPos(1,12)
  454.                     term.setTextColor(colors.white)
  455.                     term.write("---------------------------------------")
  456.                     term.setCursorPos(3,12)
  457.                     term.setTextColor(colors.red)
  458.                     term.write(" Not enough build blocks to start! ")
  459.                     term.setTextColor(colors.white)
  460.                     sleep(5)
  461.                     buildGUI()
  462.                 end
  463.             end
  464.             --BACKSPACE
  465.             if key == keys.backspace then
  466.                 keyPressed="backspace"
  467.                 break
  468.             end
  469.         end
  470.         if event=="turtle_inventory" then
  471.             buildGUI()
  472.             --autostart
  473.             if imFull() then           
  474.                 keyPressed="enter"
  475.                 break
  476.             end
  477.             --
  478.         end
  479.     end
  480. return keyPressed
  481. end
  482.  
  483. function findeNearestPlot(height)
  484. local x,y
  485. local res={-1,-1}
  486. local mindist=math.huge
  487. local dist=0
  488.  
  489.     for y=1,sizeY do
  490.         for x=1,sizeX do
  491.             if matr[height][y][x] ~= 0 then
  492.                 dist=(x-tX)*(x-tX) + (y-tY)*(y-tY)
  493.                 if dist<mindist then
  494.                     mindist=dist
  495.                     res[1],res[2]=x,y
  496.                 end
  497.             end
  498.         end
  499.     end
  500. return res
  501. end
  502.  
  503. function forceMoveForward()
  504. local can_move=true
  505.     can_move=turtle.forward()
  506.     while not can_move do
  507.         --print("ERR: There is a something on my way!")
  508.         sleep(0.5)
  509.         --
  510.         turtle.dig()
  511.         turtle.attack()
  512.         --
  513.         can_move=turtle.forward()
  514.     end
  515. end
  516.  
  517. function forceMoveBack()
  518. local can_move=true
  519.     can_move=turtle.back()
  520.     while not can_move do
  521.         --print("ERR: There is a something on my way!")
  522.         sleep(0.5)
  523.         can_move=turtle.back()
  524.     end
  525. end
  526.  
  527. function forceMoveUp()
  528. local can_move=true
  529.     can_move=turtle.up()
  530.     while not can_move do
  531.         --print("ERR: There is a something on my way!")
  532.         sleep(0.5)
  533.         --
  534.         turtle.digUp()
  535.         turtle.attackUp()
  536.         --
  537.         can_move=turtle.up()
  538.     end
  539. end
  540.  
  541. function forceMoveDown()
  542. local can_move=true
  543.     can_move=turtle.down()
  544.     while not can_move do
  545.         --print("ERR: There is a something on my way!")
  546.         sleep(0.5)
  547.         --
  548.         turtle.digDown()
  549.         turtle.attackDown()
  550.         --
  551.         can_move=turtle.down()
  552.     end
  553. end
  554.  
  555. function left()
  556.     if tD[1]==1 and tD[2]==0 then
  557.         tD[1]=0
  558.         tD[2]=-1
  559.     elseif tD[1]==0 and tD[2]==-1 then
  560.         tD[1]=-1
  561.         tD[2]=0
  562.     elseif tD[1]==-1 and tD[2]==0 then
  563.         tD[1]=0
  564.         tD[2]=1
  565.     elseif tD[1]==0 and tD[2]==1 then
  566.         tD[1]=1
  567.         tD[2]=0
  568.     end
  569.     turtle.turnLeft()
  570. end
  571.  
  572. function right()
  573.     if tD[1]==1 and tD[2]==0 then
  574.         tD[1]=0
  575.         tD[2]=1
  576.     elseif tD[1]==0 and tD[2]==1 then
  577.         tD[1]=-1
  578.         tD[2]=0
  579.     elseif tD[1]==-1 and tD[2]==0 then
  580.         tD[1]=0
  581.         tD[2]=-1
  582.     elseif tD[1]==0 and tD[2]==-1 then
  583.         tD[1]=1
  584.         tD[2]=0
  585.     end
  586.     turtle.turnRight()
  587. end
  588.  
  589. function turnL(num1,num2)
  590.     while tD[1]~=num1 or tD[2]~=num2 do
  591.         left()
  592.     end
  593. end
  594.  
  595. function turnR(num1,num2)
  596.     while tD[1]~=num1 or tD[2]~=num2 do
  597.         right()
  598.     end
  599. end
  600.  
  601. function turnB(num1,num2)
  602.     if math.abs(num1-tD[1])==2 then
  603.         turnR(num1,num2)
  604.  
  605.     elseif math.abs(num2-tD[2])==2 then
  606.         turnL(num1,num2)
  607.  
  608.     elseif tD[1]==1 then
  609.         if num2==1 then
  610.             turnR(num1,num2)
  611.         elseif num2==-1 then
  612.             turnL(num1,num2)
  613.         end
  614.  
  615.     elseif tD[1]==-1 then
  616.         if num2==-1 then
  617.             turnR(num1,num2)
  618.         elseif num2==1 then
  619.             turnL(num1,num2)
  620.         end
  621.  
  622.     elseif tD[2]==1 then
  623.         if num1==-1 then
  624.             turnR(num1,num2)
  625.         elseif num1==1 then
  626.             turnL(num1,num2)
  627.         end
  628.  
  629.     elseif tD[2]==-1 then
  630.         if num1==1 then
  631.             turnR(num1,num2)
  632.         elseif num1==-1 then
  633.             turnL(num1,num2)
  634.         end
  635.  
  636.     end
  637. end
  638.  
  639. function moveXYZ(lx,ly,lz)
  640. local i
  641.     if tZ<lz then
  642.         for i=1,lz-tZ do
  643.             forceMoveUp()
  644.         end
  645.     else
  646.         for i=1,tZ-lz do
  647.             forceMoveDown()
  648.         end
  649.     end
  650.  
  651.     if tY<ly then
  652.         turnB(1,0)
  653.         for i=1,ly-tY do
  654.             forceMoveForward()
  655.         end
  656.     elseif tY>ly then
  657.         turnB(-1,0)
  658.         for i=1,tY-ly do
  659.             forceMoveForward()
  660.         end
  661.     end
  662.  
  663.     if tX<lx then
  664.         turnB(0,1)
  665.         for i=1,lx-tX do
  666.             forceMoveForward()
  667.         end
  668.     elseif tX>lx then
  669.         turnB(0,-1)
  670.         for i=1,tX-lx do
  671.             forceMoveForward()
  672.         end
  673.     end
  674.  
  675.     tX,tY,tZ=lx,ly,lz
  676. end
  677.  
  678. function toBase()
  679. local z=tZ
  680. local keyPressed=""
  681.     moveXYZ(1,0,z)
  682.     moveXYZ(1,0,1)
  683.     turnB(1,0)
  684.    
  685.     buildGUI()
  686.     keyPressed=keyWaiting()
  687.     if keyPressed == "backspace" then
  688.         --return
  689.         error()
  690.         --shell.exit() --rebooting
  691.     end
  692. end
  693.  
  694. function toWork(x,y,z,d)
  695.     moveXYZ(1,0,z)
  696.     moveXYZ(x,y,z)
  697.     turnB(d[1],d[2])
  698. end
  699.  
  700. function placeBlock(x2,y2,z2)
  701. local num
  702. local x,y,z,d
  703. local d={}
  704. local succes=true
  705. local slot=1
  706.     slot=matr[z2][y2][x2]
  707.     num=turtle.getItemCount(slot)
  708.     if (num == 0) or (num == 1 and blockSum[slot]>1) then
  709.         -----------work break start
  710.         x,y,z,d[1],d[2]=tX,tY,tZ,tD[1],tD[2]
  711.         toBase()
  712.         toWork(x,y,z,d)
  713.         num=turtle.getItemCount(slot)
  714.         -----------work break end
  715.     end
  716.    
  717.     if num>0 then
  718.         turtle.select(slot)
  719.         turtle.digDown()
  720.         succes=turtle.placeDown()
  721.         if succes then
  722.             matr[z2][y2][x2] = 0
  723.             blockPlaced = blockPlaced + 1
  724.             blockSum[slot] = blockSum[slot]-1
  725.             buildGUI()
  726.         else
  727.             --cant place block ERR--
  728.             -----------work break start
  729.             x,y,z,d[1],d[2]=tX,tY,tZ,tD[1],tD[2]
  730.             toBase()
  731.             toWork(x,y,z,d)
  732.             -----------work break end
  733.         end
  734.     end
  735. end
  736.  
  737. function buildScheme()
  738. local i
  739. local pos={}
  740.     for i=1,sizeZ do
  741.         pos=findeNearestPlot(i)
  742.         while pos[1]~= -1 do
  743.             moveXYZ(pos[1],pos[2],i+1+workHeight)
  744.             placeBlock(pos[1],pos[2],i)
  745.             pos=findeNearestPlot(i)
  746.         end
  747.     end
  748. end
  749.  
  750. function GUIinputHeight()
  751. local input
  752.     term.clear()   
  753.     term.setTextColor(colors.yellow)
  754.     term.setCursorPos(1,6)
  755.     term.write("+-------input the work height:--------+")
  756.     term.setCursorPos(1,7)
  757.     term.write("|                                     |")
  758.     term.setCursorPos(1,8)
  759.     term.write("+-------------------------------------+")
  760.     term.setTextColor(colors.white)
  761.     term.setCursorPos(4,7)
  762.     term.write("Height=")
  763.     input = read()
  764.     input=tonumber(input)
  765.     if input == nil then
  766.         workHeight=0
  767.     else
  768.         workHeight=input
  769.     end
  770. end
  771.  
  772. ----------------------------------------
  773.  
  774. --global variables:
  775. tX,tY,tZ=1,0,1
  776. tD={1,0}
  777. sizeX, sizeY, sizeZ = 0,0,0
  778. matr={}
  779. readyToBuild = false
  780. blockPlaced = 0
  781. inProcess = false
  782. slotName={}
  783. blockSum={}
  784. totalSum=0
  785. IAmReady = false
  786. workHeight=0
  787.  
  788. --Locals:
  789. local x,y,z=0,0,0
  790. local event, key
  791. local fileName
  792. local tmpTable={}
  793. local event,key
  794. local keyPressed=""
  795.  
  796. fileName = GUIopenFile()
  797. if fileName=="noFile" then
  798.     print(fileName)
  799.     return
  800. end
  801.  
  802. -- 1 -> title --
  803. -- 2 -> slotsName --
  804. -- 3 -> sizeX --
  805. -- 4 -> sizeY --
  806. -- 5 -> sizeZ --
  807. -- 6 -> the matrix --
  808. tmpTable = getInfoFromSchemeFile(fileName)
  809.  
  810. for i=1,16 do
  811.     slotName[i] = "block" .. tostring(i)
  812.     if tmpTable[2][i] ~= "" then
  813.         slotName[i] = tmpTable[2][i]
  814.     end
  815. end  
  816. sizeX = tmpTable[3]
  817. sizeY = tmpTable[4]
  818. sizeZ = tmpTable[5]
  819. matr = tmpTable[6]
  820.  
  821. GUIinputHeight()
  822.  
  823. --file creating debug
  824. --createSchemeFile("TEST_XXX.3dp",slotName,sizeX,sizeY,sizeZ,matr)
  825.  
  826. calculateBlockSum()
  827.  
  828. buildGUI()
  829. keyPressed=keyWaiting()
  830. if keyPressed == "backspace" then
  831.     return
  832. end
  833. --print(" B U I L D I N G !")
  834. buildScheme()
  835. z=tZ
  836. moveXYZ(1,0,z)
  837. moveXYZ(1,0,1)
  838. turnB(1,0)
  839. buildGUI()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement