Add files via upload

This commit is contained in:
StormFusions
2021-05-15 15:43:16 +01:00
committed by GitHub
parent a2cc2ac0f6
commit 724f1a99b6
3 changed files with 540 additions and 0 deletions
+367
View File
@@ -0,0 +1,367 @@
os.loadAPI("lib/f.lua")
os.loadAPI("lib/button.lua")
local reactorSide = "back"
local fluxgateSide = "left"
local targetStrength = 50
local maxTemp = 8000
local safeTemp = 3000
local lowFieldPer = 15
local activateOnCharge = true
local version = 0.1
local autoInputGate = 1
local curInputGate = 222000
local mon, monitor, monX, monY
local reactor
local fluxgate
local inputFluxgate
local ri
local action = "None since reboot"
local actioncolor = colors.gray
local emergencyCharge = false
local emergencyTemp = false
monitor = f.periphSearch("monitor")
inputFluxgate = f.periphSearch("flux_gate")
fluxgate = peripheral.wrap(fluxgateSide)
reactor = peripheral.wrap(reactorSide)
if monitor == null then
error("No valid monitor was found")
end
if fluxgate == null then
error("No valid fluxgate was found")
end
if reactor == null then
error("No reactor was found")
end
monX, monY = monitor.getSize()
mon = {}
mon.monitor, mon.X, mon.Y = monitor, monX, monY
function mon.clear()
mon.monitor.setBackgroundColor(colors.black)
mon.monitor.clear()
mon.monitor.setCursorPos(1,1)
button.screen()
end
mon.clear()
function save_config()
sw = fs.open("reactorconfig.txt", "w")
sw.writeLine(version)
sw.writeLine(autoInputGate)
sw.writeLine(curInputGate)
sw.close()
end
function load_config()
sr = fs.open("reactorconfig.txt", "r")
version = sr.readLine()
autoInputGate = tonumber(sr.readLine())
curInputGate = tonumber(sr.readLine())
sr.close()
end
if fs.exists("reactorconfig.txt") == false then
save_config()
else
load_config()
end
function reset()
term.clear()
term.setCursorPos(1,1)
end
function reactorStatus(r)
local tbl = {}
if r == "running" then
tbl = {"Online", colors.green}
elseif r == "cold" then
tbl = {"Offline", colors.gray}
elseif r =="warming_up" then
tbl = {"Charging", colors.orange}
elseif r == "cooling" then
tbl = {"Cooling Down", colors.blue}
else
tbl = {"Shutting Down", colors.red}
end
return tbl
end
function reactorControl()
ri = reactor.getReactorInfo()
if ri == nil then
error("Reactor not setup correctly")
end
for k, v in pairs(ri) do
print(k..": "..tostring(v))
end
print("Output Gate: ", fluxgate.getSignalLowFlow())
print("Input Gate: ", inputFluxgate.getSignalLowFlow())
if emergencyCharge == true then
reactor.chargeReactor()
end
if ri.status == "warming_up" then
inputFluxgate.setSignalLowFlow(900000)
emergencyCharge = false
end
if emergencyTemp == true and ri.status == "stopping" and ri.temperature < safeTemp then
reactor.activateReactor()
emergencyTemp = false
end
if ri.status == "warming_up" and activateOnCharge == true then
reactor.activateOnCharge()
end
if ri.status == "running" then
if autoInputGate == 1 then
fluxval = ri.fieldDrainRate / (1 - (targetStrength/100))
print("Target Gate: "..fluxval)
inputFluxgate.setSignalLowFlow(fluxval)
else
inputFluxgate.setSignalLowFlow(curInputGate)
end
end
--safe guards
local fuelPercent
fuelPercent = 100 - math.ceil(ri.fuelConversion / ri.maxFuelConversion * 10000)*.01
local fieldPercent
fieldPercent = math.ceil(ri.fieldStrength / ri.maxFieldStrength * 10000)*.01
if fuelPercent <= 10 then
reactor.stopReactor()
actioncolor = colors.red
action = "Fuel is low. Refuel"
ActionMenu()
end
if fieldPercent <= lowFieldPer and ri.status == "running" then
actioncolor = colors.red
action = "Field str < "..lowFieldPer.."%"
ActionMenu()
reactor.stopReactor()
reactor.chargeReactor()
emergencyCharge = true
end
if ri.temperature > maxTemp then
reactor.stopReactor()
actioncolor = colors.red
action = "Reactor overheated"
ActionMenu()
emergencyTemp = true
end
sleep(0.2)
end
local MenuText = "Loading..."
function toggleReactor()
ri = reactor.getReactorInfo()
if ri.status == "running" then
reactor.stopReactor()
elseif ri.status == "stopping" then
reactor.activateReactor()
else
reactor.chargeReactor()
end
end
function ActionMenu()
button.setButton("action", action, buttonMain, 2, 23, monX-1, 25, 0, 0, colors.red)
end
function buttonControls()
mon.clear()
button.clearTable()
MenuText = "CONTROLS"
local sLength = 4+(string.len("Toggle Reactor")+1)
button.setButton("toggle", "Toggle Reactor", toggleReactor, 4, 28, sLength, 30, 0, 0, colors.blue)
local sLength2 = (sLength+10+(string.len("Reboot")+1))
button.setButton("reboot", "Reboot", rebootSystem, sLength+10, 28, sLength2, 30, 0, 0, colors.blue)
local sLength3 = 4+(string.len("Back")+1)
button.setButton("back", "Back", buttonMain, 4, 32, sLength3, 34, 0, 0, colors.blue)
button.screen()
end
function changeOutputValue(num, val)
local cFlow = fluxgate.getSignalLowFlow()
if val == 1 then
cFlow = cFlow+num
else
cFlow = cFlow-num
end
fluxgate.setSignalLowFlow(cFlow)
end
function outputMenu()
button.clearTable()
MenuText = "OUTPUT"
local sLengthX = monX-3-(string.len(">>>")+1)
local sLength = sLengthX+string.len(">>>")+1
button.setButton("+100,000", ">>>", changeOutputValue, sLengthX, 28, sLength, 30, 100000, 1, colors.blue)
local sLengthX2 = sLengthX-3-string.len(">>")
local sLength2 = sLengthX2+string.len(">>")+1
button.setButton("+10,000", ">>", changeOutputValue, sLengthX2, 28, sLength2, 30, 10000, 1, colors.blue)
local sLengthX3 = sLengthX2-3-string.len(">")
local sLength3 = sLengthX3+string.len(">")+1
button.setButton("+1,000", ">", changeOutputValue, sLengthX3, 28, sLength3, 30, 1000, 1, colors.blue)
local nLength = 4+(string.len("<<<")+1)
button.setButton("-100,000", "<<<", changeOutputValue, 4, 28, nLength, 30, 100000, 0, colors.blue)
local nLength2 = nLength+2+(string.len("<<")+1)
button.setButton("-10,000", "<<", changeOutputValue, nLength+2, 28, nLength2, 30, 10000, 0, colors.blue)
local nLength3 = nLength2+2+(string.len("<")+1)
button.setButton("-1,000", "<", changeOutputValue, nLength2+2, 28, nLength3, 30, 1000, 0, colors.blue)
local sLength4 = 4+(string.len("Back")+1)
button.setButton("back", "Back", buttonMain, 4, 32, sLength4, 34, 0, 0, colors.blue)
end
function buttonMain()
mon.clear()
button.clearTable()
MenuText = "MAIN MENU"
local sLength = 4+(string.len("Controls")+1)
button.setButton("controls", "Controls", buttonControls, 4, 28, sLength, 30, 0, 0, colors.blue)
local sLength2 = (sLength+13+(string.len("Output"))+1)
button.setButton("output", "Output", outputMenu, sLength+13, 28, sLength2, 30, 0, 0, colors.blue)
button.screen()
end
buttonMain()
function reactorInfoScreen()
reset()
mon.clear()
f.draw_text(mon, 2, 38, "Made by: StormFusions v"..version, colors.gray, colors.black)
--Info Box
f.draw_line(mon, 2, 22, monX-2, colors.gray)
f.draw_line(mon, 2, 2, monX-2, colors.gray)
f.draw_line_y(mon, 2, 2, 22, colors.gray)
f.draw_line_y(mon, monX-1, 2, 22, colors.gray)
f.draw_text(mon, 4, 2, " INFO ", colors.white, colors.black)
--Button Box
f.draw_line(mon, 2, 26, monX-2, colors.gray)
f.draw_line(mon, 2, monY-1, monX-2, colors.gray)
f.draw_line_y(mon, 2, 26, monY-1, colors.gray)
f.draw_line_y(mon, monX-1, 26, monY-1, colors.gray)
f.draw_text(mon, 4, 26, " "..MenuText.." ", colors.white, colors.black)
--f.draw_text(mon, 5, 28, MenuText, colors.white, colors.black)
ri = reactor.getReactorInfo()
local stat = reactorStatus(ri.status)
f.draw_text_lr(mon, 4, 4, 3, "Status:", stat[1], colors.white, stat[2], colors.black)
f.draw_text_lr(mon, 4, 5, 3, "Generation:", f.format_int(ri.generationRate).." rf/t", colors.white, colors.lime, colors.black)
local tempColor = colors.red
if ri.temperature <= 5000 then tempColor = colors.green end
if ri.temperature >= 5000 and ri.temperature <= 6500 then tempColor = colors.orange end
f.draw_text_lr(mon, 4, 7, 3, "Temperature:", f.format_int(ri.temperature).."C", colors.white, tempColor, colors.black)
f.draw_text_lr(mon, 4, 9, 3, "Output Gate:", f.format_int(fluxgate.getSignalLowFlow()).." rf/t", colors.white, colors.blue, colors.black)
f.draw_text_lr(mon, 4, 10, 3, "Input Gate:", f.format_int(inputFluxgate.getSignalLowFlow()).." rf/t", colors.white, colors.blue, colors.black)
local satPercent
satPercent = math.ceil(ri.energySaturation / ri.maxEnergySaturation * 10000)*.01
f.draw_text_lr(mon, 4, 12, 3, "Energy Saturation:", satPercent.."%", colors.white, colors.green, colors.black)
f.progress_bar(mon, 4, 13, monX-7, satPercent, 100, colors.green, colors.white)
local fieldPercent, fieldColor
fieldPercent = math.ceil(ri.fieldStrength / ri.maxFieldStrength * 10000)*.01
fieldColor = colors.red
if fieldPercent >= 50 then fieldColor = colors.blue end
if fieldPercent < 50 and fieldPercent > 30 then fieldColor = colors.orange end
if autoInputGate == 1 then
f.draw_text_lr(mon, 4, 15, 3, "Field Strength T:"..targetStrength, fieldPercent.."%", colors.white, fieldColor, colors.black)
else
f.draw_text_lr(mon, 4, 15, 3, "Field Strength:", fieldPercent.."%", colors.white, fieldColor, colors.black)
end
f.progress_bar(mon, 4, 16, monX-7, fieldPercent, 100, fieldColor, colors.white)
local fuelPercent, fuelColor
fuelPercent = 100 - math.ceil(ri.fuelConversion / ri.maxFuelConversion * 10000)*.01
fuelColor = colors.red
if fuelPercent >=70 then fuelColor = colors.green end
if fuelPercent < 70 and fuelPercent > 30 then fuelColor = colors.orange end
f.draw_text_lr(mon, 4, 18, 3, "Fuel:", fuelPercent.."%", colors.white, fuelColor, colors.black)
f.progress_bar(mon, 4, 19, monX-7, fuelPercent, 100, fuelColor, colors.white)
sleep(1.25)
while true do
parallel.waitForAny(reactorInfoScreen, reactorControl, button.clickEvent)
end
end
mon.monitor.setTextScale(0.5)
reactorInfoScreen()