Advertisement
Andrakon

bundleAPI

Feb 25th, 2013
1,440
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.96 KB | None | 1 0
  1. -- Lua script by Andrakon
  2. -- Written to make using Redpower Bundles easy!
  3. -- Version 1.2
  4. -- use help() to read the directions for use.
  5. -- Sides are defined with "back" or "left"
  6. -- Uses standard color names such as "red" or "lightBlue"
  7. -- Works with american and europeon versions of gray/grey
  8. -- Make sure to include os.loadAPI ("bundleAPI") in your program!
  9.  
  10.  
  11. -- sets up the tabletracker array that keeps track off all the sides and colors that are on
  12. local sides = 6
  13. local colors = 16
  14. local tabletracker = {}
  15. local sidenumbers = {}
  16. local writeside = 0
  17. local writecolor = 0
  18. for i=1,sides do
  19.   tabletracker[i] = {}
  20.   for j=1,colors do
  21.     tabletracker[i][j] = 0
  22.   end
  23. end
  24.  
  25. -- Version number
  26. function getVersion()
  27. return 1.1
  28. end
  29.  
  30. -- built in help page
  31. function help()
  32.     term.clear()
  33.     term.setCursorPos(1,1)
  34.     write('on("side", "color") turns ON the selected color on the selected side.\n')
  35.     write('off("side", "color")turns OFF the selected color on the selected side.\n')
  36.     write('toggle("side", "color")Toggles the selected color on the selected side.\n')
  37.     write('getOutput("side", "color") returns a 0 or 1 depending on what has been turned off or on.\n')
  38.     write('getInput("side", "color") returns a 0 or 1, reads an input or output as on.\n')
  39.     write('resetAll() turns off all colors on all sides.\n')
  40.     write('resetSide("side") turns off all colors on selected side.\n')
  41.     write('resetColor("color") turns off all of selected color on all sides.\n')
  42.     write('Uses standard color names such as "red" or "lightBlue"')
  43.     write('Works with american and europeon versions of gray/grey.')
  44.     write('help2() second page of help')
  45. end
  46.  
  47. function help2()
  48.     term.clear()
  49.     term.setCursorPos(1,1)
  50.     write('getVersion() returns the version of the API')
  51.     write('pulse("side", "color", time) toggles the side and color for the specified time for example 1 for one second or 0.5 for 1/2 a second.')
  52. end
  53.  
  54. -- checks for valid sides
  55. local validSides = {}
  56.  
  57. local function sideCheck(sSide)
  58.     for n,sSide in ipairs( rs.getSides() ) do
  59.         validSides[ sSide ] = true
  60.     end
  61.    
  62.     if type( sSide ) ~= "string" then
  63.         error( "side string expected" )
  64.     end
  65.     if not validSides[sSide] then
  66.         error( "Invalid side" )
  67.     end
  68. end
  69.  
  70. --read from the tabletracker array, write to the sidenumbers table, and turn everything off or on
  71. local function update()
  72.     for i=1,sides do
  73.         sidenumbers[i] = 0
  74.     end
  75.    
  76.     for i=1,sides do
  77.         for j=1,colors do  
  78.             if tabletracker[i][j] == 1 then
  79.                 if (2^(j-1)) == 0 then
  80.                     sidenumbers[i] = sidenumbers[i]+1
  81.                 else
  82.                     sidenumbers[i] = sidenumbers[i]+(2^(j-1))
  83.                 end
  84.             end
  85.         end
  86.     end
  87.     redstone.setBundledOutput("front", sidenumbers[1])
  88.     redstone.setBundledOutput("back", sidenumbers[2])
  89.     redstone.setBundledOutput("left", sidenumbers[3])
  90.     redstone.setBundledOutput("right", sidenumbers[4])
  91.     redstone.setBundledOutput("top", sidenumbers[5])
  92.     redstone.setBundledOutput("bottom", sidenumbers[6])
  93. end
  94.  
  95. local function tablesort(side, color)
  96.     if type( color ) ~= "string" then
  97.         error( "color string expected" )
  98.     end
  99.     -- sort sides and reformat for table usage
  100.     if side == "front" then writeside = 1 end
  101.     if side == "back" then writeside = 2 end
  102.     if side == "left" then writeside = 3 end
  103.     if side == "right" then writeside = 4 end
  104.     if side == "top" then writeside = 5 end
  105.     if side == "bottom" then writeside = 6 end
  106.     -- incase of mixup
  107.     if side == "up" then writeside = 5 end
  108.     if side == "down" then writeside = 6 end
  109.    
  110.     -- sort colors and reformat for table usage
  111.     if color == "white" then writecolor = 1
  112.     elseif color == "orange" then writecolor = 2
  113.     elseif color == "magenta" then writecolor = 3
  114.     elseif color == "lightBlue" then writecolor = 4
  115.     elseif color == "yellow" then writecolor = 5
  116.     elseif color == "lime" then writecolor = 6
  117.     elseif color == "pink" then writecolor = 7
  118.     elseif color == "gray" then writecolor = 8
  119.     elseif color == "lightGray" then writecolor = 9
  120.     elseif color == "cyan" then writecolor = 10
  121.     elseif color == "purple" then writecolor = 11
  122.     elseif color == "blue" then writecolor = 12
  123.     elseif color == "brown" then writecolor = 13
  124.     elseif color == "green" then writecolor = 14
  125.     elseif color == "red" then writecolor = 15
  126.     elseif color == "black" then writecolor = 16
  127.     -- incase of mixup
  128.     elseif color == "lightblue" then writecolor = 4
  129.     elseif color == "grey" then writecolor = 8
  130.     elseif color == "lightGrey" then writecolor = 9
  131.     elseif color == "lightgrey" then writecolor = 9
  132.     else
  133.         error( "invalid color" )
  134.     end
  135. end
  136.  
  137. function on(aside,acolor)
  138.     sideCheck(aside)
  139.     tablesort(aside,acolor)
  140.     if tabletracker[writeside][writecolor] == 0 then
  141.         tabletracker[writeside][writecolor] = 1
  142.         update()
  143.     end
  144. end
  145.  
  146. function off(aside,acolor)
  147.     sideCheck(aside)
  148.     tablesort(aside,acolor)
  149.     if tabletracker[writeside][writecolor] == 1 then
  150.         tabletracker[writeside][writecolor] = 0
  151.         update()
  152.     end
  153. end
  154.  
  155. function toggle(aside,acolor)
  156.     sideCheck(aside)
  157.     tablesort(aside,acolor)
  158.     if tabletracker[writeside][writecolor] == 0 then
  159.         tabletracker[writeside][writecolor] = 1
  160.         update()
  161.     else
  162.         tabletracker[writeside][writecolor] = 0
  163.         update()
  164.     end
  165. end
  166.  
  167. function getOutput(aside, acolor)
  168.     sideCheck(aside)
  169.     tablesort(aside,acolor)
  170.     return tabletracker[writeside][writecolor]
  171. end
  172.  
  173. function resetAll()
  174.     for i=1,sides do
  175.         for j=1,colors do
  176.             tabletracker[i][j] = 0
  177.         end
  178.     end
  179.     update()
  180. end
  181.  
  182. function resetSide(aside)
  183.     sideCheck(aside)
  184.     tablesort(aside, "white")
  185.     for j=1,colors do
  186.         tabletracker[writeside][j] = 0
  187.     end
  188.     update()
  189. end
  190.  
  191. function resetColor(acolor)
  192.     tablesort("front", acolor)
  193.     for i=1,sides do
  194.         tabletracker[i][writecolor] = 0
  195.     end
  196.     update()
  197. end
  198.  
  199. function getInput(aside, acolor)
  200.     sideCheck(aside)
  201.     tablesort("front", acolor)
  202.         writecolor = 2^(writecolor-1)
  203.         if writecolor == 0 then
  204.             writecolor = 1
  205.         end
  206.     return redstone.testBundledInput(aside,writecolor)
  207. end
  208.  
  209. function pulse(aside, acolor, time)
  210.     toggle(aside, acolor)
  211.     sleep(time)
  212.     toggle(aside, acolor)
  213. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement