Advertisement
Eglos

Untitled

Oct 13th, 2015
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 10.47 KB | None | 0 0
  1. -- Format number with [k,M,G,T,P,E] postfix or exponent, depending on how large it is
  2. local function formatReadableSIUnit(num)
  3.     num = tonumber(num)
  4.     if(num < 1000) then return tostring(num) end
  5.     local sizes = {"", "k", "M", "G", "T", "P", "E"}
  6.     local exponent = math.floor(math.log10(num))
  7.     local group = math.floor(exponent / 3)
  8.     if group > #sizes then
  9.         return string.format("%e", num)
  10.     else
  11.         local divisor = math.pow(10, (group) * 3)
  12.         return string.format("%i%s", num / divisor, sizes[group + 1])
  13.     end
  14. end -- local function formatReadableSIUnit(num)
  15.  
  16. monitorCollection = {
  17.     monitors = {},
  18.     addMonitor = function(monitorName, monitorAlias, monitorUse)
  19.         local monitor = {}
  20.         monitor.name = monitorName
  21.         monitor.alias = monitorAlias
  22.         monitor.use = monitorUse
  23.         monitor.device = peripheral.wrap(monitorName)
  24.         monitorCollection.monitors[monitorName] = monitor
  25.     end,
  26.     getMonitor = function(monitorName)
  27.         return monitorCollection.monitors[monitorName]
  28.     end,
  29.     getMonitors = function(monitorType)
  30.         if monitorType == nil then
  31.             return monitorCollection.monitors
  32.         else
  33.             local foundMonitors = {}
  34.             for monitorKey, monitorValue in pairs(monitorCollection.monitors) do
  35.                 if monitorCollection.monitors[monitorKey].use == monitorType then
  36.                     foundMonitors[monitorKey] = monitorCollection.monitors[monitorKey]
  37.                 end
  38.             end
  39.  
  40.             return foundMonitors
  41.         end
  42.     end,
  43. }
  44.  
  45. capacitorBankCollection = {
  46.     capacitorBanks = {},
  47.     addcapacitorBank = function(name, alias, count, capacity, turbines, reactors)
  48.         local capacitorBank = {}
  49.         capacitorBank.name = name
  50.         capacitorBank.alias = alias
  51.         capacitorBank.count = count
  52.         capacitorBank.capacity = capacity
  53.         if turbines ~= nil then
  54.             capacitorBank.turbines = turbines
  55.         else
  56.             capacitorBank.turbines = nil
  57.         end
  58.         if turbines ~= nil then
  59.             capacitorBank.reactors = reactors
  60.         else
  61.             capacitorBank.reactors = nil
  62.         end
  63.         capacitorBank.device = peripheral.wrap(name)
  64.         capacitorBankCollection.capacitorBanks[name] = capacitorBank
  65.     end,
  66.     getcapacitorBank = function(capacitorBankName)
  67.         return capacitorBankCollection.capacitorBanks[capacitorBankName]
  68.     end,
  69.     getcapacitorBanks = function()
  70.         return capacitorBankCollection.capacitorBanks
  71.     end,
  72. }
  73.  
  74. reactorCollection = {
  75.     reactors = {},
  76.     addReactor = function(reactorName, reactorAlias)
  77.         local reactor = {}
  78.         reactor.name = reactorName
  79.         reactor.alias = reactorAlias
  80.         reactor.device = peripheral.wrap(reactorName)
  81.         reactorCollection.reactors[reactorName] = reactor
  82.     end,
  83.     getReactor = function(reactorName)
  84.         return reactorCollection.reactors[reactorName]
  85.     end,
  86.     getReactors = function(reactorType)
  87.         if reactorType == nil then
  88.             return reactorCollection.reactors
  89.         else
  90.             local foundReactors = {}
  91.             for reactorKey, reactorValue in pairs(reactorCollection.reactors) do
  92.                 if reactorCollection.reactors[reactorKey].use == reactorType then
  93.                     foundReactors[reactorKey] = reactorCollection.reactors[reactorKey]
  94.                 end
  95.             end
  96.  
  97.             return foundReactors
  98.         end
  99.     end,
  100. }
  101.  
  102. turbineCollection = {
  103.     turbines = {},
  104.     addTurbine = function(turbineName, turbineAlias, reactors)
  105.         local turbine = {}
  106.         turbine.name = turbineName
  107.         turbine.alias = turbineAlias
  108.         turbine.reactors = reactors
  109.         turbine.device = peripheral.wrap(turbineName)
  110.         turbineCollection.turbines[turbineName] = turbine
  111.     end,
  112.     getTurbine = function(turbineName)
  113.         return turbineCollection.turbines[turbineName]
  114.     end,
  115.     getTurbines = function(turbineType)
  116.         if turbineType == nil then
  117.             return turbineCollection.turbines
  118.         else
  119.             local foundTurbines = {}
  120.             for turbineKey, turbineValue in pairs(turbineCollection.turbines) do
  121.                 if turbineCollection.turbines[turbineKey].use == turbineType then
  122.                     foundTurbines[turbineKey] = turbineCollection.turbines[turbineKey]
  123.                 end
  124.             end
  125.  
  126.             return foundTurbines
  127.         end
  128.     end,
  129. }
  130.  
  131.  
  132.  
  133. monitorCollection.addMonitor("monitor_0", "ReactorMonitor", "reactors")
  134. monitorCollection.addMonitor("monitor_1", "ReactorMonitor", "reactors")
  135. monitorCollection.addMonitor("monitor_2", "ReactorMonitor", "reactors")
  136. --monitorCollection.addMonitor("monitor_3", "ReactorMonitor", "reactors")
  137. --monitorCollection.addMonitor("monitor_4", "ReactorMonitor", "reactors")
  138. --monitorCollection.addMonitor("monitor_5", "ReactorMonitor", "reactors")
  139. --monitorCollection.addMonitor("monitor_6", "ReactorMonitor", "reactors")
  140. --monitorCollection.addMonitor("monitor_7", "ReactorMonitor", "reactors")
  141. --monitorCollection.addMonitor("monitor_8", "ReactorMonitor", "reactors")
  142. monitorCollection.addMonitor("monitor_9", "EnergyStorageMonitor", "capacitorBanks")
  143. monitorCollection.addMonitor("monitor_10", "OverviewMonitor", "main")
  144. monitorCollection.addMonitor("monitor_11", "ReactorMonitor", "reactors")
  145. monitorCollection.addMonitor("monitor_12", "ReactorMonitor", "reactors")
  146. monitorCollection.addMonitor("monitor_13", "ReactorMonitor", "reactors")
  147. monitorCollection.addMonitor("monitor_14", "ReactorMonitor", "reactors")
  148. monitorCollection.addMonitor("monitor_15", "ReactorMonitor", "reactors")
  149. monitorCollection.addMonitor("monitor_16", "ReactorMonitor", "reactors")
  150. monitorCollection.addMonitor("monitor_17", "ReactorMonitor", "reactors")
  151.  
  152. reactorCollection.addReactor("BigReactors-Reactor_1", "Passive_01")
  153. reactorCollection.addReactor("BigReactors-Reactor_0", "Active_01")
  154. reactorCollection.addReactor("BigReactors-Reactor_2", "Active_02")
  155. reactorCollection.addReactor("BigReactors-Reactor_3", "Active_03")
  156.  
  157. turbineCollection.addTurbine("BigReactors-Turbine_0", "Active_01", {"BigReactors-Reactor_0"})
  158. turbineCollection.addTurbine("BigReactors-Turbine_1", "Active_02", {"BigReactors-Reactor_2"})
  159. turbineCollection.addTurbine("BigReactors-Turbine_2", "Active_03", {"BigReactors-Reactor_3"})
  160.  
  161. capacitorBankCollection.addcapacitorBank("tile_blockcapacitorbank_name_2", "Active_01", 31, 5000000, {"BigReactors-Turbine_0"}, nil)
  162. capacitorBankCollection.addcapacitorBank("tile_blockcapacitorbank_name_1", "Passive_01", 9, 5000000, nil, {"BigReactors-Reactor_1"})
  163. capacitorBankCollection.addcapacitorBank("tile_blockcapacitorbank_name_3", "Active_02",64, 5000000, {"BigReactors-Turbine_1"}, nil)
  164. capacitorBankCollection.addcapacitorBank("tile_blockcapacitorbank_name_4", "Active_03",64, 5000000, {"BigReactors-Turbine_2"}, nil)
  165.  
  166.  
  167. monitors = monitorCollection.getMonitors()
  168. for monitorKey, monitorValue in pairs(monitors) do
  169.     local monitor = monitors[monitorKey]
  170.     monitor.device.clear()
  171. end
  172.  
  173. capacitorBanks = capacitorBankCollection.capacitorBanks
  174.  
  175. while true do
  176.     for capacitorBankKey, capacitorBankValue in pairs(capacitorBanks) do
  177.         if capacitorBanks[capacitorBankKey].reactors ~= nil then
  178.             local fillpercentage = 100 * (capacitorBanks[capacitorBankKey].device.getEnergyStored() * capacitorBanks[capacitorBankKey].count)/(capacitorBanks[capacitorBankKey].capacity * capacitorBanks[capacitorBankKey].count)
  179.  
  180.             if(fillpercentage < 10) then
  181.                 for reactorNameIndex = 1, #capacitorBanks[capacitorBankKey].reactors do
  182.                     local reactor = reactorCollection.getReactor(capacitorBanks[capacitorBankKey].reactors[reactorNameIndex])
  183.  
  184.                     if reactor.device.getActive() == false then
  185.                         reactor.device.setActive(true)
  186.                     end
  187.                 end
  188.             end
  189.  
  190.             if(fillpercentage > 90) then
  191.                 for reactorNameIndex = 1, #capacitorBanks[capacitorBankKey].reactors do
  192.                     local reactor = reactorCollection.getReactor(capacitorBanks[capacitorBankKey].reactors[reactorNameIndex])
  193.                     if reactor.device.getActive() == true then
  194.                         reactor.device.setActive(false)
  195.                     end
  196.                 end
  197.             end
  198.  
  199.         end
  200.  
  201.         if capacitorBanks[capacitorBankKey].turbines ~= nil then
  202.             local fillpercentage = 100 * (capacitorBanks[capacitorBankKey].device.getEnergyStored() * capacitorBanks[capacitorBankKey].count)/(capacitorBanks[capacitorBankKey].capacity * capacitorBanks[capacitorBankKey].count)
  203.  
  204.             if(fillpercentage < 10) then
  205.                 for turbineNameIndex = 1, #capacitorBanks[capacitorBankKey].turbines do
  206.                     local turbine = turbineCollection.getTurbine(capacitorBanks[capacitorBankKey].turbines[turbineNameIndex])
  207.                     if turbine.device.getActive() == false then
  208.                         turbine.device.setActive(true)
  209.                         turbine.device.setInductorEngaged(true)
  210.                     end
  211.  
  212.                     for reactorNameIndex = 1, #turbine.reactors do
  213.                         local reactor = reactorCollection.getReactor(turbine.reactors[reactorNameIndex])
  214.  
  215.                         if reactor.device.getActive() == false then
  216.                             reactor.device.setActive(true)
  217.                         end
  218.                     end
  219.  
  220.                 end
  221.             end
  222.  
  223.             if(fillpercentage > 90) then
  224.                 for turbineNameIndex = 1, #capacitorBanks[capacitorBankKey].turbines do
  225.                     local turbine = turbineCollection.getTurbine(capacitorBanks[capacitorBankKey].turbines[turbineNameIndex])
  226.                    
  227.                     if turbine.device.getActive() == true then
  228.                         turbine.device.setActive(false)
  229.                         turbine.device.setInductorEngaged(false)
  230.                     end
  231.  
  232.                     for reactorNameIndex = 1, #turbine.reactors do
  233.                         local reactor = reactorCollection.getReactor(turbine.reactors[reactorNameIndex])
  234.  
  235.                         if reactor.device.getActive() == true then
  236.                             reactor.device.setActive(false)
  237.                         end
  238.                     end
  239.  
  240.                 end
  241.             end
  242.  
  243.         end
  244.  
  245.     end
  246.  
  247.     local mainmonitors = monitorCollection.getMonitors("main")
  248.     for monitorKey, monitorValue in pairs(mainmonitors) do
  249.         mainmonitor = mainmonitors[monitorKey]
  250.         capacitorBanks = capacitorBankCollection.getcapacitorBanks()
  251.  
  252.         mainmonitor.device.setCursorPos(1, 1)
  253.         mainmonitor.device.write("Capacitor Banks")
  254.  
  255.         local line = 2
  256.         for capacitorBankKey, capacitorBankValue in pairs(capacitorBanks) do
  257.             --mainmonitor.device.clearLine()
  258.             local fillpercentage = 1 + 20 * (capacitorBanks[capacitorBankKey].device.getEnergyStored() * capacitorBanks[capacitorBankKey].count)/(capacitorBanks[capacitorBankKey].capacity * capacitorBanks[capacitorBankKey].count)
  259.  
  260.             mainmonitor.device.setBackgroundColor(colors.gray)
  261.             for i = 1,20 do
  262.                 mainmonitor.device.setCursorPos(i, line)
  263.                 mainmonitor.device.write(" ")
  264.                 i = i + 1
  265.             end
  266.  
  267.             mainmonitor.device.setBackgroundColor(colors.red)
  268.             for i = 1,fillpercentage do
  269.                 mainmonitor.device.setCursorPos(i, line)
  270.                 mainmonitor.device.write(" ")
  271.                 i = i + 1
  272.             end
  273.  
  274.             mainmonitor.device.setBackgroundColor(colors.black)
  275.             mainmonitor.device.setTextColor(colors.white)
  276.             mainmonitor.device.setCursorPos(22,line)
  277.             mainmonitor.device.write(formatReadableSIUnit(capacitorBanks[capacitorBankKey].device.getEnergyStored() * capacitorBanks[capacitorBankKey].count).."/"..formatReadableSIUnit(capacitorBanks[capacitorBankKey].capacity * capacitorBanks[capacitorBankKey].count))
  278.             line = line + 1
  279.         end
  280.  
  281.     end
  282. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement