Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require("component")
- local event = require("event")
- local mfsu
- local sign
- local count = 0 --с какой строки начинается отсчёт для расчёта строки на таблички
- local arg = {...}
- local isStarted
- local MfsuSpeed = 1 --частота обновения энергии мфэх в сек
- local SignSpeed = 0.5 --табличек в сек
- local isRestart = false
- local function init()
- --поиск всех мфэх
- mfsu = {}
- for i, k in pairs(component.list("mfsu")) do
- table.insert(mfsu, {address = i, stored = 0}) --добавляем все адреса мфэх
- end
- if mfsu == {} then
- print("MFSU not found.")
- os.exit()
- end
- --поиск табличек
- sign = {}
- for i, k in pairs(component.list("sign")) do
- local side
- for ii = 0, 5 do
- if component.proxy(i).getValue(ii) then --получаем сторону где есть табличка
- side = ii
- break
- end
- end
- if side then
- table.insert(sign, {address = i, side = side}) --добавляем все адреса табличек
- end
- end
- if #sign == 0 then
- print("Sign not found.")
- os.exit()
- end
- end
- local function updateMFSU()
- for i, k in pairs(mfsu) do --Проверяем и записываем все значения в массив
- local buffer = math.floor(component.proxy(mfsu[i].address).getStored()) --для оптимизации
- if buffer ~= 0 then
- mfsu[i].stored = i..":"..buffer.."eu "..math.floor(buffer/40000000*100).."%"
- if string.len(mfsu[i].stored) > 15 then
- mfsu[i].stored = i..":"..buffer.." "..math.floor(buffer/40000000*100).."%" --если не влазит строка в табличку можно укоротить
- end
- else
- mfsu[i].stored = i..":0eu 0%"
- end
- end
- end
- local function updateSigns()
- local strInt = {}
- if #mfsu > 4 then --если меньше 4 мфэх то прокрутка не нужна
- for i = 1 + count, 4 + count do --получаем нужные строки для обновления
- if i > #mfsu then
- strInt[i - count] = i - #mfsu
- else
- strInt[i - count] = i
- end
- end
- count = count + 1
- if count > #mfsu - 1 then
- count = 0
- end
- else
- strInt = {1, 2, 3, 4}
- end
- local str = ""
- for i = 1, math.min(4, #mfsu) do
- str = str..mfsu[strInt[i]].stored.."\n"
- end
- for i = 1, #sign do
- component.proxy(sign[i].address).setValue(sign[i].side, str)
- end
- end
- function start()
- if isStarted then
- io.stderr:write("MFSU is now running")
- end
- init()
- updateMFSU()
- updateSigns()
- if not isRestart then
- print("Found:")
- print(#sign.." sign")
- print(#mfsu.." MFSU")
- end
- idTimerMfsu = event.timer(MfsuSpeed, updateMFSU, math.huge)
- idTimerSigns = event.timer(SignSpeed, updateSigns, math.huge)
- event.listen("component_removed", init)
- event.listen("component_added", init)
- started = true
- end
- function stop()
- if not isStarted then
- io.stderr:write("MFSU is now stop")
- end
- event.ignore("component_removed", init)
- event.ignore("component_added", init)
- event.cancel(idTimerMfsu)
- event.cancel(idTimerSigns)
- started = false
- end
- function setSpeed(from, num)
- isRestart = true
- stop()
- from = string.lower(from)
- if from == "mfsu" then
- MfsuSpeed = num
- elseif from == "sign" then
- SignSpeed = num
- else
- io.stderr:write("Error in the parameters")
- end
- start()
- isRestart = false
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement