Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- floor_pad.lua
- local enderModem = peripheral.wrap("bottom")
- local screen = peripheral.wrap("top")
- local floor = 3
- local isDocked = false
- local currentFloorDocked = -1
- local floors = {0, 1, 2, 3}
- screen.setTextScale(0.5)
- function requestElevatorStatus(floor)
- enderModem.open(10 + floor)
- enderModem.transmit(10 + floor, 10 + floor, "is_elevator_docked")
- local event, modemSide, receivedChannel, replyChannel, message, distance = os.pullEvent("modem_message")
- enderModem.close(10)
- if receivedChannel == 10 + floor and type(message) == "boolean" then
- return message
- else
- return false
- end
- end
- function updateStatus()
- while true do
- local localFloorDocked = -1
- for i = 0, 2 do
- local docked = requestElevatorStatus(i)
- if docked then
- localFloorDocked = i
- break
- end
- end
- isDocked = requestElevatorStatus(floor)
- currentFloorDocked = localFloorDocked
- sleep(1)
- end
- end
- function drawButton(background, textcolor, text, y)
- local screenWidth = screen.getSize()
- screen.setBackgroundColor(background)
- screen.setCursorPos(2, y)
- screen.write(string.rep(" ", screenWidth - 2))
- screen.setTextColor(textcolor)
- local textX = math.floor((screenWidth - #text) / 2) + 1
- screen.setCursorPos(textX, y)
- screen.write(text)
- screen.setBackgroundColor(colors.black)
- screen.setTextColor(colors.white)
- end
- function drawDisplay()
- while true do
- sleep(1)
- screen.clear()
- if not isDocked then
- screen.setTextScale(1)
- if currentFloorDocked == -1 then
- screen.setCursorPos(math.floor(screen.getSize() / 2) - 5, math.floor(screen.getSize() / 2))
- screen.write("In transit...")
- else
- screen.setCursorPos(math.floor(screen.getSize() / 2), math.floor(screen.getSize() / 2))
- screen.write("Call")
- end
- else
- screen.setTextScale(0.5)
- screen.setCursorPos(1,1)
- screen.clear()
- screen.setCursorPos(1,1)
- screen.setBackgroundColor(colors.green)
- screen.clearLine()
- screen.setCursorPos(math.floor(screen.getSize() / 2)-2, 1)
- screen.setTextColor(colors.white)
- screen.write("Floors")
- screen.setTextColor(colors.white)
- screen.setBackgroundColor(colors.black)
- for i, f in ipairs(floors) do
- drawButton(colors.white, colors.black, (i-1) .. "", 3 + f * 2)
- end
- end
- end
- end
- function listenForClicks()
- while true do
- local event, side, x, y = os.pullEvent("monitor_touch")
- if x == 1 and y == 1 then
- os.reboot()
- end
- if not isDocked then
- enderModem.transmit(10 + floor, 10 + floor, "elevator_request")
- os.sleep(0.5)
- os.reboot()
- else
- y = y - 3
- y = y / 2
- enderModem.transmit(10 + y, 10 + y, "elevator_request")
- end
- end
- end
- parallel.waitForAll(updateStatus, drawDisplay, listenForClicks)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement