Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Format number with [k,M,G,T,P,E] postfix or exponent, depending on how large it is
- local function formatReadableSIUnit(num)
- num = tonumber(num)
- if(num < 1000) then return tostring(num) end
- local sizes = {"", "k", "M", "G", "T", "P", "E"}
- local exponent = math.floor(math.log10(num))
- local group = math.floor(exponent / 3)
- if group > #sizes then
- return string.format("%e", num)
- else
- local divisor = math.pow(10, (group) * 3)
- return string.format("%i%s", num / divisor, sizes[group + 1])
- end
- end -- local function formatReadableSIUnit(num)
- monitorCollection = {
- monitors = {},
- addMonitor = function(monitorName, monitorAlias, monitorUse)
- local monitor = {}
- monitor.name = monitorName
- monitor.alias = monitorAlias
- monitor.use = monitorUse
- monitor.device = peripheral.wrap(monitorName)
- monitorCollection.monitors[monitorName] = monitor
- end,
- getMonitor = function(monitorName)
- return monitorCollection.monitors[monitorName]
- end,
- getMonitors = function(monitorType)
- if monitorType == nil then
- return monitorCollection.monitors
- else
- local foundMonitors = {}
- for monitorKey, monitorValue in pairs(monitorCollection.monitors) do
- if monitorCollection.monitors[monitorKey].use == monitorType then
- foundMonitors[monitorKey] = monitorCollection.monitors[monitorKey]
- end
- end
- return foundMonitors
- end
- end,
- }
- capacitorBankCollection = {
- capacitorBanks = {},
- addcapacitorBank = function(name, alias, count, capacity, turbines, reactors)
- local capacitorBank = {}
- capacitorBank.name = name
- capacitorBank.alias = alias
- capacitorBank.count = count
- capacitorBank.capacity = capacity
- if turbines ~= nil then
- capacitorBank.turbines = turbines
- else
- capacitorBank.turbines = nil
- end
- if turbines ~= nil then
- capacitorBank.reactors = reactors
- else
- capacitorBank.reactors = nil
- end
- capacitorBank.device = peripheral.wrap(name)
- capacitorBankCollection.capacitorBanks[name] = capacitorBank
- end,
- getcapacitorBank = function(capacitorBankName)
- return capacitorBankCollection.capacitorBanks[capacitorBankName]
- end,
- getcapacitorBanks = function()
- return capacitorBankCollection.capacitorBanks
- end,
- }
- reactorCollection = {
- reactors = {},
- addReactor = function(reactorName, reactorAlias)
- local reactor = {}
- reactor.name = reactorName
- reactor.alias = reactorAlias
- reactor.device = peripheral.wrap(reactorName)
- reactorCollection.reactors[reactorName] = reactor
- end,
- getReactor = function(reactorName)
- return reactorCollection.reactors[reactorName]
- end,
- getReactors = function(reactorType)
- if reactorType == nil then
- return reactorCollection.reactors
- else
- local foundReactors = {}
- for reactorKey, reactorValue in pairs(reactorCollection.reactors) do
- if reactorCollection.reactors[reactorKey].use == reactorType then
- foundReactors[reactorKey] = reactorCollection.reactors[reactorKey]
- end
- end
- return foundReactors
- end
- end,
- }
- turbineCollection = {
- turbines = {},
- addTurbine = function(turbineName, turbineAlias, reactors)
- local turbine = {}
- turbine.name = turbineName
- turbine.alias = turbineAlias
- turbine.reactors = reactors
- turbine.device = peripheral.wrap(turbineName)
- turbineCollection.turbines[turbineName] = turbine
- end,
- getTurbine = function(turbineName)
- return turbineCollection.turbines[turbineName]
- end,
- getTurbines = function(turbineType)
- if turbineType == nil then
- return turbineCollection.turbines
- else
- local foundTurbines = {}
- for turbineKey, turbineValue in pairs(turbineCollection.turbines) do
- if turbineCollection.turbines[turbineKey].use == turbineType then
- foundTurbines[turbineKey] = turbineCollection.turbines[turbineKey]
- end
- end
- return foundTurbines
- end
- end,
- }
- monitorCollection.addMonitor("monitor_0", "ReactorMonitor", "reactors")
- monitorCollection.addMonitor("monitor_1", "ReactorMonitor", "reactors")
- monitorCollection.addMonitor("monitor_2", "ReactorMonitor", "reactors")
- --monitorCollection.addMonitor("monitor_3", "ReactorMonitor", "reactors")
- --monitorCollection.addMonitor("monitor_4", "ReactorMonitor", "reactors")
- --monitorCollection.addMonitor("monitor_5", "ReactorMonitor", "reactors")
- --monitorCollection.addMonitor("monitor_6", "ReactorMonitor", "reactors")
- --monitorCollection.addMonitor("monitor_7", "ReactorMonitor", "reactors")
- --monitorCollection.addMonitor("monitor_8", "ReactorMonitor", "reactors")
- monitorCollection.addMonitor("monitor_9", "EnergyStorageMonitor", "capacitorBanks")
- monitorCollection.addMonitor("monitor_10", "OverviewMonitor", "main")
- monitorCollection.addMonitor("monitor_11", "ReactorMonitor", "reactors")
- monitorCollection.addMonitor("monitor_12", "ReactorMonitor", "reactors")
- monitorCollection.addMonitor("monitor_13", "ReactorMonitor", "reactors")
- monitorCollection.addMonitor("monitor_14", "ReactorMonitor", "reactors")
- monitorCollection.addMonitor("monitor_15", "ReactorMonitor", "reactors")
- monitorCollection.addMonitor("monitor_16", "ReactorMonitor", "reactors")
- monitorCollection.addMonitor("monitor_17", "ReactorMonitor", "reactors")
- reactorCollection.addReactor("BigReactors-Reactor_1", "Passive_01")
- reactorCollection.addReactor("BigReactors-Reactor_0", "Active_01")
- reactorCollection.addReactor("BigReactors-Reactor_2", "Active_02")
- reactorCollection.addReactor("BigReactors-Reactor_3", "Active_03")
- turbineCollection.addTurbine("BigReactors-Turbine_0", "Active_01", {"BigReactors-Reactor_0"})
- turbineCollection.addTurbine("BigReactors-Turbine_1", "Active_02", {"BigReactors-Reactor_2"})
- turbineCollection.addTurbine("BigReactors-Turbine_2", "Active_03", {"BigReactors-Reactor_3"})
- capacitorBankCollection.addcapacitorBank("tile_blockcapacitorbank_name_2", "Active_01", 31, 5000000, {"BigReactors-Turbine_0"}, nil)
- capacitorBankCollection.addcapacitorBank("tile_blockcapacitorbank_name_1", "Passive_01", 9, 5000000, nil, {"BigReactors-Reactor_1"})
- capacitorBankCollection.addcapacitorBank("tile_blockcapacitorbank_name_3", "Active_02",64, 5000000, {"BigReactors-Turbine_1"}, nil)
- capacitorBankCollection.addcapacitorBank("tile_blockcapacitorbank_name_4", "Active_03",64, 5000000, {"BigReactors-Turbine_2"}, nil)
- monitors = monitorCollection.getMonitors()
- for monitorKey, monitorValue in pairs(monitors) do
- local monitor = monitors[monitorKey]
- monitor.device.clear()
- end
- capacitorBanks = capacitorBankCollection.capacitorBanks
- while true do
- for capacitorBankKey, capacitorBankValue in pairs(capacitorBanks) do
- if capacitorBanks[capacitorBankKey].reactors ~= nil then
- local fillpercentage = 100 * (capacitorBanks[capacitorBankKey].device.getEnergyStored() * capacitorBanks[capacitorBankKey].count)/(capacitorBanks[capacitorBankKey].capacity * capacitorBanks[capacitorBankKey].count)
- if(fillpercentage < 10) then
- for reactorNameIndex = 1, #capacitorBanks[capacitorBankKey].reactors do
- local reactor = reactorCollection.getReactor(capacitorBanks[capacitorBankKey].reactors[reactorNameIndex])
- if reactor.device.getActive() == false then
- reactor.device.setActive(true)
- end
- end
- end
- if(fillpercentage > 90) then
- for reactorNameIndex = 1, #capacitorBanks[capacitorBankKey].reactors do
- local reactor = reactorCollection.getReactor(capacitorBanks[capacitorBankKey].reactors[reactorNameIndex])
- if reactor.device.getActive() == true then
- reactor.device.setActive(false)
- end
- end
- end
- end
- if capacitorBanks[capacitorBankKey].turbines ~= nil then
- local fillpercentage = 100 * (capacitorBanks[capacitorBankKey].device.getEnergyStored() * capacitorBanks[capacitorBankKey].count)/(capacitorBanks[capacitorBankKey].capacity * capacitorBanks[capacitorBankKey].count)
- if(fillpercentage < 10) then
- for turbineNameIndex = 1, #capacitorBanks[capacitorBankKey].turbines do
- local turbine = turbineCollection.getTurbine(capacitorBanks[capacitorBankKey].turbines[turbineNameIndex])
- if turbine.device.getActive() == false then
- turbine.device.setActive(true)
- turbine.device.setInductorEngaged(true)
- end
- for reactorNameIndex = 1, #turbine.reactors do
- local reactor = reactorCollection.getReactor(turbine.reactors[reactorNameIndex])
- if reactor.device.getActive() == false then
- reactor.device.setActive(true)
- end
- end
- end
- end
- if(fillpercentage > 90) then
- for turbineNameIndex = 1, #capacitorBanks[capacitorBankKey].turbines do
- local turbine = turbineCollection.getTurbine(capacitorBanks[capacitorBankKey].turbines[turbineNameIndex])
- if turbine.device.getActive() == true then
- turbine.device.setActive(false)
- turbine.device.setInductorEngaged(false)
- end
- for reactorNameIndex = 1, #turbine.reactors do
- local reactor = reactorCollection.getReactor(turbine.reactors[reactorNameIndex])
- if reactor.device.getActive() == true then
- reactor.device.setActive(false)
- end
- end
- end
- end
- end
- end
- local mainmonitors = monitorCollection.getMonitors("main")
- for monitorKey, monitorValue in pairs(mainmonitors) do
- mainmonitor = mainmonitors[monitorKey]
- capacitorBanks = capacitorBankCollection.getcapacitorBanks()
- mainmonitor.device.setCursorPos(1, 1)
- mainmonitor.device.write("Capacitor Banks")
- local line = 2
- for capacitorBankKey, capacitorBankValue in pairs(capacitorBanks) do
- --mainmonitor.device.clearLine()
- local fillpercentage = 1 + 20 * (capacitorBanks[capacitorBankKey].device.getEnergyStored() * capacitorBanks[capacitorBankKey].count)/(capacitorBanks[capacitorBankKey].capacity * capacitorBanks[capacitorBankKey].count)
- mainmonitor.device.setBackgroundColor(colors.gray)
- for i = 1,20 do
- mainmonitor.device.setCursorPos(i, line)
- mainmonitor.device.write(" ")
- i = i + 1
- end
- mainmonitor.device.setBackgroundColor(colors.red)
- for i = 1,fillpercentage do
- mainmonitor.device.setCursorPos(i, line)
- mainmonitor.device.write(" ")
- i = i + 1
- end
- mainmonitor.device.setBackgroundColor(colors.black)
- mainmonitor.device.setTextColor(colors.white)
- mainmonitor.device.setCursorPos(22,line)
- mainmonitor.device.write(formatReadableSIUnit(capacitorBanks[capacitorBankKey].device.getEnergyStored() * capacitorBanks[capacitorBankKey].count).."/"..formatReadableSIUnit(capacitorBanks[capacitorBankKey].capacity * capacitorBanks[capacitorBankKey].count))
- line = line + 1
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement