Advertisement
pedrosgali

makeBlueprint

Mar 17th, 2014
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 12.88 KB | None | 0 0
  1. os.loadAPI("API/draw")
  2.  
  3. args = {...}
  4. filename = args[1]
  5.  
  6. screenStartX = 8
  7. screenStartY = 3
  8. layer = 1
  9. drawn = false
  10. running = true
  11. down = false
  12. item = "no item"
  13.  
  14. draw.clear()
  15. print("'"..filename.."' open for editing.")
  16.  
  17. function debugMsg(text, fileLog)
  18.     timeNow = os.time()
  19.     timeStamp = textutils.formatTime(timeNow, true)
  20.     if #timeStamp < 5 then
  21.         timeStamp = "0"..timeStamp
  22.     end
  23.     if fs.exists("Debug") then
  24.         data = fs.open("Debug", "a")
  25.         data.writeLine(timeStamp..": "..text)
  26.         data.close()
  27.     else
  28.         data = fs.open("Debug", "w")
  29.         data.writeLine(timeStamp..": "..text)
  30.         data.close()
  31.     end
  32.     if debugBool then
  33.         sleep(.2)
  34.     end
  35. end
  36.  
  37. function newBlueprint()
  38.     bpTab = {}
  39. end
  40.  
  41. function blankBlueprint(level, sizeX, sizeZ)
  42.     bpTab[level] = {}
  43.     scrX = screenStartX
  44.     scrY = screenStartY
  45.     for j = 1, sizeX do
  46.         bpTab[level][j] = {}
  47.         for k = 1, sizeZ do
  48.             bpTab[level][j][k] = {}
  49.             bpTab[level][j][k][1] = "air"
  50.             bpTab[level][j][k][2] = draw.blue
  51.             bpTab[level][j][k][3] = scrX
  52.             bpTab[level][j][k][4] = scrY
  53.             if k ~= sizeX then
  54.                 scrX = scrX + 3
  55.             else
  56.                 scrX = 8
  57.                 scrY = scrY + 2
  58.             end
  59.         end
  60.     end
  61.     debugMsg("Layer "..level.." added.")
  62.     saveBlueprint()
  63. end
  64.  
  65. function saveBlueprint()
  66.     data = fs.open("Blueprints/"..filename, "w")
  67.     data.writeLine(textutils.serialize(bpTab))
  68.     data.close()
  69. end
  70.  
  71. function buttonSetup()
  72.     scrTab = nil
  73.     x, y = mon.getSize()
  74.     scrTab = {}
  75.     scrTab[1] = {}
  76.     scrTab[1][1] = "Up Level"
  77.     scrTab[1][2] = draw.lime
  78.     scrTab[1][3] = x - 15
  79.     scrTab[1][4] = 1
  80.     scrTab[2] = {}
  81.     scrTab[2][1] = "Down Level"
  82.     scrTab[2][2] = draw.lime
  83.     scrTab[2][3] = x - 15
  84.     scrTab[2][4] = 4
  85.     scrTab[3] = {}
  86.     scrTab[3][1] = "Save"
  87.     scrTab[3][2] = draw.blue
  88.     scrTab[3][3] = x - 15
  89.     scrTab[3][4] = 7
  90.     scrTab[4] = {}
  91.     scrTab[4][1] = "Tilesets"
  92.     scrTab[4][2] = draw.lime
  93.     scrTab[4][3] = x - 15
  94.     scrTab[4][4] = 10
  95.     debugMsg("System: Buttons cleared.")
  96.     crafting = false
  97.     --drawn = false
  98. end
  99.  
  100. function addButton(label, itemName, colour) --next version add block label for grid squares eg: "OP" = "Oak Planks" etc
  101.     newMax = #scrTab + 1
  102.     scrTab[newMax] = {}
  103.     scrTab[newMax][1] = label
  104.     scrTab[newMax][2] = colour
  105.     scrTab[newMax][3] = x - 15
  106.     scrTab[newMax][4] = scrTab[newMax - 1][4] + 3
  107.     scrTab[newMax][5] = itemName
  108.     debugMsg(label.." button added.")
  109. end
  110.  
  111. function buttons()
  112.     for i = 1, y do
  113.         draw.writeText(x - 15, i, draw.black, draw.black, "               ")
  114.     end
  115.     for i = 1, #scrTab do
  116.         draw.writeText(scrTab[i][3], scrTab[i][4], draw.black, scrTab[i][2], "+-------------+")
  117.         draw.writeText(scrTab[i][3], scrTab[i][4] + 1, draw.black, scrTab[i][2], ":             :")
  118.         draw.writeText(scrTab[i][3], scrTab[i][4] + 2, draw.black, scrTab[i][2], "+-------------+")
  119.         draw.box(scrTab[i][3] + 1, scrTab[i][4] + 1, x - 2, scrTab[i][4] + 1, scrTab[i][2])
  120.         draw.centerText(scrTab[i][3] + 1, x - 2, scrTab[i][4] + 1, scrTab[i][2], draw.black, scrTab[i][1])
  121.     end
  122.     debugMsg("System: Buttons drawn.")
  123. end
  124.  
  125. function downMenu()
  126.     if layer > 1 then
  127.         addButton("Show Last", "none", draw.white)
  128.         down = true
  129.     end
  130. end
  131.  
  132. function tilesetMenu()
  133.     addButton("Blocks", "none", draw.grey)
  134.     addButton("Woods", "none", draw.brown)
  135.     addButton("Craftable", "none", draw.orange)
  136.     addButton("Plants", "none", draw.blue)
  137.     addButton("Half Slabs", "none", draw.white)
  138. end
  139.  
  140. function blockMenu()
  141.     addButton("Air", "air", draw.blue)
  142.     addButton("Sand", "Sand", draw.yellow)
  143.     addButton("Sandstone", "Sandstone", draw.yellow)
  144.     addButton("Cobble", "Cobblestone", draw.grey)
  145.     addButton("Stone", "Stone", draw.lightGrey)
  146.     addButton("St Brick", "Stone Bricks", draw.lightGrey)
  147.     addButton("Glass", "Glass", draw.lightBlue)
  148.     addButton("Obsidian", "Obsidian", draw.purple)
  149. end
  150.  
  151. function woodMenu()
  152.     addButton("Oak", "Oak Wood", draw.brown)
  153.     addButton("Spruce", "Spruce Wood", draw.brown)
  154.     addButton("Birch", "Birch Wood", draw.white)
  155.     addButton("Oak Planks", "Oak Wood Planks", draw.brown)
  156.     addButton("Spruce Planks", "Spruce Wood Planks", draw.brown)
  157.     addButton("Birch Planks", "Birch Wood Planks", draw.brown)
  158.     addButton("Fence", "Fence", draw.brown)
  159. end
  160.  
  161. function craftMenu()
  162.     addButton("Chest", "Chest", draw.yellow)
  163.     addButton("Iron Chest", "Iron Chest", draw.lightGrey)
  164.     addButton("Furnace", "Furnace", draw.grey)
  165.     addButton("Workbench", "Crafting Table", draw.orange)
  166.     addButton("Panes", "Glass Pane", draw.lightBlue)
  167.     addButton("Oak Stairs", "Oak Wood Stairs", draw.brown)
  168. end
  169.  
  170. function plantMenu()
  171.     addButton("Dirt", "Dirt", draw.brown)
  172.     addButton("Oak", "Oak Sapling", draw.lime)
  173.     addButton("Spruce", "Spruce Sapling", draw.green)
  174.     addButton("Birch", "Birch Sapling", draw.white)
  175.     addButton("Wheat", "Seeds", draw.lime)
  176.     addButton("Sugar", "Sugar Canes", draw.blue)
  177. end
  178.  
  179. function HSMenu()
  180.     addButton("Oak", "Oak Wood Slab", draw.brown)
  181.     addButton("Spruce", "Spruce Wood Slab", draw.brown)
  182.     addButton("Birch", "Birch Wood Slab", draw.white)
  183.     addButton("Cobble", "Cobblestone Slab", draw.grey)
  184.     addButton("Stone", "Stone Slab", draw.lightGrey)
  185.     addButton("St Brick", "Stone Bricks Slab", draw.lightGrey)
  186. end
  187.  
  188. function gridSquare(gsX, gsY, colour, text)
  189.     draw.writeText(gsX, gsY, draw.black, draw.lightBlue, "+--+")
  190.     draw.writeText(gsX, gsY + 1, draw.black, draw.lightBlue, ":  :")
  191.     draw.writeText(gsX, gsY + 2, draw.black, draw.lightBlue, "+--+")
  192.     text = string.sub(text, 1, 2)
  193.     if text ~= "ai" then
  194.         draw.writeText(gsX + 1, gsY + 1, colour, draw.black, text)
  195.     else
  196.         draw.box(gsX + 1, gsY + 1, gsX + 2, gsY + 1, colour)
  197.     end
  198. end
  199.  
  200. function drawScreen(level, overLay)
  201.     term.redirect(mon)
  202.     x, y = mon.getSize()
  203.     if overlay ~= nil then
  204.         draw.clear()
  205.         drawn = false
  206.     end
  207.     buttons()
  208.     maxX = (x - 15)
  209.     for i = 1, maxX do
  210.         draw.writeText(i, 2, draw.black, draw.black, " ")
  211.     end
  212.     draw.centerText(1, maxX, 2, draw.black, draw.lime, "Level: "..layer.."/"..#bpTab..", "..item.." selected.")
  213.     for i = 1, #bpTab[level] do
  214.         for j = 1, #bpTab[level][i] do
  215.             if bpTab[level][i][j][5] ~= nil then
  216.                 label = string.sub(bpTab[level][i][j][1], 1, 1)
  217.                 if bpTab[level][i][j][5] == 0 then
  218.                     label = label..">"
  219.                 elseif bpTab[level][i][j][5] == 1 then
  220.                     label = label.."v"
  221.                 elseif bpTab[level][i][j][5] == 2 then
  222.                     label = label.."<"
  223.                 elseif bpTab[level][i][j][5] == 3 then
  224.                     label = label.."^"
  225.                 end
  226.             else
  227.                 label = string.sub(bpTab[level][i][j][1], 1, 2)
  228.             end
  229.             if overLay then
  230.                 if label ~= "ai" then
  231.                     gridSquare(bpTab[level][i][j][3], bpTab[level][i][j][4], bpTab[level][i][j][2], label)
  232.                 end
  233.             else
  234.                 gridSquare(bpTab[level][i][j][3], bpTab[level][i][j][4], bpTab[level][i][j][2], label)
  235.             end
  236.         end
  237.     end
  238. end
  239.  
  240. function run()
  241.     event, p1, p2, p3, p4, p5 = os.pullEvent()
  242.     if event == "monitor_touch" then --MONITOR CLICKS
  243.         debugMsg("System: "..event.." LOGGED.")
  244.         for i = 1, #scrTab do --ALL SIDE BUTTON CHECKING DONE HERE
  245.             --debugMsg(i)
  246.             if p2 >= scrTab[i][3] and p2 <= x - 2 then
  247.                 if p3 == scrTab[i][4] + 1 then
  248.                     debugMsg("System : Button clicked... "..scrTab[i][1])
  249.                     if scrTab[i][1] == "Up Level" then
  250.                         buttonSetup()
  251.                         if layer <= #bpTab then
  252.                             layer = layer + 1
  253.                             if bpTab[layer] == nil then
  254.                                 blankBlueprint(layer, 16, 16)
  255.                             end
  256.                             drawScreen(layer)
  257.                             return
  258.                         end
  259.                     elseif scrTab[i][1] == "Down Level" then
  260.                         buttonSetup()
  261.                         if layer > 1 then
  262.                             if down then
  263.                                 buttonSetup()
  264.                                 layer = layer - 1
  265.                                 drawScreen(layer)
  266.                                 down = false
  267.                                 drawn = false
  268.                                 return
  269.                             else
  270.                                 buttonSetup()
  271.                                 downMenu()
  272.                                 drawScreen(layer)
  273.                                 return
  274.                             end
  275.                         end
  276.                     elseif scrTab[i][1] == "Show Last" then
  277.                         buttonSetup()
  278.                         down = false
  279.                         --drawn = false
  280.                         drawScreen(layer - 1)
  281.                         drawScreen(layer, "o")
  282.                         return
  283.                     elseif scrTab[i][1] == "Save" then
  284.                         buttonSetup()
  285.                         drawScreen(layer)
  286.                         saveBlueprint()
  287.                         return
  288.                     elseif scrTab[i][1] == "Tilesets" then
  289.                         buttonSetup()
  290.                         drawScreen(layer)
  291.                         tilesetMenu()
  292.                         facing = false
  293.                         return
  294.                     elseif scrTab[i][1] == "Blocks" then
  295.                         buttonSetup()
  296.                         drawScreen(layer)
  297.                         blockMenu()
  298.                         return
  299.                     elseif scrTab[i][1] == "Woods" then
  300.                         buttonSetup()
  301.                         drawScreen(layer)
  302.                         woodMenu()
  303.                         return
  304.                     elseif scrTab[i][1] == "Craftable" then
  305.                         buttonSetup()
  306.                         drawScreen(layer)
  307.                         craftMenu()
  308.                         crafting = true
  309.                         return
  310.                     elseif scrTab[i][1] == "Plants" then
  311.                         buttonSetup()
  312.                         drawScreen(layer)
  313.                         plantMenu()
  314.                         return
  315.                     elseif scrTab[i][1] == "Half Slabs" then
  316.                         buttonSetup()
  317.                         drawScreen(layer)
  318.                         HSMenu()
  319.                         return
  320.                     else
  321.                         item = scrTab[i][5]
  322.                         itemCol = scrTab[i][2]
  323.                         drawScreen(layer)
  324.                         return
  325.                     end
  326.                 end
  327.             end
  328.         end
  329.         for i = 1, #bpTab[layer] do --CHECKING FOR GRID CLICKS DONE HERE
  330.             for j = 1, #bpTab[layer][i] do
  331.                 if p2 >= (tonumber(bpTab[layer][i][j][3]) + 1) and p2 <= (tonumber(bpTab[layer][i][j][3]) + 3) then
  332.                     if p3 == (tonumber(bpTab[layer][i][j][4]) + 1) then
  333.                         if item ~= "no item" then
  334.                             bpTab[layer][i][j][1] = item
  335.                             bpTab[layer][i][j][2] = itemCol
  336.                             if crafting then
  337.                                 if bpTab[layer][i][j][5] == nil then
  338.                                     bpTab[layer][i][j][5] = 0
  339.                                 else
  340.                                     if bpTab[layer][i][j][5] >= 3 then
  341.                                         bpTab[layer][i][j][5] = 0
  342.                                     else
  343.                                         bpTab[layer][i][j][5] = bpTab[layer][i][j][5] + 1
  344.                                     end
  345.                                 end
  346.                             else
  347.                                 bpTab[layer][i][j][5] = nil
  348.                             end
  349.                             drawScreen(layer)
  350.                             return
  351.                         end
  352.                     end
  353.                 end
  354.             end
  355.         end
  356.     elseif event == "key" then
  357.         if keys.getName(p1) == "q" then
  358.             running = false
  359.         end
  360.     end
  361. end
  362.  
  363. --PROGRAM START
  364.  
  365. if fs.exists("Blueprints/"..filename) then
  366.     data = fs.open("Blueprints/"..filename, "r")
  367.     bpTab = textutils.unserialize(data.readLine())
  368.     data.close()
  369. else
  370.     newBlueprint()
  371.     blankBlueprint(layer, 16, 16)
  372. end
  373.  
  374. perData = peripheral.getNames()
  375. for i = 1, #perData do
  376.     if peripheral.getType(perData[i]) == "modem" then
  377.         m = peripheral.wrap(perData[i])
  378.         if m.isWireless() then
  379.             wifiSide = perData[i]
  380.             rednet.open(wifiSide)
  381.         end
  382.     elseif peripheral.getType(perData[i]) == "monitor" then
  383.         mon = peripheral.wrap(perData[i])
  384.         mon.setTextScale(.5)
  385.         x, y = mon.getSize()
  386.     end
  387. end
  388.  
  389. buttonSetup()
  390. drawScreen(layer)
  391. while running do
  392.     debugMsg("System : Loop... INIT.")
  393.     run()
  394.     buttons()
  395.     debugMsg(" ")
  396. end
  397. fs.delete("Debug")
  398. term.restore()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement