Guest User

Here

a guest
Apr 19th, 2013
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.83 KB | None | 0 0
  1. --Made for version 3.0.3
  2. --ToDo: Make minimal screen for smaller monitors.
  3. tArgs = {...}
  4. sides = {front = "front", back = "back", left = "left", right = "right", top = "top", bottom = "bottom"}
  5. local screenX, screenY = term.getSize()
  6. assert(screenY > 8 and screenX > 35, "Screen too small")
  7. local interval = 1
  8. if not term.isColor() then
  9. term.setTextColor = function() return false end
  10. term.setBackgroundColor = function() return false end; end
  11. local function output(text,xPos,yPos,doClear)
  12. term.setCursorPos(xPos,yPos); if doClear then term.clearLine() end
  13. io.write(text); return #text+2 end
  14. local errorMessage = "Improper Side"
  15. term.clear(); term.setCursorPos(1,1)
  16. if tArgs[1] then
  17. modemSide = assert(sides[tArgs[1]], errorMessage )
  18. else
  19. print("Modem Side?")
  20. modemSide = assert(sides[read()], errorMessage)
  21. end
  22. modem = peripheral.wrap(modemSide)
  23. local sender
  24. if tonumber(tArgs[2]) then
  25. sender = tonumber(tArgs[2])
  26. else
  27. print("Receiving channel? (Check the turtle)")
  28. sender = assert(tonumber(io.read()))
  29. end
  30. assert(sender == math.floor(sender), "Channel cannot be a decimal")
  31. assert(sender < 65535 and sender > 0, "Channel cannot be below 1 or above 65535")
  32. modem.open(sender)
  33.  
  34. local relayMessage = "Confirm"
  35. local origRelayMessage = relayMessage
  36. local replyChannel, startDist
  37. term.clear()
  38. term.setCursorPos(1,1)
  39. print("Welcome to the Quarry Receiver Program!")
  40. print("Waiting for a turtle to send initial message")
  41. repeat
  42. local event, modemSide, sendChannel, repChannel, message, distance = os.pullEvent("modem_message")
  43. startDist = distance
  44. replyChannel = repChannel
  45. until sendChannel == sender and textutils.unserialize(message)
  46. local function sendMsg(message)
  47. modem.transmit(replyChannel, sender, message)
  48. end
  49. sendMsg(relayMessage)
  50. print("Now paired with turtle on Channel ",sender,". Sending back on Channel ",replyChannel)
  51. sleep(0.5)
  52.  
  53. local function pullChar()
  54. while relayMessage ~= "stop" do
  55. sleep(0.5)
  56. output("Type Command\n",1,screenY-1,true)
  57. relayMessage = string.lower(io.read())
  58. end
  59. end
  60.  
  61. local function main()
  62. local message
  63. local timeWaited = 0 --For seconds since last, may fix later
  64. term.clear()
  65. while message ~= "stop" do
  66. repeat
  67. local id = os.startTimer(interval)
  68. local event, idCheck, sendChannel, _, locMessage, distance = os.pullEvent()
  69. message = locMessage
  70. if (event == "timer" and idCheck == id) then timeWaited = timeWaited + interval else timeWaited = 0 end
  71. until (event == "modem_message" and idCheck == modemSide and sendChannel == sender) or (event == "timer" and idCheck == id)
  72. sendMsg(relayMessage)
  73. message = textutils.unserialize(message) or "stop"
  74. relayMessage = origRelayMessage
  75. if message ~= "stop" then
  76. output("Percent Complete: "..message.percent,1,1)
  77. output("Dimensions: ",1,2,true)
  78. output("Length X-"..message.x,1,3); output("Rows-"..message.z,18,3); output("Layers-"..message.y,30,3)
  79. output("Position in Row: "..message.xPos,1,4); output("Row this Layer: "..message.zPos,1,5); output("On Layer: "..math.ceil(message.yPos/3),1,6)
  80. local condition = (message.z == message.zPos) and (message.x == message.xPos)
  81. if  condition then output("Going to next layer",1,7) elseif message.isInPath then output("",1,7,true) end
  82. if message.y == math.ceil(message.yPos/3) and condition then output("Going back to start",1,8) end
  83. if message.xPos == 0 then output("Calculating materials",1,9) end
  84. output("Time since last message: "..timeWaited.." Seconds",1,7,true) --Broken
  85. output("Type Command\n",1,screenY-1)
  86. end
  87. end
  88. end
  89.  
  90. local order = parallel.waitForAny(main, pullChar)
  91.  
  92. modem.close(sender)
  93. term.setCursorPos(1,1)
  94. term.clear()
  95. local doneType
  96. if order == 1 then
  97. doneType = "Turtle Finished"
  98. messageT = textutils.unserialize(({os.pullEvent("modem_message")})[5])
  99. for i=1, #messageT do
  100. for a, b in pairs(messageT[i]) do
  101. print(a,b) end
  102. end
  103. else doneType = "Program Aborted" end
  104. error(doneType,0)
Advertisement
Add Comment
Please, Sign In to add comment