---@diagnostic disable: undefined-global, undefined-field
-- ===== Stargate Iris Control Program =====
-- Controls iris behavior for Stargate Journey
-- ==========================================
-- === CONFIG ===
if fs.exists("iris_config.lua") then
dofile("iris_config.lua")
else
error("Configuration file 'iris_config.lua' not found. Run the installer first.")
end
-- ==============
-- === Peripheral Setup ===
local interface = peripheral.find("advanced_crystal_interface") or
peripheral.find("crystal_interface") or
peripheral.find("basic_interface")
if not interface then
error("The interface is not connected")
end
local transceiver = peripheral.find("transceiver")
if not transceiver then
error("The transceiver is not connected")
end
local ender_modem = peripheral.wrap("back")
if not ender_modem then
error("The modem is not connected")
end
if not interface.getIris() then
error("The Stargate does not have an iris installed")
end
-- === State Tracking ===
local irisState = nil
local irisTimer = nil
local durabilityTimer = os.startTimer(1)
local running = true
-- === Functions ===
local function setIris(state)
if state == "open" then
interface.openIris()
irisState = "open"
print("Iris opened.")
elseif state == "closed" then
interface.closeIris()
irisState = "closed"
print("Iris closed.")
end
end
local function isValidIDC(code)
for _, valid in ipairs(VALID_IDC_CODES) do
if tostring(code) == tostring(valid) then
return true
end
end
return false
end
local function updateIrisState()
local progress = interface.getIrisProgressPercentage() or "open"
if progress == 0 then
irisState = "open"
elseif progress == 100 then
irisState = "closed"
else
irisState = "moving"
end
end
local function handleIncomingWormhole()
print("Incoming wormhole detected! Closing iris...")
setIris("closed")
end
local function handleIDC(code)
print("IDC received:", code)
if isValidIDC(code) then
print("Valid IDC! Opening iris.")
setIris("open")
if irisTimer then
os.cancelTimer(irisTimer)
end
irisTimer = os.startTimer(IRIS_CLOSE_DELAY)
else
print("Invalid IDC. Iris remains closed.")
end
end
local function handleDisconnect()
print("Stargate disconnected. Opening iris.")
if irisTimer then
os.cancelTimer(irisTimer)
end
setIris("open")
end
local function toggleIris()
if irisState == "closed" then
setIris("open")
else
setIris("closed")
end
end
local function displayDurability()
local durability = interface.getIrisDurability() or 0
local maxDurability = interface.getIrisMaxDurability() or 0
if durability and maxDurability then
local percent = math.floor(durability / maxDurability * 100)
local x, y = term.getCursorPos()
local _, h = term.getSize()
term.setCursorPos(1, h)
term.clearLine()
term.write(string.format("Durability: %d/%d (%d%%)", durability, maxDurability, percent))
term.setCursorPos(x, y)
end
end
-- === Event Loop ===
transceiver.setFrequency(TRANSCEIVER_FREQUENCY)
rednet.open("back")
updateIrisState()
print("Stargate Iris Control started.")
print("Press [Space] to manually toggle the iris. Press [Q] to quit.")
while running do
local event, p1, p2, p3, p4, p5 = os.pullEvent()
if event == "stargate_incoming_wormhole" then
handleIncomingWormhole()
elseif event == "stargate_disconnected" then
handleDisconnect()
elseif event == "transceiver_transmission_received" then
local idc = tostring(p3)
handleIDC(idc)
elseif event == "timer" then
if p1 == irisTimer then
print("Iris auto-close timer expired.")
setIris("closed")
irisTimer = nil
elseif p1 == durabilityTimer then
displayDurability()
durabilityTimer = os.startTimer(1)
end
elseif event == "stargate_message_received" then
if p3 == "update" then
term.clear()
shell.run("pastebin run vuDHWp94")
term.clear()
print("Stargate Iris Control started.")
print("Press [Space] to manually toggle the iris. Press [Q] to quit.")
end
elseif event == "key" then
local key = keys.getName(p1)
if key == "space" then
toggleIris()
elseif key == "q" then
print("Shutting down Iris Control.")
running = false
end
end
end
term.clear()
term.setCursorPos(1, 1)