Guest User

rshelp API!

a guest
Apr 6th, 2012
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.96 KB | None | 0 0
  1. local sides = rs.getSides()
  2. state = {}
  3. setmetatable(state, {
  4.     __index = function(t, side)
  5.         local returnTab = {}
  6.         returnTab["rs"] = rs.getInput(side)
  7.         local rp = rs.getBundledInput(side)
  8.         for k, v in pairs(colors) do
  9.             if type(v) == "number" then
  10.                 returnTab[k] = colors.test(rp, v)
  11.             end
  12.         end
  13.         return returnTab
  14.     end
  15. })
  16.  
  17. function pullEvent(noTerminate, exclusive, side, wire, val)
  18.     local pullEventFunc
  19.     if noTerminate then pullEventFunc = coroutine.yield else pullEventFunc = os.pullEvent end
  20.     local stateSide
  21.     local toReturn = {}
  22.     local prevState = {}
  23.     local event, param1, param2, param3, param4, param5
  24.     while true do
  25.         for k, v in pairs(sides) do
  26.             prevState[v] = state[v]
  27.         end
  28.         event, param1, param2, param3, param4, param5 = pullEventFunc()
  29.        
  30.         if event ~= "redstone" then
  31.             if not exclusive then
  32.                 return event, param1, param2, param3, param4, param5
  33.             end
  34.         else
  35.             if param1 ~= nil then return event, param1, param2, param3, param4, param5 end
  36.             if not side then
  37.                 for k, v in pairs(sides) do
  38.                     stateSide = state[v]
  39.                     for x, y in pairs(stateSide) do
  40.                         if y ~= prevState[v][x] then
  41.                             table.insert(toReturn, {v, x, y})
  42.                         end
  43.                     end
  44.                 end
  45.            
  46.                 for i=2, #toReturn do
  47.                     os.queueEvent("redstone", toReturn[i][1], toReturn[i][2], toReturn[i][3])
  48.                 end
  49.                 return "redstone", toReturn[1][1], toReturn[1][2], toReturn[1][3]
  50.             else
  51.                 stateSide = state[side]
  52.                 if not wire then
  53.                     for x, y in pairs(stateSide) do
  54.                         if y ~= prevState[side][x] then
  55.                             table.insert(toReturn, {side, x, y})
  56.                         end
  57.                     end
  58.                     if #toReturn >= 1 then
  59.                         for i=2, #toReturn do
  60.                             os.queueEvent("redstone", toReturn[i][1], toReturn[i][2], toReturn[i][3])
  61.                         end
  62.                         return "redstone", toReturn[1][1], toReturn[1][2], toReturn[1][3]
  63.                     end
  64.                 else
  65.                     if val ~= nil then
  66.                         if not stateSide[wire] == prevState[side][wire] and stateSide[wire] == val then
  67.                             return "redstone", side, wire, stateSide[wire]
  68.                         end
  69.                     else
  70.                         if not stateSide[wire] == prevState[side][wire] then
  71.                             return "redstone", side, wire, stateSide[wire]
  72.                         end
  73.                     end
  74.                 end
  75.             end
  76.         end
  77.     end
  78. end
Advertisement
Add Comment
Please, Sign In to add comment