Romanok2805

Untitled

Aug 18th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.62 KB | None | 0 0
  1. local component = require("component")
  2. local event = require("event")
  3.  
  4. local mfsu
  5. local sign
  6. local count = 0 --с какой строки начинается отсчёт для расчёта строки на таблички
  7. local arg = {...}
  8. local isStarted
  9. local MfsuSpeed = 1 --частота обновения энергии мфэх в сек
  10. local SignSpeed = 0.5 --табличек в сек
  11.  
  12. local function init()
  13.   --поиск всех мфэх
  14.   mfsu = {}
  15.  
  16.   for i, k in pairs(component.list("mfsu")) do
  17.     table.insert(mfsu, {address = i, stored = 0}) --добавляем все адреса мфэх
  18.   end
  19.  
  20.   if mfsu == {} then
  21.     print("MFSU not found.")
  22.     os.exit()
  23.   end
  24.  
  25.   --поиск табличек
  26.   sign = {}
  27.  
  28.   for i, k in pairs(component.list("sign")) do
  29.     local side
  30.     for ii = 0, 5 do
  31.       if component.proxy(i).getValue(ii) then --получаем сторону где есть табличка
  32.         side = ii
  33.         break
  34.       end
  35.     end
  36.     if side then
  37.       table.insert(sign, {address = i, side = side}) --добавляем все адреса табличек
  38.     end
  39.   end
  40.  
  41.   if #sign == 0 then
  42.     print("Sign not found.")
  43.     os.exit()
  44.   end
  45. end
  46.  
  47. local function updateMFSU()
  48.   for i, k in pairs(mfsu) do --Проверяем и записываем все значения в массив
  49.     local buffer = math.floor(component.proxy(mfsu[i].address).getStored()) --для оптимизации
  50.     if buffer ~= 0 then
  51.       mfsu[i].stored = i..":"..buffer.."eu "..math.floor(buffer/40000000*100).."%"
  52.       if string.len(mfsu[i].stored) > 15 then
  53.         mfsu[i].stored = i..":"..buffer.." "..math.floor(buffer/40000000*100).."%" --если не влазит строка в табличку можно укоротить
  54.       end
  55.     else
  56.       mfsu[i].stored = i..":0eu 0%"
  57.     end
  58.   end
  59. end
  60.  
  61. local function updateSigns()
  62.   local strInt = {}
  63.   if #mfsu > 4 then --если меньше 4 мфэх то прокрутка не нужна
  64.     for i = 1 + count, 4 + count do --получаем нужные строки для обновления
  65.       if i > #mfsu then
  66.         strInt[i - count] = i - #mfsu
  67.       else
  68.         strInt[i - count] = i
  69.       end
  70.     end
  71.     count = count + 1
  72.     if count > #mfsu - 1 then
  73.       count = 0
  74.     end
  75.   else
  76.     strInt = {1, 2, 3, 4}
  77.   end
  78.  
  79.   local str = ""
  80.  
  81.   for i = 1, math.min(4, #mfsu) do
  82.     str = str..mfsu[strInt[i]].stored.."\n"
  83.   end
  84.  
  85.   for i = 1, #sign do
  86.     component.proxy(sign[i].address).setValue(sign[i].side, str)
  87.   end
  88. end
  89.  
  90. local function start()
  91.   init()
  92.   updateMFSU()
  93.   updateSigns()
  94.   idTimerMfsu = event.timer(MfsuSpeed, updateMFSU, math.huge)
  95.   idTimerSigns = event.timer(SignSpeed, updateSigns, math.huge)
  96.   event.listen("component_removed", init)
  97.   event.listen("component_added", init)
  98.   started = true
  99. end
  100.  
  101. local function stop()
  102.   event.ignore("component_removed", init)
  103.   event.ignore("component_added", init)
  104.   event.cancel(idTimerMfsu)
  105.   event.cancel(idTimerSigns)
  106.   started = false
  107. end
  108.  
  109. if isStarted then
  110.   if arg[1] == "setSpeed" then
  111.     stop()
  112.     arg[2] = string.lower(arg[2])
  113.     arg[3] = tonumber(arg[3])
  114.     if arg[2] == "mfsu" then
  115.       MfsuSpeed = arg[3]
  116.     elseif arg[2] == "sign" then
  117.       SignSpeed = arg[3]
  118.     else
  119.       io.stderr:write("Error in the parameters")
  120.     end
  121.     start()
  122.   elseif arg[1] == "stop" then
  123.     if not isStarted then
  124.       stop()
  125.     end
  126.   else
  127.     io.stderr:write("Error in the parameters")
  128.   end
  129. else
  130.   start()
  131.   print("Found:")
  132.   print(#sign.." sign")
  133.   print(#mfsu.." MFSU")
  134. end
Add Comment
Please, Sign In to add comment