Advertisement
jc2xs

aspects - working

May 13th, 2014
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. rednet.open("left")
  2. os.loadAPI("button")
  3. local turtleID = 18
  4. local essentia = {}
  5. local jars = peripheral.getNames()
  6. local m = peripheral.wrap("top")
  7. local monCoord = {}
  8. local currEssentia
  9. local fillAmt = 0
  10. local rowsActive = true
  11.  
  12. function sortEss(t)
  13.    local keys = {}
  14.    for k in pairs(t) do keys[#keys+1] = k end
  15.    table.sort(keys)
  16.    
  17.    local i = 0
  18.    return function()
  19.       i = i+1
  20.       if keys[i] then
  21.          return keys[i], t[keys[i]]
  22.       end
  23.    end
  24. end
  25.  
  26. function scanEssentia()
  27.   for i,j in ipairs(jars) do
  28.      if peripheral.getType(j) == "tilejar" then
  29.        --print(peripheral.call(j, "listMethods"))
  30.        pw = peripheral.wrap(j)
  31.        asp = pw.getEssentiaType('front')
  32.        --asp = peripheral.call(j, getEssentiaType("front"))
  33.        --print(asp)
  34.        countasp = pw.getEssentiaAmount('front')
  35.        if countasp > 0 then
  36.           essentia[asp] = math.floor(countasp)
  37.        end
  38. --     print(countasp)
  39.      print(asp..":"..countasp)
  40. --     print(peripheral.getType(j))
  41.      end
  42.   end
  43. end
  44.  
  45. function printEssentia()
  46.   m.setTextColor(colors.white)
  47.   local x = 1
  48.   local y = 1
  49.   monCoord[x] = {}
  50. --  for a = 1,17 do
  51.   for i,j in sortEss(essentia) do
  52.      if j<=20 then m.setTextColor(colors.red) end
  53.      if j<40 and j>20 then m.setTextColor(colors.yellow) end
  54.      if j>=40 then m.setTextColor(colors.green) end
  55.      
  56.      m.setCursorPos(x,y)
  57.      m.write(i)
  58.      m.setCursorPos(x+14,y)
  59.      m.write(tostring(j))
  60. --     print(j)
  61.      monCoord[x][y] = i
  62.      if y < 17 then
  63.         y = y+1
  64.      else
  65.         y = 1
  66.         x = x+17
  67.         monCoord[x] = {}  
  68.      end
  69.   end
  70. -- end
  71.  m.setTextColor(colors.white)
  72. end
  73.  
  74. function getClick()
  75.    local event,side,x,y = os.pullEvent()
  76.    if event=="monitor_touch" then
  77.      if button.checkxy(x,y) then
  78.         print("button")
  79.      else
  80.         if rowsActive then
  81.           fillAmt = 0
  82.           print(x..":"..x-(x%17)+1)
  83.           print(monCoord[x-(x%17)+1][y])
  84.           currEssentia = monCoord[x-(x%17)+1][y]
  85.           if currEssentia ~= nil then
  86.           if essentia[currEssentia] < 64 then
  87.              fillTable2()
  88.           else
  89.              m.clear()
  90.              button.label(1,10, currEssentia.." is already full.  Please choose another.")
  91.              sleep(3)
  92.              refresh()
  93.           end
  94.           end
  95.         end
  96.      end
  97.    end
  98. end
  99.  
  100. function refresh()
  101.    button.flash("Refresh")
  102.    m.clear()
  103.    scanEssentia()
  104.    printEssentia()
  105.    print("Refreshed")
  106.    button.screen()
  107. end
  108.  
  109. function fillTable()
  110.    rowsActive = true
  111.    button.clearTable()
  112.    button.setTable("Refresh", refresh, "", 15, 35, 19, 19)
  113.    button.screen()
  114. end
  115.  
  116. function addEss(num)
  117.    fillAmt = fillAmt + num
  118.    if fillAmt < 0 then fillAmt = 0 end
  119.    if fillAmt > 64-essentia[currEssentia] then fillAmt = 64-essentia[currEssentia] end
  120.    m.clear()
  121.    fillTable2()
  122. end
  123.  
  124. function fillEss()
  125.    local essData = {}
  126.    essData[1] = currEssentia
  127.    essData[2] = fillAmt
  128.    local sendData = ""
  129.    sendData = textutils.serialize(essData)
  130.    rednet.send(turtleID, sendData)
  131.    m.clear()
  132.    button.label(7, 10, "Waiting for aspects to finish cooking....")
  133.    button.label(7, 12, "Don't forget to refresh the screen after")
  134.    button.label(7, 13, "the golem is done moving the essentia.")
  135.    rednet.receive()
  136.    m.clear()
  137.    fillTable()
  138.    refresh()
  139. end
  140.  
  141. function cancel()
  142.    m.clear()
  143.    fillTable()
  144.    refresh()
  145. end  
  146.  
  147. function fillTable2()
  148.    rowsActive = false
  149.    button.clearTable()
  150.    m.clear()
  151.    button.label(7, 1, "Essentia: "..currEssentia.." contains "..essentia[currEssentia])
  152.    button.setTable("+1", addEss, 1, 8, 18, 6,6)
  153.    button.setTable("+5", addEss, 5, 20, 30, 6, 6)
  154.    button.setTable("+10", addEss, 10, 32, 42, 6, 6)
  155.    button.setTable("-1", addEss, -1, 8, 18, 8, 8)
  156.    button.setTable("-5", addEss, -5, 20, 30, 8, 8)
  157.    button.setTable("-10", addEss, -10, 32, 42, 8 ,8)
  158.    button.setTable("Refill Jar", addEss, 64-essentia[currEssentia], 8, 42, 10, 10)
  159.    button.setTable("Execute Fill Request", fillEss, "", 8, 42, 16, 18)
  160.    button.setTable("Cancel", cancel, "", 20, 30, 12, 14)
  161.    button.label(7, 4, "Currently Adding "..fillAmt.." "..currEssentia.." essentia.")
  162.    button.screen()
  163. end
  164.  
  165. fillTable()
  166. refresh()
  167. while true do getClick() end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement