auto output mode - bumps target when saturation >90/95%

This commit is contained in:
2026-07-18 21:53:11 +02:00
parent a79ca56e97
commit 5014db8bda
+37 -4
View File
@@ -14,6 +14,7 @@ local version = 0.3
local autoInputGate = 1 local autoInputGate = 1
local curInputGate = 222000 local curInputGate = 222000
local targetOutput local targetOutput
local autoOutputGate = 0
local mon, monitor, monX, monY local mon, monitor, monX, monY
@@ -153,6 +154,7 @@ function save_config()
sw.writeLine(autoInputGate) sw.writeLine(autoInputGate)
sw.writeLine(curInputGate) sw.writeLine(curInputGate)
sw.writeLine(targetOutput or 0) sw.writeLine(targetOutput or 0)
sw.writeLine(autoOutputGate or 0)
sw.close() sw.close()
end end
@@ -161,6 +163,7 @@ function load_config()
autoInputGate = tonumber(sr.readLine()) autoInputGate = tonumber(sr.readLine())
curInputGate = tonumber(sr.readLine()) curInputGate = tonumber(sr.readLine())
targetOutput = tonumber(sr.readLine()) targetOutput = tonumber(sr.readLine())
autoOutputGate = tonumber(sr.readLine())
sr.close() sr.close()
end end
@@ -171,6 +174,9 @@ end
if not targetOutput or targetOutput == 0 then if not targetOutput or targetOutput == 0 then
targetOutput = fluxgate.getSignalLowFlow() targetOutput = fluxgate.getSignalLowFlow()
end end
if not autoOutputGate then
autoOutputGate = 0
end
save_config() save_config()
@@ -229,6 +235,8 @@ function reactorControl()
drawTerminalText(1, i, "Input Gate", inputFluxgate.getSignalLowFlow()) drawTerminalText(1, i, "Input Gate", inputFluxgate.getSignalLowFlow())
i = i + 1 i = i + 1
drawTerminalText(1, i, "Target Output", targetOutput) drawTerminalText(1, i, "Target Output", targetOutput)
i = i + 1
drawTerminalText(1, i, "Auto Output", autoOutputGate == 1 and "ON" or "OFF")
-- Reactor Control Logic -- Reactor Control Logic
if emergencyCharge then if emergencyCharge then
@@ -363,13 +371,18 @@ function buttonControls()
local sLength2 = (sLength+12+(string.len("Reboot"))+1) local sLength2 = (sLength+12+(string.len("Reboot"))+1)
button.setButton("reboot", "Reboot", rebootSystem, sLength+12, 28, sLength2, 30, 0, 0, colors.blue) button.setButton("reboot", "Reboot", rebootSystem, sLength+12, 28, sLength2, 30, 0, 0, colors.blue)
local sLength3 = 4+(string.len("Back")+1) local autoLabel = autoOutputGate == 1 and "Auto Out:ON" or "Auto Out:OFF"
button.setButton("back", "Back", buttonMain, 4, 32, sLength3, 34, 0, 0, colors.blue) local sLength3 = sLength2 + 11 + string.len(autoLabel)
button.setButton("autoOut", autoLabel, toggleAutoOutput, sLength2+11, 28, sLength3, 30, 0, 0, autoOutputGate == 1 and colors.green or colors.red)
local sLength4 = 4+(string.len("Back")+1)
button.setButton("back", "Back", buttonMain, 4, 32, sLength4, 34, 0, 0, colors.blue)
button.screen() button.screen()
end end
function changeOutputValue(num, val) function changeOutputValue(num, val)
autoOutputGate = 0
if val == 1 then if val == 1 then
targetOutput = math.min(targetOutput + num, 2000000000) targetOutput = math.min(targetOutput + num, 2000000000)
else else
@@ -385,6 +398,12 @@ function changeOutputValue(num, val)
save_config() save_config()
end end
function toggleAutoOutput()
autoOutputGate = autoOutputGate == 1 and 0 or 1
updateReactorInfo()
save_config()
end
function outputMenu() function outputMenu()
if currentMenu == "output" then return end if currentMenu == "output" then return end
@@ -481,6 +500,19 @@ function updateReactorInfo()
if not ri then return end if not ri then return end
if ri.status == "running" and autoOutputGate == 1 then
local satPercent = getPercentage(ri.energySaturation, ri.maxEnergySaturation)
local currentOutput = fluxgate.getSignalLowFlow()
if satPercent > 95 then
local boost = math.max(10000, math.floor(currentOutput * 0.05))
targetOutput = math.min(targetOutput + boost, 2000000000)
elseif satPercent > 90 then
local boost = math.max(5000, math.floor(currentOutput * 0.02))
targetOutput = math.min(targetOutput + boost, 2000000000)
end
end
drawUpdatedText(4, 4, "Status:", reactorStatus(ri.status)[1], reactorStatus(ri.status)[2], colors.white) drawUpdatedText(4, 4, "Status:", reactorStatus(ri.status)[1], reactorStatus(ri.status)[2], colors.white)
drawUpdatedText(4, 5, "Generation:", f.format_int(ri.generationRate).." rf/t", colors.lime, colors.yellow) drawUpdatedText(4, 5, "Generation:", f.format_int(ri.generationRate).." rf/t", colors.lime, colors.yellow)
@@ -488,12 +520,13 @@ function updateReactorInfo()
drawUpdatedText(4, 7, "Temperature:", f.format_int(ri.temperature).."C", tempColor, colors.lightGray) drawUpdatedText(4, 7, "Temperature:", f.format_int(ri.temperature).."C", tempColor, colors.lightGray)
local currentFlow = fluxgate.getSignalLowFlow() local currentFlow = fluxgate.getSignalLowFlow()
local autoTag = autoOutputGate == 1 and " [AUTO]" or " [MAN]"
local outputText local outputText
if currentFlow ~= targetOutput then if currentFlow ~= targetOutput then
local dir = currentFlow < targetOutput and " +" or " -" local dir = currentFlow < targetOutput and " +" or " -"
outputText = f.format_int(currentFlow).." > "..f.format_int(targetOutput).." rf/t"..dir outputText = f.format_int(currentFlow).." > "..f.format_int(targetOutput).." rf/t"..dir..autoTag
else else
outputText = f.format_int(currentFlow).." rf/t" outputText = f.format_int(currentFlow).." rf/t"..autoTag
end end
drawUpdatedText(4, 9, "Output:", outputText, colors.lightBlue, colors.cyan) drawUpdatedText(4, 9, "Output:", outputText, colors.lightBlue, colors.cyan)
drawUpdatedText(4, 10, "Input:", f.format_int(inputFluxgate.getSignalLowFlow()).." rf/t", colors.lightBlue, colors.cyan) drawUpdatedText(4, 10, "Input:", f.format_int(inputFluxgate.getSignalLowFlow()).." rf/t", colors.lightBlue, colors.cyan)