Advertisement
Romanok2805

Untitled

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