Advertisement
Snowdingerr

CC:Tweaked Create Elevator screen

Feb 21st, 2025
458
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.25 KB | Source Code | 0 0
  1. -- floor_pad.lua
  2.  
  3. local enderModem = peripheral.wrap("bottom")
  4. local screen = peripheral.wrap("top")
  5. local floor = 3
  6. local isDocked = false
  7. local currentFloorDocked = -1
  8. local floors = {0, 1, 2, 3}
  9.  
  10. screen.setTextScale(0.5)
  11.  
  12. function requestElevatorStatus(floor)
  13.     enderModem.open(10 + floor)
  14.     enderModem.transmit(10 + floor, 10 + floor, "is_elevator_docked")
  15.     local event, modemSide, receivedChannel, replyChannel, message, distance = os.pullEvent("modem_message")
  16.     enderModem.close(10)
  17.     if receivedChannel == 10 + floor and type(message) == "boolean" then
  18.         return message
  19.     else
  20.         return false
  21.     end
  22. end
  23.  
  24. function updateStatus()
  25.     while true do
  26.         local localFloorDocked = -1
  27.  
  28.         for i = 0, 2 do
  29.             local docked = requestElevatorStatus(i)
  30.             if docked then
  31.                 localFloorDocked = i
  32.                 break
  33.             end
  34.         end
  35.  
  36.         isDocked = requestElevatorStatus(floor)
  37.         currentFloorDocked = localFloorDocked
  38.  
  39.         sleep(1)
  40.     end
  41. end
  42.  
  43. function drawButton(background, textcolor, text, y)
  44.     local screenWidth = screen.getSize()
  45.     screen.setBackgroundColor(background)
  46.     screen.setCursorPos(2, y)
  47.     screen.write(string.rep(" ", screenWidth - 2))
  48.  
  49.     screen.setTextColor(textcolor)
  50.     local textX = math.floor((screenWidth - #text) / 2) + 1
  51.     screen.setCursorPos(textX, y)
  52.     screen.write(text)
  53.     screen.setBackgroundColor(colors.black)
  54.     screen.setTextColor(colors.white)
  55. end
  56.  
  57.  
  58. function drawDisplay()
  59.     while true do
  60.         sleep(1)
  61.         screen.clear()
  62.  
  63.         if not isDocked then
  64.             screen.setTextScale(1)
  65.             if currentFloorDocked == -1 then
  66.                 screen.setCursorPos(math.floor(screen.getSize() / 2) - 5, math.floor(screen.getSize() / 2))
  67.                 screen.write("In transit...")
  68.             else
  69.                 screen.setCursorPos(math.floor(screen.getSize() / 2), math.floor(screen.getSize() / 2))
  70.                 screen.write("Call")
  71.             end
  72.         else
  73.             screen.setTextScale(0.5)
  74.             screen.setCursorPos(1,1)
  75.             screen.clear()
  76.             screen.setCursorPos(1,1)
  77.             screen.setBackgroundColor(colors.green)
  78.             screen.clearLine()
  79.             screen.setCursorPos(math.floor(screen.getSize() / 2)-2, 1)
  80.             screen.setTextColor(colors.white)
  81.             screen.write("Floors")
  82.  
  83.            
  84.             screen.setTextColor(colors.white)
  85.             screen.setBackgroundColor(colors.black)
  86.             for i, f in ipairs(floors) do
  87.                 drawButton(colors.white, colors.black, (i-1) .. "", 3 + f * 2)
  88.             end
  89.         end
  90.     end
  91. end
  92.  
  93. function listenForClicks()
  94.     while true do
  95.         local event, side, x, y = os.pullEvent("monitor_touch")
  96.  
  97.         if x == 1 and y == 1 then
  98.             os.reboot()
  99.         end
  100.  
  101.         if not isDocked then
  102.             enderModem.transmit(10 + floor, 10 + floor, "elevator_request")
  103.             os.sleep(0.5)
  104.             os.reboot()
  105.         else
  106.             y = y - 3
  107.             y = y / 2
  108.             enderModem.transmit(10 + y, 10 + y, "elevator_request")
  109.         end
  110.     end
  111. end
  112.  
  113. parallel.waitForAll(updateStatus, drawDisplay, listenForClicks)
  114.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement