Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- os.loadAPI("API/draw")
- args = {...}
- filename = args[1]
- screenStartX = 8
- screenStartY = 3
- layer = 1
- drawn = false
- running = true
- down = false
- item = "no item"
- draw.clear()
- print("'"..filename.."' open for editing.")
- function debugMsg(text, fileLog)
- timeNow = os.time()
- timeStamp = textutils.formatTime(timeNow, true)
- if #timeStamp < 5 then
- timeStamp = "0"..timeStamp
- end
- if fs.exists("Debug") then
- data = fs.open("Debug", "a")
- data.writeLine(timeStamp..": "..text)
- data.close()
- else
- data = fs.open("Debug", "w")
- data.writeLine(timeStamp..": "..text)
- data.close()
- end
- if debugBool then
- sleep(.2)
- end
- end
- function newBlueprint()
- bpTab = {}
- end
- function blankBlueprint(level, sizeX, sizeZ)
- bpTab[level] = {}
- scrX = screenStartX
- scrY = screenStartY
- for j = 1, sizeX do
- bpTab[level][j] = {}
- for k = 1, sizeZ do
- bpTab[level][j][k] = {}
- bpTab[level][j][k][1] = "air"
- bpTab[level][j][k][2] = draw.blue
- bpTab[level][j][k][3] = scrX
- bpTab[level][j][k][4] = scrY
- if k ~= sizeX then
- scrX = scrX + 3
- else
- scrX = 8
- scrY = scrY + 2
- end
- end
- end
- debugMsg("Layer "..level.." added.")
- saveBlueprint()
- end
- function saveBlueprint()
- data = fs.open("Blueprints/"..filename, "w")
- data.writeLine(textutils.serialize(bpTab))
- data.close()
- end
- function buttonSetup()
- scrTab = nil
- x, y = mon.getSize()
- scrTab = {}
- scrTab[1] = {}
- scrTab[1][1] = "Up Level"
- scrTab[1][2] = draw.lime
- scrTab[1][3] = x - 15
- scrTab[1][4] = 1
- scrTab[2] = {}
- scrTab[2][1] = "Down Level"
- scrTab[2][2] = draw.lime
- scrTab[2][3] = x - 15
- scrTab[2][4] = 4
- scrTab[3] = {}
- scrTab[3][1] = "Save"
- scrTab[3][2] = draw.blue
- scrTab[3][3] = x - 15
- scrTab[3][4] = 7
- scrTab[4] = {}
- scrTab[4][1] = "Tilesets"
- scrTab[4][2] = draw.lime
- scrTab[4][3] = x - 15
- scrTab[4][4] = 10
- debugMsg("System: Buttons cleared.")
- crafting = false
- --drawn = false
- end
- function addButton(label, itemName, colour) --next version add block label for grid squares eg: "OP" = "Oak Planks" etc
- newMax = #scrTab + 1
- scrTab[newMax] = {}
- scrTab[newMax][1] = label
- scrTab[newMax][2] = colour
- scrTab[newMax][3] = x - 15
- scrTab[newMax][4] = scrTab[newMax - 1][4] + 3
- scrTab[newMax][5] = itemName
- debugMsg(label.." button added.")
- end
- function buttons()
- for i = 1, y do
- draw.writeText(x - 15, i, draw.black, draw.black, " ")
- end
- for i = 1, #scrTab do
- draw.writeText(scrTab[i][3], scrTab[i][4], draw.black, scrTab[i][2], "+-------------+")
- draw.writeText(scrTab[i][3], scrTab[i][4] + 1, draw.black, scrTab[i][2], ": :")
- draw.writeText(scrTab[i][3], scrTab[i][4] + 2, draw.black, scrTab[i][2], "+-------------+")
- draw.box(scrTab[i][3] + 1, scrTab[i][4] + 1, x - 2, scrTab[i][4] + 1, scrTab[i][2])
- draw.centerText(scrTab[i][3] + 1, x - 2, scrTab[i][4] + 1, scrTab[i][2], draw.black, scrTab[i][1])
- end
- debugMsg("System: Buttons drawn.")
- end
- function downMenu()
- if layer > 1 then
- addButton("Show Last", "none", draw.white)
- down = true
- end
- end
- function tilesetMenu()
- addButton("Blocks", "none", draw.grey)
- addButton("Woods", "none", draw.brown)
- addButton("Craftable", "none", draw.orange)
- addButton("Plants", "none", draw.blue)
- addButton("Half Slabs", "none", draw.white)
- end
- function blockMenu()
- addButton("Air", "air", draw.blue)
- addButton("Sand", "Sand", draw.yellow)
- addButton("Sandstone", "Sandstone", draw.yellow)
- addButton("Cobble", "Cobblestone", draw.grey)
- addButton("Stone", "Stone", draw.lightGrey)
- addButton("St Brick", "Stone Bricks", draw.lightGrey)
- addButton("Glass", "Glass", draw.lightBlue)
- addButton("Obsidian", "Obsidian", draw.purple)
- end
- function woodMenu()
- addButton("Oak", "Oak Wood", draw.brown)
- addButton("Spruce", "Spruce Wood", draw.brown)
- addButton("Birch", "Birch Wood", draw.white)
- addButton("Oak Planks", "Oak Wood Planks", draw.brown)
- addButton("Spruce Planks", "Spruce Wood Planks", draw.brown)
- addButton("Birch Planks", "Birch Wood Planks", draw.brown)
- addButton("Fence", "Fence", draw.brown)
- end
- function craftMenu()
- addButton("Chest", "Chest", draw.yellow)
- addButton("Iron Chest", "Iron Chest", draw.lightGrey)
- addButton("Furnace", "Furnace", draw.grey)
- addButton("Workbench", "Crafting Table", draw.orange)
- addButton("Panes", "Glass Pane", draw.lightBlue)
- addButton("Oak Stairs", "Oak Wood Stairs", draw.brown)
- end
- function plantMenu()
- addButton("Dirt", "Dirt", draw.brown)
- addButton("Oak", "Oak Sapling", draw.lime)
- addButton("Spruce", "Spruce Sapling", draw.green)
- addButton("Birch", "Birch Sapling", draw.white)
- addButton("Wheat", "Seeds", draw.lime)
- addButton("Sugar", "Sugar Canes", draw.blue)
- end
- function HSMenu()
- addButton("Oak", "Oak Wood Slab", draw.brown)
- addButton("Spruce", "Spruce Wood Slab", draw.brown)
- addButton("Birch", "Birch Wood Slab", draw.white)
- addButton("Cobble", "Cobblestone Slab", draw.grey)
- addButton("Stone", "Stone Slab", draw.lightGrey)
- addButton("St Brick", "Stone Bricks Slab", draw.lightGrey)
- end
- function gridSquare(gsX, gsY, colour, text)
- draw.writeText(gsX, gsY, draw.black, draw.lightBlue, "+--+")
- draw.writeText(gsX, gsY + 1, draw.black, draw.lightBlue, ": :")
- draw.writeText(gsX, gsY + 2, draw.black, draw.lightBlue, "+--+")
- text = string.sub(text, 1, 2)
- if text ~= "ai" then
- draw.writeText(gsX + 1, gsY + 1, colour, draw.black, text)
- else
- draw.box(gsX + 1, gsY + 1, gsX + 2, gsY + 1, colour)
- end
- end
- function drawScreen(level, overLay)
- term.redirect(mon)
- x, y = mon.getSize()
- if overlay ~= nil then
- draw.clear()
- drawn = false
- end
- buttons()
- maxX = (x - 15)
- for i = 1, maxX do
- draw.writeText(i, 2, draw.black, draw.black, " ")
- end
- draw.centerText(1, maxX, 2, draw.black, draw.lime, "Level: "..layer.."/"..#bpTab..", "..item.." selected.")
- for i = 1, #bpTab[level] do
- for j = 1, #bpTab[level][i] do
- if bpTab[level][i][j][5] ~= nil then
- label = string.sub(bpTab[level][i][j][1], 1, 1)
- if bpTab[level][i][j][5] == 0 then
- label = label..">"
- elseif bpTab[level][i][j][5] == 1 then
- label = label.."v"
- elseif bpTab[level][i][j][5] == 2 then
- label = label.."<"
- elseif bpTab[level][i][j][5] == 3 then
- label = label.."^"
- end
- else
- label = string.sub(bpTab[level][i][j][1], 1, 2)
- end
- if overLay then
- if label ~= "ai" then
- gridSquare(bpTab[level][i][j][3], bpTab[level][i][j][4], bpTab[level][i][j][2], label)
- end
- else
- gridSquare(bpTab[level][i][j][3], bpTab[level][i][j][4], bpTab[level][i][j][2], label)
- end
- end
- end
- end
- function run()
- event, p1, p2, p3, p4, p5 = os.pullEvent()
- if event == "monitor_touch" then --MONITOR CLICKS
- debugMsg("System: "..event.." LOGGED.")
- for i = 1, #scrTab do --ALL SIDE BUTTON CHECKING DONE HERE
- --debugMsg(i)
- if p2 >= scrTab[i][3] and p2 <= x - 2 then
- if p3 == scrTab[i][4] + 1 then
- debugMsg("System : Button clicked... "..scrTab[i][1])
- if scrTab[i][1] == "Up Level" then
- buttonSetup()
- if layer <= #bpTab then
- layer = layer + 1
- if bpTab[layer] == nil then
- blankBlueprint(layer, 16, 16)
- end
- drawScreen(layer)
- return
- end
- elseif scrTab[i][1] == "Down Level" then
- buttonSetup()
- if layer > 1 then
- if down then
- buttonSetup()
- layer = layer - 1
- drawScreen(layer)
- down = false
- drawn = false
- return
- else
- buttonSetup()
- downMenu()
- drawScreen(layer)
- return
- end
- end
- elseif scrTab[i][1] == "Show Last" then
- buttonSetup()
- down = false
- --drawn = false
- drawScreen(layer - 1)
- drawScreen(layer, "o")
- return
- elseif scrTab[i][1] == "Save" then
- buttonSetup()
- drawScreen(layer)
- saveBlueprint()
- return
- elseif scrTab[i][1] == "Tilesets" then
- buttonSetup()
- drawScreen(layer)
- tilesetMenu()
- facing = false
- return
- elseif scrTab[i][1] == "Blocks" then
- buttonSetup()
- drawScreen(layer)
- blockMenu()
- return
- elseif scrTab[i][1] == "Woods" then
- buttonSetup()
- drawScreen(layer)
- woodMenu()
- return
- elseif scrTab[i][1] == "Craftable" then
- buttonSetup()
- drawScreen(layer)
- craftMenu()
- crafting = true
- return
- elseif scrTab[i][1] == "Plants" then
- buttonSetup()
- drawScreen(layer)
- plantMenu()
- return
- elseif scrTab[i][1] == "Half Slabs" then
- buttonSetup()
- drawScreen(layer)
- HSMenu()
- return
- else
- item = scrTab[i][5]
- itemCol = scrTab[i][2]
- drawScreen(layer)
- return
- end
- end
- end
- end
- for i = 1, #bpTab[layer] do --CHECKING FOR GRID CLICKS DONE HERE
- for j = 1, #bpTab[layer][i] do
- if p2 >= (tonumber(bpTab[layer][i][j][3]) + 1) and p2 <= (tonumber(bpTab[layer][i][j][3]) + 3) then
- if p3 == (tonumber(bpTab[layer][i][j][4]) + 1) then
- if item ~= "no item" then
- bpTab[layer][i][j][1] = item
- bpTab[layer][i][j][2] = itemCol
- if crafting then
- if bpTab[layer][i][j][5] == nil then
- bpTab[layer][i][j][5] = 0
- else
- if bpTab[layer][i][j][5] >= 3 then
- bpTab[layer][i][j][5] = 0
- else
- bpTab[layer][i][j][5] = bpTab[layer][i][j][5] + 1
- end
- end
- else
- bpTab[layer][i][j][5] = nil
- end
- drawScreen(layer)
- return
- end
- end
- end
- end
- end
- elseif event == "key" then
- if keys.getName(p1) == "q" then
- running = false
- end
- end
- end
- --PROGRAM START
- if fs.exists("Blueprints/"..filename) then
- data = fs.open("Blueprints/"..filename, "r")
- bpTab = textutils.unserialize(data.readLine())
- data.close()
- else
- newBlueprint()
- blankBlueprint(layer, 16, 16)
- end
- perData = peripheral.getNames()
- for i = 1, #perData do
- if peripheral.getType(perData[i]) == "modem" then
- m = peripheral.wrap(perData[i])
- if m.isWireless() then
- wifiSide = perData[i]
- rednet.open(wifiSide)
- end
- elseif peripheral.getType(perData[i]) == "monitor" then
- mon = peripheral.wrap(perData[i])
- mon.setTextScale(.5)
- x, y = mon.getSize()
- end
- end
- buttonSetup()
- drawScreen(layer)
- while running do
- debugMsg("System : Loop... INIT.")
- run()
- buttons()
- debugMsg(" ")
- end
- fs.delete("Debug")
- term.restore()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement