Advertisement
DustinRosebery

RCmaster_1.1.6

Oct 14th, 2016
465
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ------------------------------------------------------------
  2. -- Name: RCMaster
  3. -- version: 1.1.6
  4. -- Author: Dustin Rosebery
  5. -- Description: Program that provides touchscreen turtle
  6. --        operation including movement, inventory,
  7. --        placing, and mining.
  8. -- setup: 4x4 advanced monitors with an advanced computer
  9. --      on the bottom of the monitors with a wireless
  10. --      modem on the right side. Also requires an
  11. --      advanced turtle with RCreceive installed
  12. --      and a wireless modem on the left side.
  13. ------------------------------------------------------------
  14.  
  15. m = peripheral.wrap("top")
  16. modem = peripheral.wrap("right")
  17. m.clear()
  18. buttons = {}
  19.  
  20. --------------------------------------------------
  21. -- button creation
  22. --------------------------------------------------
  23.  
  24. -- Directional button background color
  25. dirColor = colors.red
  26. -- Inventory button background color
  27. invBackgroundColor = colors.white
  28. -- Inventory button text color
  29. invTextColor = colors.black
  30. ---------------------------------
  31. --Directional buttons
  32. ---------------------------------
  33.  
  34. -- fbut (forward)
  35. fxMin = 23
  36. fxSize = 7
  37. fxMax = fxMin + fxSize - 1
  38.  
  39. fyMin = 6
  40. fySize = 4
  41. fyMax = fyMin + fySize - 1
  42.  
  43. fbut = window.create(m,fxMin,fyMin,fxSize,fySize)
  44. fbut.setBackgroundColor(dirColor)
  45. fbut.restoreCursor()
  46. fbut.redraw()
  47. fbut.setCursorPos(1,2)
  48. fbut.write("forward")
  49.  
  50. -- bbut (backwards)
  51. bxMin = 23
  52. bxSize = 7
  53. bxMax = bxMin + bxSize - 1
  54.  
  55. byMin = 12
  56. bySize = 4
  57. byMax = byMin + bySize - 1
  58.  
  59. bbut = window.create(m,bxMin,byMin,bxSize,bySize)
  60. bbut.setBackgroundColor(dirColor)
  61. bbut.redraw()
  62. bbut.restoreCursor()
  63. bbut.setCursorPos(1,2)
  64. bbut.write(" back  ")
  65. bbut.redraw()
  66.  
  67. -- lbut (left)
  68. lxMin = 19
  69. lxSize = 7
  70. lxMax = lxMin + lxSize - 1
  71.  
  72. lyMin = 9
  73. lySize = 4
  74. lyMax = lyMin + lySize - 1
  75.  
  76. lbut = window.create(m,lxMin,lyMin,lxSize,lySize)
  77. lbut.setBackgroundColor(dirColor)
  78. lbut.redraw()
  79. lbut.setCursorPos(1,2)
  80. lbut.write(" left  ")
  81.  
  82. -- rbut (right)
  83. rxMin = 27
  84. rxSize = 7
  85. rxMax = rxMin + rxSize - 1
  86.  
  87. ryMin = 9
  88. rySize = 4
  89. ryMax = ryMin + rySize - 1
  90.  
  91. rbut = window.create(m,rxMin,ryMin,rxSize,rySize)
  92. rbut.setBackgroundColor(dirColor)
  93. rbut.redraw()
  94. rbut.setCursorPos(1,2)
  95. rbut.write(" right ")
  96.  
  97. -- ubut (up)
  98. uxMin = 36
  99. uxSize = 2
  100. uxMax = uxMin + uxSize - 1
  101.  
  102. uyMin = 7
  103. uySize = 3
  104. uyMax = uyMin + uySize - 1
  105.  
  106. ubut = window.create(m,uxMin,uyMin,uxSize,uySize)
  107. ubut.setBackgroundColor(dirColor)
  108. ubut.restoreCursor()
  109. for i = 1, uySize do
  110.   ubut.setCursorPos(1,i)
  111.   ubut.write("  ")
  112. end
  113. m.setCursorPos(36,6)
  114. m.write("up")
  115.  
  116. -- dbut (down)
  117. dxMin = 36
  118. dxSize = 2
  119. dxMax = dxMin + dxSize - 1
  120.  
  121. dyMin = 11
  122. dySize = 3
  123. dyMax = dyMin + dySize - 1
  124.  
  125. dbut = window.create(m,dxMin,dyMin,dxSize,dySize)
  126. dbut.setBackgroundColor(dirColor)
  127. dbut.restoreCursor()
  128. for i = 1, dySize do
  129.   dbut.setCursorPos(1,i)
  130.   dbut.write("  ")
  131. end
  132. m.setCursorPos(35,14)
  133. m.write("down")
  134.  
  135. ----------------------------
  136. --Inventory Buttons
  137. ----------------------------
  138.  
  139. invButtons = {}
  140.  
  141. ixMin = 1         -- x_min
  142. ixSize = 14         -- x_width
  143. ixMax = ixMin + ixSize - 1  -- x_max
  144. iySize = 1          -- y_height
  145.  
  146. -- sets initial inventory button parameters and inserts into global list
  147. function initInventoryButton(button)
  148.   button.setBackgroundColor(invBackgroundColor)
  149.   button.restoreCursor()
  150.   button.setTextColor(invTextColor)
  151.   button.setCursorPos(1,1)
  152.   for i = 1, ixSize do
  153.     button.write(" ")
  154.   end
  155.   table.insert(invButtons, button)
  156. end
  157.  
  158. -- invLabel
  159. invLabelyMin = 1
  160. invLabel = window.create(m,ixMin,invLabelyMin,ixSize,iySize)
  161. invLabel.setTextColor(colors.white)
  162. invLabel.restoreCursor()
  163. invLabel.write("Inventory:")
  164.  
  165. -- i1
  166. i1yMin = 2
  167. i1 = window.create(m,ixMin,i1yMin,ixSize,iySize)
  168. initInventoryButton(i1)
  169. -- i2
  170. i2yMin = 3
  171. i2 = window.create(m,ixMin,i2yMin,ixSize,iySize)
  172. initInventoryButton(i2)
  173. -- i3
  174. i3yMin = 4
  175. i3 = window.create(m,ixMin,i3yMin,ixSize,iySize)
  176. initInventoryButton(i3)
  177. -- i4
  178. i4yMin = 5
  179. i4 = window.create(m,ixMin,i4yMin,ixSize,iySize)
  180. initInventoryButton(i4)
  181. -- i5
  182. i5yMin = 6
  183. i5 = window.create(m,ixMin,i5yMin,ixSize,iySize)
  184. initInventoryButton(i5)
  185. -- i6
  186. i6yMin = 7
  187. i6 = window.create(m,ixMin,i6yMin,ixSize,iySize)
  188. initInventoryButton(i6)
  189. -- i7
  190. i7yMin = 8
  191. i7 = window.create(m,ixMin,i7yMin,ixSize,iySize)
  192. initInventoryButton(i7)
  193. -- i8
  194. i8yMin = 9
  195. i8 = window.create(m,ixMin,i8yMin,ixSize,iySize)
  196. initInventoryButton(i8)
  197. -- i9
  198. i9yMin = 10
  199. i9 = window.create(m,ixMin,i9yMin,ixSize,iySize)
  200. initInventoryButton(i9)
  201. -- i10
  202. i10yMin = 11
  203. i10 = window.create(m,ixMin,i10yMin,ixSize,iySize)
  204. initInventoryButton(i10)
  205. -- i11
  206. i11yMin = 12
  207. i11 = window.create(m,ixMin,i11yMin,ixSize,iySize)
  208. initInventoryButton(i11)
  209. -- i12
  210. i12yMin = 13
  211. i12 = window.create(m,ixMin,i12yMin,ixSize,iySize)
  212. initInventoryButton(i12)
  213. -- i13
  214. i13yMin = 14
  215. i13 = window.create(m,ixMin,i13yMin,ixSize,iySize)
  216. initInventoryButton(i13)
  217. -- i14
  218. i14yMin = 15
  219. i14 = window.create(m,ixMin,i14yMin,ixSize,iySize)
  220. initInventoryButton(i14)
  221. -- i15
  222. i15yMin = 16
  223. i15 = window.create(m,ixMin,i15yMin,ixSize,iySize)
  224. initInventoryButton(i15)
  225. -- i16
  226. i16yMin = 17
  227. i16 = window.create(m,ixMin,i16yMin,ixSize,iySize)
  228. initInventoryButton(i16)
  229.  
  230.  
  231. -- cleans item names by removing modID:
  232. function split(name)
  233.   start, stop = string.find( name, ":" )
  234.   result = string.sub( name, start+1, -1 )
  235.   return result
  236. end
  237.  
  238.  
  239. -- initial inventory button display
  240. function initInventory()
  241.   for i = 1, 16 do
  242.     rednet.broadcast(i)
  243.     senderID, message, protocol = rednet.receive()
  244.     if message == "empty" then
  245.       invButtons[i].restoreCursor()
  246.       invButtons[i].setCursorPos(1,1)
  247.       invButtons[i].write("<empty>")
  248.     else
  249.       output = split(message)
  250.       invButtons[i].restoreCursor()
  251.     invButtons[i].setCursorPos(1,1)
  252.       invButtons[i].write(output)
  253.     end
  254.   end
  255. end
  256.  
  257.  
  258. -- updates inventory on inventory button click
  259. function updateInventory(index)
  260.   senderID, message, protocol = rednet.receive()
  261.   invButtons[index].clear()
  262.   invButtons[index].redraw()
  263.   invButtons[index].restoreCursor()
  264.   invButtons[index].setCursorPos(1,1)
  265.   if not message == "empty" then
  266.     output = split(message)
  267.   else
  268.   output = ("<empty>")
  269.   end
  270.   invButtons[index].write(output)
  271. end
  272.  
  273.  
  274. ----------------------------------------------------------------------
  275. -- Input listener
  276. ----------------------------------------------------------------------
  277. while(true) do
  278.  
  279.   rednet.open("right")
  280.   initInventory()
  281.  
  282.   event, side, xpos, ypos = os.pullEvent("monitor_touch")
  283.   write(xpos .. ", " .. ypos.."\n") -- show touch location
  284.  
  285. -- directional control
  286.   if (     xpos >= fxMin and xpos <= fxMax and
  287.            ypos >= fyMin and ypos <= fyMax )then
  288.     rednet.broadcast("forward")
  289.  
  290.   elseif ( xpos >= bxMin and xpos <= bxMax and
  291.            ypos >= byMin and ypos <= byMax )then
  292.     rednet.broadcast("back")
  293.  
  294.   elseif ( xpos >= lxMin and xpos <= lxMax and
  295.            ypos >= lyMin and ypos <= lyMax )then
  296.     rednet.broadcast("left")
  297.  
  298.   elseif ( xpos >= rxMin and xpos <= rxMax and
  299.            ypos >= ryMin and ypos <= ryMax )then
  300.     rednet.broadcast("right")
  301.  
  302.   elseif ( xpos >= uxMin and xpos <= uxMax and
  303.            ypos >= uyMin and ypos <= uyMax )then
  304.     rednet.broadcast("up")
  305.  
  306.   elseif ( xpos >= dxMin and xpos <= dxMax and
  307.            ypos >= dyMin and ypos <= dyMax )then
  308.     rednet.broadcast("down")
  309.  
  310. -- inventory control
  311.   elseif ( xpos >= ixMin and xpos <= ixMax )then
  312.  
  313.   if (   ypos == i1yMin ) then
  314.     rednet.broadcast(ypos)
  315.     updateInventory(ypos)
  316.  
  317.   elseif( ypos == i2yMin ) then
  318.       rednet.broadcast(ypos)
  319.     updateInventory(ypos)
  320.  
  321.   elseif( ypos == i3yMin ) then
  322.     rednet.broadcast(ypos)
  323.     updateInventory(ypos)
  324.  
  325.   elseif( ypos == i4yMin ) then
  326.     rednet.broadcast(ypos)
  327.     updateInventory(ypos)
  328.  
  329.   elseif( ypos == i5yMin ) then
  330.     rednet.broadcast(ypos)
  331.     updateInventory(ypos)
  332.  
  333.   elseif( ypos == i6yMin ) then
  334.     rednet.broadcast(ypos)
  335.     updateInventory(ypos)
  336.  
  337.   elseif( ypos == i7yMin ) then
  338.     rednet.broadcast(ypos)
  339.     updateInventory(ypos)
  340.  
  341.   elseif( ypos == i8yMin ) then
  342.     rednet.broadcast(ypos)
  343.     updateInventory(ypos)
  344.  
  345.   elseif( ypos == i9yMin ) then
  346.     rednet.broadcast(ypos)
  347.     updateInventory(ypos)
  348.  
  349.   elseif( ypos == i10yMin ) then
  350.     rednet.broadcast(ypos)
  351.     updateInventory(ypos)
  352.  
  353.   elseif( ypos == i11yMin ) then
  354.     rednet.broadcast(ypos)
  355.     updateInventory(ypos)
  356.  
  357.   elseif( ypos == i12yMin ) then
  358.     rednet.broadcast(ypos)
  359.     updateInventory(ypos)
  360.  
  361.   elseif( ypos == i13yMin ) then
  362.     rednet.broadcast(ypos)
  363.     updateInventory(ypos)
  364.  
  365.   elseif( ypos == i14yMin ) then
  366.     rednet.broadcast(ypos)
  367.     updateInventory(ypos)
  368.  
  369.   elseif( ypos == i15yMin ) then
  370.     rednet.broadcast(ypos)
  371.     updateInventory(ypos)
  372.  
  373.   elseif( ypos == i16yMin ) then
  374.     rednet.broadcast(ypos)
  375.     updateInventory(ypos)
  376.  
  377.   end
  378.   end
  379. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement