--HD & IPJ's KickAss Reactor Control v1.0.0 ------------------------------------------- -- Abbreviations monitor = peripheral.wrap("monitor_26") t1 = peripheral.wrap("BigReactors-Turbine_18") t2 = peripheral.wrap("BigReactors-Turbine_24") t3 = peripheral.wrap("BigReactors-Turbine_25") t4 = peripheral.wrap("BigReactors-Turbine_23") t5 = peripheral.wrap("BigReactors-Turbine_19") r = peripheral.wrap("back") -- Colors headingColor = colors.blue inert = colors.yellow positive = colors.lime negative = colors.red backgroundColor = colors.gray windowColor = colors.black -- Rounding function roundPercent(num, idp) local mult = 10^(idp or 0) return math.floor((num / 1782) * mult + 0.5 / mult)/10 end function round(num, idp) local mult = 10^(idp or 0) return math.floor(num * mult + 0.5) / mult end -- Overview Component Windows function drawOverView() --Defines Main GUI -- Main window Heading monitor.setCursorPos(1,1) monitor.setBackgroundColor(backgroundColor) monitor.clear() monitor.setTextScale(2) monitor.setTextColor(positive) monitor.write(" HD & IPJ's KickAss Reactor Control") -- Windows -- Reactor levels display Window reactorDisplay = window.create(monitor, 2, 3, 17, 10) reactorDisplay.setBackgroundColor(windowColor) reactorDisplay.setVisible(true) --heading reactorDisplay.setCursorPos(1,1) reactorDisplay.setTextColor(headingColor) reactorDisplay.write("Reactor") -- total rf/t output display window rfOutDisplay = window.create(monitor, 2, 15, 17, 3) rfOutDisplay.setBackgroundColor(windowColor) rfOutDisplay.setVisible(true) --heading rfOutDisplay.setCursorPos(1,1) rfOutDisplay.setTextColor(colors.blue) rfOutDisplay.write("Total Output") monitor.setTextColor(positive) monitor.setCursorPos(2,17) output = round( (t1.getEnergyProducedLastTick() +t2.getEnergyProducedLastTick() +t3.getEnergyProducedLastTick() +t4.getEnergyProducedLastTick() +t5.getEnergyProducedLastTick() ) / 1000 , 2) monitor.write(output.." kRF/t") -- Turbine Window turbineDisplay = window.create(monitor, 21, 3, 13, 15) turbineDisplay.setBackgroundColor(windowColor) turbineDisplay.setVisible(true) --heading turbineDisplay.setTextColor(headingColor) turbineDisplay.setCursorPos(21,3) turbineDisplay.write("Turbine 1") turbineDisplay.setCursorPos(21,6) turbineDisplay.write("Turbine 2") turbineDisplay.setCursorPos(21,9) turbineDisplay.write("Turbine 3") turbineDisplay.setCursorPos(21,12) turbineDisplay.write("Turbine 4") turbineDisplay.setCursorPos(21,15) turbineDisplay.write("Turbine 5") -- Bottom Menu bar Window menuBar = window.create(monitor, 2,19, 34, 2) menuBar.setBackgroundColor( windowColor ) menuBar.setVisible(true) end -- end drawOverView() -- Reactor Functions ` -- Reactor Steam function getSteam() steam = r.getHotFluidProducedLastTick() monitor.setCursorPos(2,5) reactorDisplay.setTextColor(inert) reactorDisplay.write("Steam: ") if steam < 9500 then reactorDisplay.setTextColor(negative) else reactorDisplay.setTextColor(positive) end reactorDisplay.write(steam) reactorDisplay.setTextColor(inert) reactorDisplay.write(" mB") end -- Reactor Core Temp function getCoreTemp() coreTemp = r.getFuelTemperature() monitor.setCursorPos(2,7) monitor.setTextColor(inert) monitor.write("CoreTemp: "..math.floor(coreTemp).."C") getSteam() end -- Reactor Case Temp function getCaseTemp() temp = r.getCasingTemperature() monitor.setCursorPos(2,8) monitor.setTextColor(inert) monitor.write("CaseTemp: "..math.floor(temp).."C") getCoreTemp() end -- Reactor Reactivity function getReactivity() reactivity = math.floor(r.getFuelReactivity()) monitor.setCursorPos(2,10) monitor.setTextColor(inert) monitor.write("Reactivity: "..reactivity.."%") getCaseTemp() end -- Reactor Fuel Use function getFuelUse() fuelUsed = round(r.getFuelConsumedLastTick(),2) monitor.setCursorPos(2,11) monitor.setTextColor(inert) monitor.write("FuelUse: "..fuelUsed.."mB") getReactivity() end -- Turbine Functions -- determines text color for speed function turbineSpeedColor(amount) if amount < 1750 then return negative else return positive end end -- Turbine Speed function getTurbine() drawOverView() speed = t1.getRotorSpeed() rf = math.floor(t1.getEnergyProducedLastTick()) monitor.setTextColor(inert) monitor.setCursorPos(21,4) monitor.write("Speed: ") monitor.setTextColor( turbineSpeedColor(speed) ) monitor.write(roundPercent(speed,3).."%") monitor.setTextColor(inert) monitor.setCursorPos(21,5) monitor.write("RF/t: "..rf) speed = t2.getRotorSpeed() rf = math.floor(t2.getEnergyProducedLastTick()) monitor.setTextColor(inert) monitor.setCursorPos(21,7) monitor.write("Speed: ") monitor.setTextColor( turbineSpeedColor(speed) ) monitor.write(roundPercent(speed,3).."%") monitor.setTextColor(inert) monitor.setCursorPos(21,8) monitor.write("RF/t: "..rf) speed = t3.getRotorSpeed() rf = math.floor(t3.getEnergyProducedLastTick()) monitor.setTextColor(inert) monitor.setCursorPos(21,10) monitor.write("Speed: ") monitor.setTextColor( turbineSpeedColor(speed) ) monitor.write(roundPercent(speed,3).."%") monitor.setTextColor(inert) monitor.setCursorPos(21,11) monitor.write("RF/t: "..rf) speed = t4.getRotorSpeed() rf = math.floor(t4.getEnergyProducedLastTick()) monitor.setTextColor(inert) monitor.setCursorPos(21,13) monitor.write("Speed: ") monitor.setTextColor( turbineSpeedColor(speed) ) monitor.write(roundPercent(speed,3).."%") monitor.setTextColor(inert) monitor.setCursorPos(21,14) monitor.write("RF/t: "..rf) speed = t5.getRotorSpeed() rf = math.floor(t5.getEnergyProducedLastTick()) monitor.setTextColor(inert) monitor.setCursorPos(21,16) monitor.write("Speed: ") monitor.setTextColor( turbineSpeedColor(speed) ) monitor.write(roundPercent(speed,3).."%") monitor.setTextColor(inert) monitor.setCursorPos(21,17) monitor.write("RF/t: "..rf) getFuelUse() end -- end turbineSpeed -- Loop Functions -- Starts refreshing text function startup() while true do getTurbine() menuListener() end end -- Turns the outputwindows setVisible( false ) function menuListener()local timeout = os.startTimer(1) while true do event = {os.pullEvent()} if event[1] == "monitor_touch" then --handle monitor touch print(event[1]) reactorDisplay.setVisible(false) rfOutDisplay.setVisible(false) turbineDisplay.setVisible(false) monitor.setCursorPos(2,1) monitor.clear() os.sleep(0.5) while true do local event = os.pullEvent("monitor_touch") if event == "monitor_touch" then break end end elseif event[1] == "timer" and event[2] == timeout then break end end end -- Start Of execution -- Draws main overview windows while true do startup() end