Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- gui = {}
- gui.Drawing = {}
- guiStates = {}
- guiStates.startup = {}
- function guiStates.startup.init()
- term.clear()
- guiStates.startup.status = "going"
- gui.Drawing.printBorder()
- guiStates.startup.canContinue = true
- gui.Drawing.printCenteredText(3,"- Startup -")
- if ( processing.cont == false and processing.fileName == nil ) or not fs.exists(processing.execDir..processing.fileName) then
- guiStates.startup.canContinue = false
- local s = "No file specified."
- if processing.cont == false and fs.exists(processing.execDir..processing.fileName) == false then
- s = "File not found."
- end
- gui.Drawing.printCenteredText(5,s)
- gui.Drawing.printCenteredText(6,"Any key to exit.")
- guiStates.startup.status = "cancelled"
- return
- end
- gui.Drawing.printCenteredText(5,"- File -" )
- gui.Drawing.printCenteredText(6,processing.fileName )
- if processing.cont then
- gui.Drawing.printCenteredText(8,"Continue?" )
- else
- gui.Drawing.printCenteredText(8,"Start?" )
- end
- gui.Drawing.printCenteredText(9,"Press Y/N" )
- guiStates.startup.status = "waiting"
- end
- function guiStates.startup.key(key,char)
- if guiStates.startup.status == "cancelled" then
- processing.exit()
- elseif guiStates.startup.status == "waiting" then
- if char ~= nil then
- if string.lower(char) == "y" then
- processing.startup()
- elseif string.lower(char) == "n" then
- processing.exit()
- end
- end
- end
- end
- guiStates.loadingFile = {}
- guiStates.loadingFile.tickCount = 0
- function guiStates.loadingFile.init()
- term.clear()
- gui.Drawing.printBorder()
- gui.Drawing.printCenteredText(3," - Loading - ")
- term.setCursorPos(3,5)
- end
- function guiStates.loadingFile.tick()
- local w,h = term.getSize()
- --print("tick"..nbtReader.index.."/"..#nbtReader.schem.. "/"..tostring(nbtReader.active))
- if nbtReader.active == true then
- guiStates.loadingFile.tickCount = guiStates.loadingFile.tickCount - 20
- gui.Drawing.printProgressBar(nbtReader.index,#nbtReader.schem,h-1,true)
- else
- end
- end
- function guiStates.loadingFile.ev(...)
- local params = { ... }
- local evN = params[1]
- advLine = false
- if evN == "nbtloadstart" then
- write("NBT File...")
- local w,h = term.getSize()
- gui.Drawing.printProgressBar(0,100,h-1,true)
- elseif evN == "nbtloadend" then
- write("done")
- advLine = true
- elseif evN == "blockidloadstart" then
- write("Block IDs...")
- elseif evN == "blockidloadend" then
- write("done")
- advLine = true
- end
- if advLine then
- local x,y = term.getCursorPos()
- term.setCursorPos(3,y+1)
- end
- end
- guiStates.choosePosition = {}
- function guiStates.choosePosition.init()
- term.clear()
- gui.Drawing.printBorder()
- gui.Drawing.printCenteredText(2, "Choose Position")
- gui.Drawing.printCenteredText(5, "- Loading -")
- --gui.Drawing.printCenteredText(7, "<Enter> once done")
- --gui.Drawing.printCenteredText(9, "- Current Location -")
- --gui.Drawing.printCenteredText(10, mover.getLocationString())
- end
- function guiStates.choosePosition.initCustom(...)
- guiStates.choosePosition.request = ...
- guiStates.choosePosition.pos = {}
- for i=1,#guiStates.choosePosition.request do
- guiStates.choosePosition.pos[i] = -1
- end
- guiStates.choosePosition.gotoSet(1)
- guiStates.choosePosition.update()
- end
- function guiStates.choosePosition.gotoSet(setNum)
- guiStates.choosePosition.curSet = setNum
- guiStates.choosePosition.updateBase()
- end
- function guiStates.choosePosition.noPosChange()
- for k,v in pairs(mover.location) do
- if v ~= guiStates.choosePosition.pos[ guiStates.choosePosition.curSet ][ k ] then
- return false
- end
- end
- return true
- end
- function guiStates.choosePosition.allSet()
- for k,v in pairs(guiStates.choosePosition.pos) do
- if v == -1 then return false end
- end
- return true
- end
- function guiStates.choosePosition.update()
- gui.Drawing.printCenteredText(9, mover.getLocationString())
- if guiStates.choosePosition.allSet() and guiStates.choosePosition.noPosChange() then
- gui.Drawing.printCenteredText(h-1,"<Enter> Done")
- else
- gui.Drawing.printCenteredText(h-1,"<Enter> Set")
- end
- end
- function guiStates.choosePosition.printSavedPos(line)
- local s = ""
- if guiStates.choosePosition.pos[guiStates.choosePosition.curSet] == -1 then
- s = "<UNSET>"
- else
- local pShort = guiStates.choosePosition.pos[guiStates.choosePosition.curSet]
- s = pShort[1].."/"..pShort[2].."/"..pShort[3]
- end
- gui.Drawing.printCenteredText(line,s)
- end
- function guiStates.choosePosition.updateBase()
- gui.Drawing.printCenteredText(3,"("..guiStates.choosePosition.curSet.."/"..#guiStates.choosePosition.request..")")
- gui.Drawing.printCenteredText(4,guiStates.choosePosition.request[guiStates.choosePosition.curSet])
- gui.Drawing.printCenteredText(5,"Saved Position")
- guiStates.choosePosition.printSavedPos(6)
- gui.Drawing.printCenteredText(8,"Current Location")
- local w,h = term.getSize()
- --gui.Drawing.printCenteredText(h-1,"<Enter> to Set")
- gui.Drawing.printCenteredText(h-2,"<I> Up|<K> Down|<Arrows> Move/Turn")
- if guiStates.choosePosition.curSet > 1 then
- term.setCursorPos(2,h-1)
- write("<J> Back")
- end
- if guiStates.choosePosition.curSet < #guiStates.choosePosition.request then
- term.setCursorPos(w-9,h-1)
- write("Next <L>")
- end
- end
- function guiStates.choosePosition.ev(...)
- local params = { ... }
- local ev = params[1]
- if ev == "desc" then
- gui.Drawing.printCenteredText(3,params[2])
- end
- end
- function guiStates.choosePosition.key(key,char)
- if key == 200 then
- mover.moveForward()
- guiStates.choosePosition.update()
- elseif key == 203 then
- mover.turnLeft()
- elseif key == 205 then
- mover.turnRight()
- elseif key == 208 then
- mover.moveBackward()
- guiStates.choosePosition.update()
- elseif key == 23 then
- mover.moveUp()
- guiStates.choosePosition.update()
- elseif key == 37 then
- mover.moveDown()
- guiStates.choosePosition.update()
- elseif key == 38 then
- if guiStates.choosePosition.curSet < #guiStates.choosePosition.request then
- guiStates.choosePosition.gotoSet(guiStates.choosePosition.curSet + 1 )
- end
- elseif key == 36 then
- if guiStates.choosePosition.curSet > 1 then
- guiStates.choosePosition.gotoSet(guiStates.choosePosition.curSet - 1 )
- end
- elseif key == 28 then
- --processing.positionSet()
- if not guiStates.choosePosition.noPosChange() then
- guiStates.choosePosition.pos[guiStates.choosePosition.curSet] = mover.getLocCopy()
- guiStates.choosePosition.updateBase()
- elseif guiStates.choosePosition.allSet() then
- processing.positionSetRequestDone(request,pos)
- end
- end
- end
- function gui.keyPress(key,char)
- if gui.state == nil then return end
- if gui.state.key == nil then return end
- gui.state.key(key,char)
- end
- function gui.callEvent(...)
- if gui.state.ev ~= nil then
- gui.state.ev(...)
- end
- end
- function gui.tick()
- if gui.state ~= nil then
- if gui.state.tick ~= nil then
- gui.state.tick()
- end
- end
- end
- function gui.reportTempStatus()
- end
- function gui.clearTempStatus()
- end
- function gui.locationSetRequest(locLine)
- while true do
- local ev,p1 = os.pullEvent()
- if ev == "key" then
- if p1 == 200 then
- --forward/up arrow
- mover.moveForward()
- elseif p1 == 203 then
- --left
- mover.turnLeft()
- elseif p1 == 205 then
- --right
- mover.turnRight()
- elseif p1 == 208 then
- --back/down arrow
- mover.moveBackward()
- elseif p1 == 28 then
- return mover.getLocCopy()
- end
- end
- if locLine ~= nil then
- gui.Drawing.printLocation(locLine,gui.Drawing.getCenteredTextStartPos(mover.getLocationString()))
- end
- end
- end
- function gui.setState(nState)
- gui.state = nState
- gui.state.init()
- end
- function gui.animStep()
- if os.clock() - lastAnim > animSpeed then
- charAnim = ( ( charAnim + 1 ) % 5 )
- if charAnim == 0 then charAnim = 1 end
- lastAnim = os.clock()
- end
- end
- function gui.Drawing.printProgressBar(prog,maxProg,line,addText)
- local ocx,ocy = term.getCursorPos()
- term.setCursorPos(2,line)
- local tW,tH = term.getSize()
- local barW = tW - 2
- if addText then
- barW = barW - 6
- end
- local perc = prog / maxProg
- term.write("[")
- local blocksPerChar = maxProg / (barW-2)
- local total = 0
- drawnChars = 0
- first = true
- while drawnChars < barW-2 do
- if total < prog then
- write("=")
- else
- if first then
- first = false
- --write(animStates[charAnim])
- write("|")
- else
- write(" ")
- end
- end
- total = total + blocksPerChar
- drawnChars = drawnChars + 1
- end
- write("]")
- if addText then
- write( " 000%")
- drawText = tostring(math.floor(perc*100))
- while string.len(drawText) < 3 do
- drawText = "0"..drawText
- end
- term.setCursorPos(tW-5,line)
- term.write(drawText)
- end
- term.setCursorPos(ocx,ocy)
- end
- function gui.Drawing.printBorder()
- gui.Drawing.printRowLine(1,"-")
- gui.Drawing.printColumnLine(1,"|")
- local x,y = term.getSize()
- gui.Drawing.printRowLine(y,"-")
- gui.Drawing.printColumnLine(x,"|")
- term.setCursorPos(1,1)
- term.write("+")
- term.setCursorPos(x,1)
- term.write("+")
- term.setCursorPos(1,y)
- term.write("+")
- term.setCursorPos(x,y)
- term.write("+")
- end
- function gui.Drawing.printRowLine(line,symb)
- if symb == nil then symb = "#" end
- local x,y= term.getCursorPos()
- term.setCursorPos(1,line)
- local w,h = term.getSize()
- for i=1,w,1 do
- term.write(symb)
- end
- term.setCursorPos(x,y)
- end
- function gui.Drawing.printColumnLine(column,symb)
- if symb == nil then symb = "#" end
- local x,y = term.getCursorPos()
- local w,h = term.getSize()
- for i=1,h,1 do
- term.setCursorPos(column,i)
- term.write(symb)
- end
- term.setCursorPos(x,y)
- end
- function gui.Drawing.getCenteredTextStartPos(line)
- local w,h = term.getSize()
- local len = line:len()
- local posStart = (( w / 2 ) - ( len / 2 )) + 1
- return posStart
- end
- function gui.Drawing.clearLine(line)
- local w,h = term.getSize()
- term.setCursorPos(2,line)
- for i=2,w-1,1 do
- write(" ")
- end
- end
- function gui.Drawing.printCenteredText(line,text)
- local x,y = term.getCursorPos()
- gui.Drawing.clearLine(line)
- if line == "" then return end
- local posStart = gui.Drawing.getCenteredTextStartPos(text)
- term.setCursorPos(posStart,line)
- term.write(text)
- term.setCursorPos(x,y)
- end
- function gui.Drawing.printGUIPositionRefill(i,refillCounter)
- gui.Drawing.printCenteredText(3,"Set refill positions ("..refillCounter.."/"..uniqueBlockCount..")")
- gui.Drawing.printCenteredText(4,"Material: " .. config.getBlockName(i))
- gui.Drawing.printCenteredText(5,"Use arrow keys to move turtle")
- gui.Drawing.printCenteredText(8,"Current location")
- gui.Drawing.printLocation(9,gui.Drawing.getCenteredTextStartPos(mover.getLocationString()))
- end
- function gui.Drawing.printGUIPositionStart()
- gui.Drawing.printCenteredText(3,"Set Starting Position")
- gui.Drawing.printCenteredText(5,"Use Arrow Keys to move turtle")
- gui.Drawing.printCenteredText(8,"Current Location")
- gui.Drawing.printLocation(9,gui.Drawing.getCenteredTextStartPos(mover.getLocationString()))
- end
- function gui.Drawing.printLocation(line, startPos)
- local x,y = term.getCursorPos()
- term.setCursorPos(startPos,line)
- term.write(getLocationString())
- term.setCursorPos(x,y)
- end
- function gui.Drawing.printGUIBuildDirection()
- gui.Drawing.printCenteredText(3,"Set Build Direction")
- gui.Drawing.printCenteredText(4,"Left/Right")
- gui.Drawing.printGUIBuildDirectionRect()
- end
- function gui.Drawing.printGUIBuildDirectionRect()
- local tw,th = term.getSize()
- local rw = 4
- local rh = 4
- local rx = math.ceil( tw / 2 )
- local ry = 6
- if buildToLeft then
- rx = rx - rh
- elseif not uneven then
- rx = rx + 1
- end
- gui.Drawing.drawRect(2,6,tw-4,rh," ")
- gui.Drawing.drawRect(rx,ry,rw,rh,"#")
- cPos = rx
- if buildToLeft then
- cPos = rx + rh
- end
- term.setCursorPos(cPos,ry+rh)
- term.write("T")
- end
- function gui.Drawing.drawRect(x,y,w,h,c)
- for dx=0,w,1 do
- for dy=0,h,1 do
- term.setCursorPos(x+dx,y+dy)
- term.write(c)
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment