diff --git a/display.lua b/display.lua index 499950b..9d68818 100644 --- a/display.lua +++ b/display.lua @@ -48,6 +48,26 @@ function display.drawDisconnectButton() term.redirect(oldterm) end +function display.drawIrisButtons() + if not config.irisEnabled then + return + end + + local oldterm = term.redirect(mon) + + -- Open iris button (green) + paintutils.drawFilledBox(2, 17, 9, 19, colors.green) + mon.setCursorPos(3, 18) + mon.write("OPEN") + + -- Close iris button (red) + paintutils.drawFilledBox(11, 17, 18, 19, colors.red) + mon.setCursorPos(12, 18) + mon.write("CLOSE") + + term.redirect(oldterm) +end + function display.drawIrisStatus() mon.setCursorPos(1, 19) mon.setBackgroundColor(colors.black) @@ -118,6 +138,7 @@ function display.screenWrite(list, fcount, fy) paintutils.drawFilledBox(23, 17, 28, 19, colors.red) mon.setCursorPos(24, 18) mon.write("Back") + display.drawIrisButtons() term.redirect(oldterm) return fcount, fy @@ -157,6 +178,7 @@ function display.selectionTabs() mon.setCursorPos(24, 18) mon.write("Back") + display.drawIrisButtons() display.drawIrisStatus() term.redirect(oldterm) end @@ -194,6 +216,9 @@ function display.showIncoming(addressName, addressString, allowed, reason) mon.setCursorPos(1, 7) mon.write(addressString) end + + display.drawIrisButtons() + display.drawIrisStatus() end function display.showEntity(entityType, entityName, allowed) @@ -253,6 +278,7 @@ function display.showConnected(destName, destAddr) paintutils.drawFilledBox(20, 17, 28, 19, colors.red) mon.setCursorPos(21, 18) mon.write("CLOSE") + display.drawIrisButtons() term.redirect(oldterm) display.drawIrisStatus() @@ -265,6 +291,7 @@ function display.showMainMenu() mon.setCursorPos(9, 1) mon.setBackgroundColor(colors.red) mon.write("press to start") + display.drawIrisButtons() display.drawIrisStatus() end @@ -313,6 +340,7 @@ function display.showPasswordPrompt() mon.setCursorPos(18, 17) mon.write("OK") + display.drawIrisButtons() term.redirect(oldterm) display.drawIrisStatus() end diff --git a/handlers.lua b/handlers.lua index 3e62902..351f405 100644 --- a/handlers.lua +++ b/handlers.lua @@ -97,6 +97,40 @@ function handlers.handlePasswordInput() return password end +--------------------------------------------- +-- IRIS BUTTON HANDLER +--------------------------------------------- + +function handlers.handleIrisButtons(eventType, side, x, y) + -- Only process if not entering password (password handler has higher priority) + if state.enteringPassword then + return nil + end + + -- Only process if iris is enabled + if not config.irisEnabled then + return nil + end + + -- Check if clicking iris buttons (bottom-left area) + if y >= 17 and y <= 19 then + -- Open button (2-9) + if x >= 2 and x <= 9 then + utils.openIris() + display.drawIrisStatus() + return "iris_opened" + end + -- Close button (11-18) + if x >= 11 and x <= 18 then + utils.closeIris() + display.drawIrisStatus() + return "iris_closed" + end + end + + return nil -- Not an iris button click +end + --------------------------------------------- -- DISCONNECT BUTTON HANDLER --------------------------------------------- @@ -169,6 +203,7 @@ end function handlers.handleMessage(eventType, side, message) state.lastReceivedMessage = message + utils.debug("Message Received: " .. message) return "message_received" end @@ -200,8 +235,9 @@ function handlers.setupConnectionHandlers() -- Clear any existing handlers events.clearHandlers() -- Register all handlers with their priorities + events.registerHandler("monitor_touch", handlers.handleIrisButtons, events.PRIORITY.DISCONNECT_BUTTON) -- Same priority as disconnect events.registerHandler("monitor_touch", handlers.handleDisconnectButton, events.PRIORITY.DISCONNECT_BUTTON) - events.registerHandler("monitor_touch", handlers.handleDefaultClick, events.PRIORITY.DEFAULT) -- Lowest priority - returns coordinates + events.registerHandler("monitor_touch", handlers.handleDefaultClick, events.PRIORITY.DEFAULT) -- Lowest priority - returns coordinates events.registerHandler("stargate_incoming_wormhole", handlers.handleActivation, events.PRIORITY.ACTIVATION) events.registerHandler("stargate_reconstructing_entity", handlers.handleEntityRead, events.PRIORITY.ENTITY_READ) events.registerHandler("stargate_disconnected", handlers.handleDisconnect, events.PRIORITY.DISCONNECT_CHECK)