domian844

[OpenComputers] ExtraCells2 Fluid emitter adaptation

Oct 24th, 2020 (edited)
1,709
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. --- Автор 4gname
  3. --- Инструкция по программе в самом низу документа
  4.  
  5. comp = require("component")
  6. screen = require("term")
  7. computer = require("computer")
  8. event = require("event")
  9. GPU1 = comp.gpu
  10. sides = require("sides")
  11. rs = comp.redstone
  12. me_interface = comp.me_interface
  13. sides = require("sides")
  14. colors = require("colors")
  15.  
  16. screenWidth = 160
  17. screenHeight = 50
  18. textColor = 0xFFFFFF
  19.  
  20. GPU1.setResolution(screenWidth, screenHeight)
  21. fluidNames = {}
  22. fluids = {}
  23.  
  24. function write(x, y, text, color)
  25.     color = color or textColor
  26.     screen.setCursor(x, y)
  27.     oldColor = GPU1.setForeground(color)
  28.     screen.write(text)
  29.     GPU1.setForeground(oldColor)
  30. end
  31.  
  32. local fluidList = me_interface.getFluidsInNetwork()
  33. function fluidslistUpdate()
  34.     fluidList = me_interface.getFluidsInNetwork()
  35. end
  36.  
  37. function fluid(name, nameFluid, color_text, side_rs, cable_color, x, y, max)
  38.     local amountFLuid
  39.     local amount
  40.     local abort = true
  41.     for number, fluid in ipairs(fluidList) do
  42.         if fluid.name == nameFluid then
  43.             label = name
  44.             amountFLuid = tonumber(fluid.amount)
  45.             abort = false
  46.             break
  47.         end
  48.     end
  49.     if abort then return end
  50.     amount = math.floor(amountFLuid / 1000)
  51.     if (fluidNames[nameFluid] == nil) then
  52.         if amount >= max then
  53.             write(x + 4, y, label .. " " .. amount*1000 .. " L" .. " [" .. max*1000 .. " L]", color_text)
  54.             box(x + 1, y, 2, 1, 0xff0000)
  55.             rs.setBundledOutput(side_rs, cable_color, 255)
  56.         else
  57.             write(x + 4, y, label .. " " .. amount*1000 .. " L" .. " [" .. max*1000 .. " L]", color_text)
  58.             box(x + 1, y, 2, 1, 0x000000)
  59.             rs.setBundledOutput(side_rs, cable_color, 0)
  60.         end
  61.     else
  62.     end
  63. end
  64.  
  65. function resetCables(side, boolean)
  66.     if (boolean == true) then
  67.     rs.setBundledOutput(side, colors.orange, 0)
  68.     rs.setBundledOutput(side, colors.magenta, 0)
  69.     rs.setBundledOutput(side, colors.lightblue, 0)
  70.     rs.setBundledOutput(side, colors.yellow, 0)
  71.     rs.setBundledOutput(side, colors.lime, 0)
  72.     rs.setBundledOutput(side, colors.pink, 0)
  73.     rs.setBundledOutput(side, colors.gray, 0)
  74.     rs.setBundledOutput(side, colors.silver, 0)
  75.     rs.setBundledOutput(side, colors.cyan, 0)
  76.     rs.setBundledOutput(side, colors.purple, 0)
  77.     rs.setBundledOutput(side, colors.black, 0)
  78.     rs.setBundledOutput(side, colors.white, 0)
  79.     rs.setBundledOutput(side, colors.red, 0)
  80.     rs.setBundledOutput(side, colors.green, 0)
  81.     rs.setBundledOutput(side, colors.brown, 0)
  82.     rs.setBundledOutput(side, colors.blue, 0)
  83.     else
  84.     end
  85. end
  86.  
  87. function box(x, y, w, h, color)
  88.     oldColor = GPU1.setBackground(color)
  89.     GPU1.fill(x, y, w, h, " ")
  90.     GPU1.setBackground(oldColor)
  91. end
  92.  
  93. function offProgram(x)
  94.     write(screenWidth-15, 1, "Off - Ctrl+C", 0x858585)
  95.     write(screenWidth-15, 1, "Off - Ctrl+C", 0x858585)
  96.     x = x + 1
  97.     if (x % 2 == 0) then
  98.         box(screenWidth-2, 1, 2, 1, 0x858585)
  99.     else
  100.         box(screenWidth-2, 1, 2, 1, 0xffffff)
  101.     end
  102.  
  103. end
  104.  
  105. screen.clear()
  106. n = 1
  107.  
  108.     --------------------------------------------------------------------------------------------------------
  109.  
  110.     --- Как работает программа?
  111.  
  112.     --- С помощью МЕ интерфейса и адаптера OC программа считывает все жидкости в системе, далее вы выбираете нужную
  113.     --- вам жидкость для отслеживания, указываете ее допустимое значение и программа выдает редстоун сигнал через через
  114.     --- RS порт OC (Выбирается сторона и цвет кабеля для работы с модом Project Red) при достижении допустимого значения
  115.     --- программа выдает ред сигнал выбранного цвета с выбранной стороны RS порта.
  116.     ---
  117.     --- На мониторе пк выводится информация: Название жидкости, объем в МЕ, Допустимый обьем, Активен ли RS сигнал
  118.  
  119.     --- Требования для работы программы:
  120.  
  121.     --- 1) Наличие Адаптера подключенного к МЕ интерфейсу (обычному, НЕ жидкостному)
  122.     --- 2) Наличие Redstone IO адаптера
  123.     --- 3) Комп тир 3
  124.     --- 4) Мониторы тир 3
  125.     --- 5) GPU тир 3
  126.     --- 6) CPU тир 3
  127.  
  128.     --------------------------------------------------------------------------------------------------------
  129.  
  130. while (true) do
  131.  
  132.     --------------------------------------------------------------------------------------------------------
  133.  
  134.     --- Обновление жиж в ме [не трогать]
  135.     fluidslistUpdate()
  136.  
  137.     --------------------------------------------------------------------------------------------------------
  138.  
  139.     --- Регистрация жидкостей
  140.     --- @param name - Полное название жидкости
  141.     --- @param nameFluid - Название жидкости в универсальной капсуле
  142.     --- @param color_text - Цвет текста через палитру HEX
  143.     --- @param side_rs - Сторона редстоун куба - sides.top, sides.down, sides.back, sides.front, sides.left, sides.right
  144.     --- @param cable_color - Цвет провода из мода Project Red - colors.white .. colors.black
  145.     --- @param x, y - Координаты текста
  146.     ---      x: обычно 1;
  147.     ---      y: обычно имеет значение для каждой новой жидкости +1;
  148.     --- @param max - Максимальное значение жидкости при котором выдается редстоун сигнал - значение в ведрах
  149.  
  150.     --- Примеры:
  151.     fluid("Your Name Fluid","nitrogen", 0x808080, sides.top, colors.purple, 1, 3, 20)
  152.  
  153.     --------------------------------------------------------------------------------------------------------
  154.  
  155.     --- Выключение всех кабелей, если баганули или просто тестируете что то
  156.     --- @param side - Сторона редстоун куба
  157.     --- @param boolean - true или false
  158.     ---      true: обнуляет все провода, если оставить вместе с жидкостями выдает импульсы(мигает);
  159.     ---      false: не работает (по умолчанию);
  160.     resetCables(sides.top, false)
  161.  
  162.     --------------------------------------------------------------------------------------------------------
  163.  
  164.     --- Индикатор работы программы
  165.     offProgram(n)
  166.  
  167.     n = n + 1
  168.     --------------------------------------------------------------------------------------------------------
  169.  
  170.     -- Выключить программу ctrl+c
  171.     os.sleep(0.1)
  172.     if event.pull(.5, "interrupted") then
  173.         screen.clear()
  174.         break
  175.     end
  176. end
RAW Paste Data