Pinkishu

nbtdll/gui

Jun 17th, 2012
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 11.99 KB | None | 0 0
  1. gui = {}
  2. gui.Drawing = {}
  3. guiStates = {}
  4.  
  5. guiStates.startup = {}
  6. function guiStates.startup.init()
  7.     term.clear()
  8.     guiStates.startup.status = "going"
  9.     gui.Drawing.printBorder()
  10.     guiStates.startup.canContinue = true
  11.     gui.Drawing.printCenteredText(3,"- Startup -")
  12.     if ( processing.cont == false and processing.fileName == nil ) or not fs.exists(processing.execDir..processing.fileName) then
  13.         guiStates.startup.canContinue = false
  14.         local s = "No file specified."
  15.         if processing.cont == false and fs.exists(processing.execDir..processing.fileName) == false then
  16.             s = "File not found."
  17.         end
  18.         gui.Drawing.printCenteredText(5,s)
  19.         gui.Drawing.printCenteredText(6,"Any key to exit.")
  20.         guiStates.startup.status = "cancelled"
  21.         return
  22.     end
  23.     gui.Drawing.printCenteredText(5,"- File -" )
  24.     gui.Drawing.printCenteredText(6,processing.fileName )
  25.     if processing.cont then
  26.         gui.Drawing.printCenteredText(8,"Continue?" )
  27.     else
  28.         gui.Drawing.printCenteredText(8,"Start?" )
  29.     end
  30.     gui.Drawing.printCenteredText(9,"Press Y/N" )
  31.     guiStates.startup.status = "waiting"
  32. end
  33.  
  34. function guiStates.startup.key(key,char)
  35.     if guiStates.startup.status == "cancelled" then
  36.         processing.exit()
  37.     elseif guiStates.startup.status == "waiting" then
  38.         if char ~= nil then
  39.             if string.lower(char) == "y" then
  40.                 processing.startup()
  41.             elseif string.lower(char) == "n" then
  42.                 processing.exit()
  43.             end
  44.         end
  45.     end
  46. end
  47.  
  48. guiStates.loadingFile = {}
  49. guiStates.loadingFile.tickCount = 0
  50. function guiStates.loadingFile.init()
  51.     term.clear()
  52.     gui.Drawing.printBorder()
  53.     gui.Drawing.printCenteredText(3," - Loading - ")
  54.     term.setCursorPos(3,5)
  55.    
  56. end
  57.  
  58. function guiStates.loadingFile.tick()
  59.     local w,h = term.getSize()
  60.     --print("tick"..nbtReader.index.."/"..#nbtReader.schem.. "/"..tostring(nbtReader.active))
  61.     if nbtReader.active == true then
  62.  
  63.         guiStates.loadingFile.tickCount = guiStates.loadingFile.tickCount - 20
  64.         gui.Drawing.printProgressBar(nbtReader.index,#nbtReader.schem,h-1,true)
  65.        
  66.     else
  67.        
  68.     end
  69. end
  70.  
  71. function guiStates.loadingFile.ev(...)
  72.     local params = { ... }
  73.     local evN = params[1]
  74.     advLine = false
  75.     if evN == "nbtloadstart" then
  76.         write("NBT File...")
  77.         local w,h = term.getSize()
  78.         gui.Drawing.printProgressBar(0,100,h-1,true)
  79.     elseif evN == "nbtloadend" then
  80.         write("done")
  81.         advLine = true
  82.     elseif evN == "blockidloadstart" then
  83.         write("Block IDs...")
  84.     elseif evN == "blockidloadend" then
  85.         write("done")
  86.         advLine = true
  87.     end
  88.     if advLine then
  89.         local x,y = term.getCursorPos()
  90.         term.setCursorPos(3,y+1)
  91.     end
  92. end
  93.  
  94. guiStates.choosePosition = {}
  95.  
  96. function guiStates.choosePosition.init()
  97.     term.clear()
  98.     gui.Drawing.printBorder()
  99.     gui.Drawing.printCenteredText(2, "Choose Position")
  100.     gui.Drawing.printCenteredText(5, "- Loading -")
  101.     --gui.Drawing.printCenteredText(7, "<Enter> once done")
  102.     --gui.Drawing.printCenteredText(9, "- Current Location -")
  103.     --gui.Drawing.printCenteredText(10, mover.getLocationString())
  104. end
  105.  
  106. function guiStates.choosePosition.initCustom(...)
  107.     guiStates.choosePosition.request = ...
  108.     guiStates.choosePosition.pos = {}
  109.     for i=1,#guiStates.choosePosition.request do
  110.         guiStates.choosePosition.pos[i] = -1
  111.     end
  112.     guiStates.choosePosition.gotoSet(1)
  113.     guiStates.choosePosition.update()
  114. end
  115.  
  116. function guiStates.choosePosition.gotoSet(setNum)
  117.     guiStates.choosePosition.curSet = setNum
  118.     guiStates.choosePosition.updateBase()
  119. end
  120.  
  121. function guiStates.choosePosition.noPosChange()
  122.     for k,v in pairs(mover.location) do
  123.         if v ~= guiStates.choosePosition.pos[ guiStates.choosePosition.curSet ][ k ] then
  124.             return false
  125.         end
  126.     end
  127.     return true
  128. end
  129.  
  130. function guiStates.choosePosition.allSet()
  131.     for k,v in pairs(guiStates.choosePosition.pos) do
  132.         if v == -1 then return false end
  133.     end
  134.     return true
  135. end
  136.  
  137. function guiStates.choosePosition.update()
  138.     gui.Drawing.printCenteredText(9, mover.getLocationString())
  139.     if guiStates.choosePosition.allSet() and guiStates.choosePosition.noPosChange() then
  140.         gui.Drawing.printCenteredText(h-1,"<Enter> Done")
  141.     else
  142.         gui.Drawing.printCenteredText(h-1,"<Enter> Set")
  143.     end
  144. end
  145.  
  146. function guiStates.choosePosition.printSavedPos(line)
  147.    
  148.     local s = ""
  149.     if guiStates.choosePosition.pos[guiStates.choosePosition.curSet] == -1 then
  150.         s = "<UNSET>"
  151.     else
  152.         local pShort = guiStates.choosePosition.pos[guiStates.choosePosition.curSet]
  153.         s = pShort[1].."/"..pShort[2].."/"..pShort[3]
  154.     end
  155.     gui.Drawing.printCenteredText(line,s)
  156. end
  157.  
  158. function guiStates.choosePosition.updateBase()
  159.  
  160.     gui.Drawing.printCenteredText(3,"("..guiStates.choosePosition.curSet.."/"..#guiStates.choosePosition.request..")")
  161.     gui.Drawing.printCenteredText(4,guiStates.choosePosition.request[guiStates.choosePosition.curSet])
  162.     gui.Drawing.printCenteredText(5,"Saved Position")
  163.     guiStates.choosePosition.printSavedPos(6)
  164.     gui.Drawing.printCenteredText(8,"Current Location")
  165.    
  166.     local w,h = term.getSize()
  167.     --gui.Drawing.printCenteredText(h-1,"<Enter> to Set")
  168.  
  169.     gui.Drawing.printCenteredText(h-2,"<I> Up|<K> Down|<Arrows> Move/Turn")
  170.     if guiStates.choosePosition.curSet > 1 then
  171.         term.setCursorPos(2,h-1)
  172.         write("<J> Back")
  173.     end
  174.     if guiStates.choosePosition.curSet < #guiStates.choosePosition.request then
  175.        
  176.         term.setCursorPos(w-9,h-1)
  177.         write("Next <L>")
  178.     end
  179.    
  180. end
  181.  
  182. function guiStates.choosePosition.ev(...)
  183.     local params = { ... }
  184.     local ev = params[1]
  185.     if ev == "desc" then
  186.         gui.Drawing.printCenteredText(3,params[2])
  187.     end
  188. end
  189.  
  190. function guiStates.choosePosition.key(key,char)
  191.     if key == 200 then
  192.         mover.moveForward()
  193.         guiStates.choosePosition.update()
  194.     elseif key == 203 then
  195.         mover.turnLeft()
  196.     elseif key == 205 then
  197.         mover.turnRight()
  198.     elseif key == 208 then
  199.         mover.moveBackward()
  200.         guiStates.choosePosition.update()
  201.     elseif key == 23 then
  202.         mover.moveUp()
  203.         guiStates.choosePosition.update()
  204.     elseif key == 37 then
  205.         mover.moveDown()
  206.         guiStates.choosePosition.update()
  207.     elseif key == 38 then
  208.         if guiStates.choosePosition.curSet < #guiStates.choosePosition.request then
  209.             guiStates.choosePosition.gotoSet(guiStates.choosePosition.curSet + 1 )
  210.         end
  211.     elseif key == 36 then
  212.         if guiStates.choosePosition.curSet > 1 then
  213.             guiStates.choosePosition.gotoSet(guiStates.choosePosition.curSet - 1 )
  214.         end
  215.     elseif key == 28 then
  216.         --processing.positionSet()
  217.         if not guiStates.choosePosition.noPosChange() then
  218.             guiStates.choosePosition.pos[guiStates.choosePosition.curSet] = mover.getLocCopy()
  219.             guiStates.choosePosition.updateBase()
  220.         elseif guiStates.choosePosition.allSet() then
  221.             processing.positionSetRequestDone(request,pos)
  222.         end
  223.     end
  224. end
  225.  
  226. function gui.keyPress(key,char)
  227.     if gui.state == nil then return end
  228.     if gui.state.key == nil then return end
  229.     gui.state.key(key,char)
  230. end
  231.  
  232. function gui.callEvent(...)
  233.     if gui.state.ev ~= nil then
  234.         gui.state.ev(...)
  235.     end
  236. end
  237.  
  238. function gui.tick()
  239.     if gui.state ~= nil then
  240.         if gui.state.tick ~= nil then
  241.             gui.state.tick()
  242.         end
  243.     end
  244. end
  245.  
  246. function gui.reportTempStatus()
  247. end
  248.  
  249. function gui.clearTempStatus()
  250. end
  251.  
  252. function gui.locationSetRequest(locLine)
  253.     while true do
  254.     local ev,p1 = os.pullEvent()
  255.  
  256.     if ev == "key" then
  257.         if p1 == 200 then
  258.             --forward/up arrow
  259.             mover.moveForward()
  260.         elseif p1 == 203 then
  261.             --left
  262.             mover.turnLeft()
  263.         elseif p1 == 205 then
  264.             --right
  265.             mover.turnRight()
  266.         elseif p1 == 208 then
  267.             --back/down arrow
  268.             mover.moveBackward()
  269.         elseif p1 == 28 then
  270.             return mover.getLocCopy()
  271.         end
  272.     end
  273.        
  274.     if locLine ~= nil then
  275.         gui.Drawing.printLocation(locLine,gui.Drawing.getCenteredTextStartPos(mover.getLocationString()))
  276.     end
  277.    
  278.   end
  279.  
  280. end
  281.  
  282. function gui.setState(nState)
  283.     gui.state = nState
  284.     gui.state.init()
  285. end
  286.  
  287. function gui.animStep()
  288.   if os.clock() - lastAnim > animSpeed then
  289.     charAnim = ( ( charAnim + 1 ) % 5 )
  290.     if charAnim == 0 then charAnim = 1 end
  291.     lastAnim = os.clock()
  292.   end
  293. end
  294.  
  295.  
  296. function gui.Drawing.printProgressBar(prog,maxProg,line,addText)
  297.     local ocx,ocy = term.getCursorPos()
  298.     term.setCursorPos(2,line)
  299.     local tW,tH = term.getSize()
  300.     local barW = tW - 2
  301.     if addText then
  302.         barW = barW - 6
  303.     end
  304.     local perc = prog / maxProg
  305.     term.write("[")
  306.     local blocksPerChar = maxProg / (barW-2)
  307.     local total = 0
  308.     drawnChars = 0
  309.     first = true
  310.     while drawnChars < barW-2 do
  311.         if total < prog then
  312.             write("=")
  313.         else
  314.             if first then
  315.               first = false
  316.               --write(animStates[charAnim])
  317.               write("|")
  318.             else
  319.                 write(" ")
  320.             end
  321.         end
  322.         total = total + blocksPerChar
  323.         drawnChars = drawnChars + 1
  324.        
  325.     end
  326.     write("]")
  327.     if addText then
  328.         write( " 000%")
  329.         drawText = tostring(math.floor(perc*100))
  330.         while string.len(drawText) < 3 do
  331.             drawText = "0"..drawText
  332.         end
  333.         term.setCursorPos(tW-5,line)
  334.         term.write(drawText)
  335.        
  336.     end
  337.     term.setCursorPos(ocx,ocy)
  338.    
  339. end
  340.  
  341. function gui.Drawing.printBorder()
  342.   gui.Drawing.printRowLine(1,"-")
  343.   gui.Drawing.printColumnLine(1,"|")
  344.   local x,y = term.getSize()
  345.   gui.Drawing.printRowLine(y,"-")
  346.   gui.Drawing.printColumnLine(x,"|")
  347.   term.setCursorPos(1,1)
  348.   term.write("+")
  349.   term.setCursorPos(x,1)
  350.   term.write("+")
  351.   term.setCursorPos(1,y)
  352.   term.write("+")
  353.   term.setCursorPos(x,y)
  354.   term.write("+")
  355. end
  356.  
  357. function gui.Drawing.printRowLine(line,symb)
  358.   if symb == nil then symb = "#" end
  359.   local x,y= term.getCursorPos()
  360.   term.setCursorPos(1,line)
  361.   local w,h = term.getSize()
  362.   for i=1,w,1 do
  363.     term.write(symb)
  364.   end
  365.   term.setCursorPos(x,y)
  366. end
  367.  
  368. function gui.Drawing.printColumnLine(column,symb)
  369.   if symb == nil then symb = "#" end
  370.   local x,y = term.getCursorPos()
  371.   local w,h = term.getSize()
  372.   for i=1,h,1 do    
  373.     term.setCursorPos(column,i)
  374.     term.write(symb)
  375.   end
  376.   term.setCursorPos(x,y)
  377. end
  378.  
  379. function gui.Drawing.getCenteredTextStartPos(line)
  380.   local w,h = term.getSize()
  381.   local len = line:len()
  382.   local posStart = (( w / 2 ) - ( len / 2 )) + 1
  383.   return posStart
  384. end
  385.  
  386. function gui.Drawing.clearLine(line)
  387.   local w,h = term.getSize()
  388.   term.setCursorPos(2,line)
  389.   for i=2,w-1,1 do
  390.     write(" ")
  391.   end
  392. end
  393.  
  394. function gui.Drawing.printCenteredText(line,text)
  395.   local x,y = term.getCursorPos()
  396.   gui.Drawing.clearLine(line)
  397.   if line == "" then return end
  398.   local posStart = gui.Drawing.getCenteredTextStartPos(text)
  399.   term.setCursorPos(posStart,line)
  400.   term.write(text)
  401.   term.setCursorPos(x,y)
  402. end
  403.  
  404. function gui.Drawing.printGUIPositionRefill(i,refillCounter)
  405.   gui.Drawing.printCenteredText(3,"Set refill positions ("..refillCounter.."/"..uniqueBlockCount..")")
  406.   gui.Drawing.printCenteredText(4,"Material: " .. config.getBlockName(i))
  407.   gui.Drawing.printCenteredText(5,"Use arrow keys to move turtle")
  408.   gui.Drawing.printCenteredText(8,"Current location")
  409.   gui.Drawing.printLocation(9,gui.Drawing.getCenteredTextStartPos(mover.getLocationString()))
  410.  
  411. end
  412.  
  413. function gui.Drawing.printGUIPositionStart()
  414.   gui.Drawing.printCenteredText(3,"Set Starting Position")
  415.   gui.Drawing.printCenteredText(5,"Use Arrow Keys to move turtle")
  416.   gui.Drawing.printCenteredText(8,"Current Location")
  417.   gui.Drawing.printLocation(9,gui.Drawing.getCenteredTextStartPos(mover.getLocationString()))
  418.  
  419. end
  420.  
  421. function gui.Drawing.printLocation(line, startPos)
  422.   local x,y = term.getCursorPos()
  423.   term.setCursorPos(startPos,line)
  424.   term.write(getLocationString())
  425.   term.setCursorPos(x,y)
  426. end
  427.  
  428.  
  429. function gui.Drawing.printGUIBuildDirection()
  430.   gui.Drawing.printCenteredText(3,"Set Build Direction")
  431.   gui.Drawing.printCenteredText(4,"Left/Right")
  432.   gui.Drawing.printGUIBuildDirectionRect()
  433. end
  434.  
  435. function gui.Drawing.printGUIBuildDirectionRect()
  436.   local tw,th = term.getSize()
  437.   local rw = 4
  438.   local rh = 4
  439.   local rx = math.ceil( tw / 2 )
  440.   local ry = 6
  441.  
  442.   if buildToLeft then
  443.     rx = rx - rh
  444.   elseif not uneven then
  445.     rx = rx + 1
  446.   end
  447.  
  448.   gui.Drawing.drawRect(2,6,tw-4,rh," ")
  449.   gui.Drawing.drawRect(rx,ry,rw,rh,"#")
  450.   cPos = rx
  451.   if buildToLeft then
  452.     cPos = rx + rh
  453.   end
  454.   term.setCursorPos(cPos,ry+rh)
  455.   term.write("T")
  456.  
  457. end
  458.  
  459. function gui.Drawing.drawRect(x,y,w,h,c)
  460.   for dx=0,w,1 do
  461.     for dy=0,h,1 do
  462.       term.setCursorPos(x+dx,y+dy)
  463.       term.write(c)
  464.     end
  465.   end
  466. end
Advertisement
Add Comment
Please, Sign In to add comment