Posted on November 6, 2015, 12:08 am By agathezol
--[[ welcome screen for the factory ]]-- -- Locals local running = true local mon = "" local buttons = {} local window = {} local outBundleSide = "left" function initMon(side) mon = peripheral.wrap(side) mon.setTextScale(1) mon.setBackgroundColor(colors.black) mon.setTextColor(colors.white) window["o"] = {} window["o"]["x"] = 1 window["o"]["y"] = 1 window["w"], window["h"] = mon.getSize() end function updateButtonCalc( button ) button["tlen"] = string.len( button["text"] ) button["height"] = button["pady"] * 2 + 1 button["width"] = button["padx"] * 2 + button["tlen"] button["xend"] = button["origx"] + button["width"] - 1 button["yend"] = button["origy"] + button["height"] - 1 button["tX"] = button["origx"] + (math.floor( button["width"] / 2 ) - math.floor( button["tlen"] / 2 )) - 1 + button["padx"] button["tY"] = button["origy"] + math.floor( button["height"] / 2 ) end function addButton( name, text, func, state, origx, origy, padx, pady, fore, bact, binact ) buttons[name] = {} buttons[name]["text"] = text buttons[name]["state"] = state buttons[name]["defstate"] = state buttons[name]["func"] = func buttons[name]["origx"] = origx buttons[name]["origy"] = origy buttons[name]["padx"] = padx buttons[name]["pady"] = pady buttons[name]["foreground"] = fore buttons[name]["bact"] = bact buttons[name]["binact"] = binact updateButtonCalc(buttons[name]) end function addSimpleButton( name, text, func, origx, origy ) addButton( name, text, func, false, origx, origy, 1, 1, colors.white, colors.lime, colors.red ) end function drawButton( bData ) local tLen = bData["tlen"] local h = bData["height"] local w = bData["width"] local xend = bData["xend"] local yend = bData["yend"] local tY = bData["tY"] local tX = bData["tX"] if bData["state"] == true then mon.setBackgroundColor( bData["bact"] ) else mon.setBackgroundColor( bData["binact"] ) end mon.setTextColor( bData["foreground"] ) for i = bData["origy"], yend do mon.setCursorPos( bData["origx"], i ) if i == tY then for j = bData["origx"], (xend - tLen + 1) do if j == tX then mon.write(bData["text"]) else mon.write(" ") end end else for i = bData["origx"], xend do mon.write(" ") end end end mon.setBackgroundColor( colors.black ) end function drawButtons() for name,data in pairs(buttons) do drawButton( data ) end end function heading( text ) w, h = mon.getSize() mon.setCursorPos( (w-string.len(text))/2+1, 1 ) mon.write( text ) end function justifiedPair( row, indent, k, v ) w = window["w"] h = window["h"] plen = w - (indent * 2) local dots = plen - (string.len(k) + string.len(v)) str = k if dots < 1 then dots = plen - string.len(k) for i=0, dots do str = str.."." end mon.setCursorPos( indent, row ) mon.write(str) dots = plen - string.len(v) str = "" for i=0, dots do str = str.."." end str = str..v mon.setCursorPos( indent, row+1 ) mon.write(str) else for i = 0, dots do str = str.."." end str = str..v mon.setCursorPos( indent, row ) mon.write(str) end end function drawScreen( ) mon.clear() heading("Welcome to AGA Industries") drawButtons() justifiedPair( 3, 1, "Floor 1", "Sorting Facility" ) justifiedPair( 5, 1, "Floor 2", "Fabriciation" ) justifiedPair( 7, 1, "Floor 3", "Power Plant" ) justifiedPair( 9, 1, "Floor 4", "Liquid Processing" ) justifiedPair(11, 1, "Floor 5", "empty" ) justifiedPair(13, 1, "Floor 6", "empty" ) end function toggleButton(name) buttons[name]["state"] = not buttons[name]["state"] end --[[ for alignment, horiz and vert can have 3 states: 0 no change 1 left/top 2 right/bottom 3 center ]]-- function alignButtonInBox( button, box, horiz, vert ) local x = box["o"]["x"] local y = box["o"]["y"] if horiz > 0 then if horiz == 1 then button["origx"] = x elseif horiz == 2 then x = (x + box["w"] - 1) - button["width"] button["origx"] = x elseif horiz == 3 then x = x + (box["w"] / 2) button["origx"] = x end end if vert > 0 then if vert == 1 then button["origy"] = y elseif vert == 2 then y = (y + box["h"] - 1) - button["height"] button["origy"] = y elseif vert == 3 then y = y + (box["h"] / 2) button["origy"] = y end end updateButtonCalc( button ) end function powerDown() print("shutting down...") running = false end function checkButtonHit( x, y ) for name, data in pairs(buttons) do if y >= data["origy"] and y <= data["yend"] then if x >= data["origx"] and x <= data["xend"] then data["func"](name) end end end end function shutdownButtons() for name, data in pairs(buttons) do if data["state"] ~= data["defstate"] then data["func"](name) end end end -- current mon is 50x19 initMon("back") while running == true do drawScreen() local e, side, x, y = os.pullEvent("monitor_touch") checkButtonHit( x, y ) sleep( .1 ) end shutdownButtons() mon.clear()
Categories: Minecraft