Add touch control for test clutch
This commit is contained in:
@@ -36,6 +36,13 @@ Drehzahl, Kapazitaet, Verbrauch und Auslastung liest es aus den Netzwerkdaten de
|
|||||||
Die Monitoraufloesung wird automatisch erkannt und die groesste passende Textskalierung gewaehlt.
|
Die Monitoraufloesung wird automatisch erkannt und die groesste passende Textskalierung gewaehlt.
|
||||||
Ein Boiler ohne Wasserversorgung oder angeschlossene Engine wird als IDLE angezeigt, selbst wenn
|
Ein Boiler ohne Wasserversorgung oder angeschlossene Engine wird als IDLE angezeigt, selbst wenn
|
||||||
eine Campfire- oder Blaze-Burner-Waermequelle erkannt wird.
|
eine Campfire- oder Blaze-Burner-Waermequelle erkannt wird.
|
||||||
|
|
||||||
|
### Clutch-Teststeuerung
|
||||||
|
|
||||||
|
Die rechte Seite des Computers ist als direkter Redstone-Ausgang fuer eine Test-Clutch
|
||||||
|
konfiguriert. Der Touch-Button auf dem Advanced Monitor schaltet diesen Ausgang ohne
|
||||||
|
Invertierung zwischen `CLUTCH SIGNAL: OFF` und `CLUTCH SIGNAL: ON` um. Die Verbindung kann
|
||||||
|
direkt mit Redstone oder drahtlos ueber ein abgestimmtes Paar Create Redstone Links erfolgen.
|
||||||
Die Boiler-Zuordnung erfolgt nach den internen Peripheral-Namen; die drei Block Reader sollten
|
Die Boiler-Zuordnung erfolgt nach den internen Peripheral-Namen; die drei Block Reader sollten
|
||||||
deshalb in der Reihenfolge Boiler 1 bis 3 an das Wired Network angeschlossen werden. Jeder Block
|
deshalb in der Reihenfolge Boiler 1 bis 3 an das Wired Network angeschlossen werden. Jeder Block
|
||||||
Reader muss auf den Controller-Tank des zugeordneten Boiler-Multiblocks zeigen.
|
Reader muss auf den Controller-Tank des zugeordneten Boiler-Multiblocks zeigen.
|
||||||
|
|||||||
@@ -4,7 +4,10 @@
|
|||||||
local EXPECTED_BOILERS = 3
|
local EXPECTED_BOILERS = 3
|
||||||
local REFRESH_SECONDS = 1
|
local REFRESH_SECONDS = 1
|
||||||
local MIN_WIDTH = 38
|
local MIN_WIDTH = 38
|
||||||
local MIN_HEIGHT = 11
|
local MIN_HEIGHT = 14
|
||||||
|
local CLUTCH_OUTPUT_SIDE = "right"
|
||||||
|
|
||||||
|
local clutchButton = { x1 = 0, x2 = 0, y = 0 }
|
||||||
|
|
||||||
local monitor = peripheral.find("monitor")
|
local monitor = peripheral.find("monitor")
|
||||||
if not monitor then
|
if not monitor then
|
||||||
@@ -131,6 +134,32 @@ local function formatInteger(value)
|
|||||||
return table.concat(parts, ".")
|
return table.concat(parts, ".")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function drawClutchButton(height)
|
||||||
|
local width = monitor.getSize()
|
||||||
|
local signal = redstone.getOutput(CLUTCH_OUTPUT_SIDE)
|
||||||
|
local label = signal and " CLUTCH SIGNAL: ON " or " CLUTCH SIGNAL: OFF "
|
||||||
|
local x = math.max(1, math.floor((width - #label) / 2) + 1)
|
||||||
|
local y = math.max(13, height - 1)
|
||||||
|
|
||||||
|
clutchButton.x1 = x
|
||||||
|
clutchButton.x2 = math.min(width, x + #label - 1)
|
||||||
|
clutchButton.y = y
|
||||||
|
|
||||||
|
monitor.setCursorPos(1, y)
|
||||||
|
monitor.setBackgroundColor(colors.black)
|
||||||
|
monitor.write((" "):rep(width))
|
||||||
|
monitor.setCursorPos(x, y)
|
||||||
|
monitor.setBackgroundColor(signal and colors.orange or colors.gray)
|
||||||
|
monitor.setTextColor(colors.black)
|
||||||
|
monitor.write(label)
|
||||||
|
monitor.setBackgroundColor(colors.black)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function toggleClutchSignal()
|
||||||
|
local signal = redstone.getOutput(CLUTCH_OUTPUT_SIDE)
|
||||||
|
redstone.setOutput(CLUTCH_OUTPUT_SIDE, not signal)
|
||||||
|
end
|
||||||
|
|
||||||
local function render()
|
local function render()
|
||||||
local _, height = monitor.getSize()
|
local _, height = monitor.getSize()
|
||||||
local boilers, networks = discoverReaders()
|
local boilers, networks = discoverReaders()
|
||||||
@@ -157,13 +186,14 @@ local function render()
|
|||||||
center(9, "Reader auf Speed-/Stressometer", colors.orange)
|
center(9, "Reader auf Speed-/Stressometer", colors.orange)
|
||||||
end
|
end
|
||||||
|
|
||||||
if height >= 13 then center(height, "Nur Anzeige - keine Steuerung", colors.gray) end
|
drawClutchButton(height)
|
||||||
|
center(height, "Touch = Redstone umschalten", colors.gray)
|
||||||
monitor.setTextColor(colors.white)
|
monitor.setTextColor(colors.white)
|
||||||
monitor.setBackgroundColor(colors.black)
|
monitor.setBackgroundColor(colors.black)
|
||||||
term.setCursorPos(1, 1)
|
term.setCursorPos(1, 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
while true do
|
local function safeRender()
|
||||||
local ok, reason = pcall(render)
|
local ok, reason = pcall(render)
|
||||||
if not ok then
|
if not ok then
|
||||||
monitor.setBackgroundColor(colors.black)
|
monitor.setBackgroundColor(colors.black)
|
||||||
@@ -171,5 +201,21 @@ while true do
|
|||||||
center(1, "ANZEIGEFEHLER", colors.red)
|
center(1, "ANZEIGEFEHLER", colors.red)
|
||||||
center(3, tostring(reason), colors.orange)
|
center(3, tostring(reason), colors.orange)
|
||||||
end
|
end
|
||||||
sleep(REFRESH_SECONDS)
|
end
|
||||||
|
|
||||||
|
safeRender()
|
||||||
|
local refreshTimer = os.startTimer(REFRESH_SECONDS)
|
||||||
|
|
||||||
|
while true do
|
||||||
|
local event, first, second, third = os.pullEvent()
|
||||||
|
if event == "timer" and first == refreshTimer then
|
||||||
|
safeRender()
|
||||||
|
refreshTimer = os.startTimer(REFRESH_SECONDS)
|
||||||
|
elseif event == "monitor_touch" then
|
||||||
|
local x, y = second, third
|
||||||
|
if y == clutchButton.y and x >= clutchButton.x1 and x <= clutchButton.x2 then
|
||||||
|
toggleClutchSignal()
|
||||||
|
safeRender()
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user