diff --git a/AirlockRTL.lua b/AirlockRTL.lua index 8cfa062..6af27d7 100644 --- a/AirlockRTL.lua +++ b/AirlockRTL.lua @@ -55,10 +55,29 @@ local FLOW_NONE = 0 local FLOW_OUT = 1 -- Из сухого наружу local FLOW_IN = 2 -- Снаружи в сухой +-- Статусы (с ведущим пробелом для отступа на дисплее) +local S_READY = "Готов" +local S_DRAIN_PRE = "Осушение перед входом" +local S_OPEN_IN = "Открытие внутренней двери" +local S_WAIT_IN = "Внутренняя дверь открыта" +local S_CLOSE_IN = "Закрытие внутренней двери" +local S_FLOOD = "Заполнение шлюза" +local S_DRAIN_OUT = "Осушение для выхода" +local S_DRAIN_RET = "Осушение для отсека" +local S_OPEN_OUT = "Открытие внешней двери" +local S_WAIT_OUT = "Внешняя дверь открыта" +local S_CLOSE_OUT = "Закрытие внешней двери" +local S_DRAIN_AFTER = "Осушение после входа" + +-- Цвета +local C_GREEN = "0,255,0" +local C_CYAN = "0,200,255" +local C_YELLOW = "255,200,0" + -- Параметры (шкала воды: 0 = пусто, 100 = полно) local WAIT_TIMEOUT = 3 -- секунд ожидания у открытой двери local PUMP_TIMEOUT = 15 -- макс. секунд работы насоса до принудительного продолжения -local DRAIN_THRESHOLD = 10 -- почти пусто (выход в море) +local DRAIN_THRESHOLD = 10 -- почти пусто (выход в море) local INNER_THRESHOLD = 10 -- можно открыть внутрь (по запросу: вода ниже 10%) local FLOOD_THRESHOLD = 90 -- почти полно (вход снаружи) local WATER_OPEN_SAFE = 10 -- при btn3: если воды > 10%, сначала осушить @@ -76,7 +95,7 @@ local prev5 = false -- Установка текста и цвета статуса local function setStatus(text, color) - out[5] = text + out[5] = " " .. text out[6] = color end @@ -85,7 +104,7 @@ local function goIdle() out[1] = 0 out[2] = 0 out[3] = 0 - setStatus("Готов", "0,255,0") + setStatus(S_READY, C_GREEN) state = ST_IDLE timer = 0 end @@ -94,7 +113,7 @@ end out[1] = 0 out[2] = 0 out[3] = 0 -setStatus("Готов", "0,255,0") +setStatus(S_READY, C_GREEN) inp = {} @@ -135,20 +154,20 @@ function upd(dt) if press3 then -- Вход из сухого отсека: если есть вода — сначала осушаем, затем внутрь if water > WATER_OPEN_SAFE then - setStatus("Осушение перед входом...", "0,200,255") + setStatus(S_DRAIN_PRE, C_CYAN) out[3] = 1 out[4] = -100 flow = FLOW_OUT state = ST_DRAIN_RET else - setStatus("Открытие внутр. двери...", "0,255,0") + setStatus(S_OPEN_IN, C_GREEN) out[2] = 1 flow = FLOW_OUT state = ST_OPEN_IN end elseif press5 then -- Вход снаружи → заполнить шлюз водой, затем открыть внешнюю дверь - setStatus("Заполнение шлюза...", "255,200,0") + setStatus(S_FLOOD, C_YELLOW) out[3] = 1 out[4] = 100 flow = FLOW_IN @@ -162,12 +181,12 @@ function upd(dt) flow = dir end if dir == FLOW_OUT then - setStatus("Осушение для выхода...", "0,200,255") + setStatus(S_DRAIN_OUT, C_CYAN) out[3] = 1 out[4] = -100 state = ST_DRAIN_EXIT else - setStatus("Осушение для отсека...", "0,200,255") + setStatus(S_DRAIN_RET, C_CYAN) out[3] = 1 out[4] = -100 state = ST_DRAIN_RET @@ -179,7 +198,7 @@ function upd(dt) out[2] = 1 if doorIn then timer = 0 - setStatus("Внутр. дверь открыта. Войдите.", "0,255,0") + setStatus(S_WAIT_IN, C_GREEN) state = ST_WAIT_IN end @@ -189,7 +208,7 @@ function upd(dt) timer = timer + dt if press4 or timer >= WAIT_TIMEOUT then press4consumed = press4 - setStatus("Закрытие внутр. двери...", "255,200,0") + setStatus(S_CLOSE_IN, C_YELLOW) out[2] = 0 state = ST_CLOSE_IN end @@ -199,13 +218,13 @@ function upd(dt) if not doorIn then if flow == FLOW_OUT then -- Сценарий "в море": после входа → заполнить (давление) и открыть внешнюю - setStatus("Заполнение шлюза...", "255,200,0") + setStatus(S_FLOOD, C_YELLOW) out[3] = 1 out[4] = 100 state = ST_FLOOD else -- Вернулись в отсек: завершено - setStatus("Готов", "0,255,0") + setStatus(S_READY, C_GREEN) flow = FLOW_NONE state = ST_IDLE end @@ -217,7 +236,7 @@ function upd(dt) out[4] = -100 if water <= DRAIN_THRESHOLD or press4 or pumpTimer >= PUMP_TIMEOUT then press4consumed = press4 - setStatus("Открытие внеш. двери...", "0,200,255") + setStatus(S_OPEN_OUT, C_CYAN) out[3] = 0 out[1] = 1 state = ST_OPEN_OUT @@ -229,19 +248,19 @@ function upd(dt) out[4] = 100 if water >= FLOOD_THRESHOLD or press4 or pumpTimer >= PUMP_TIMEOUT then press4consumed = press4 - setStatus("Открытие внеш. двери...", "255,200,0") + setStatus(S_OPEN_OUT, C_YELLOW) out[3] = 0 out[1] = 1 state = ST_OPEN_OUT end elseif state == ST_DRAIN_RET then - -- Осушение шлюза для входа в сухой отсек (можно раньше, порог INNER_THRESHOLD). + -- Осушение шлюза для входа в сухой отсек. out[3] = 1 out[4] = -100 if water <= INNER_THRESHOLD or press4 or pumpTimer >= PUMP_TIMEOUT then press4consumed = press4 - setStatus("Открытие внутр. двери...", "0,255,0") + setStatus(S_OPEN_IN, C_GREEN) out[3] = 0 out[2] = 1 state = ST_OPEN_IN @@ -252,7 +271,7 @@ function upd(dt) out[1] = 1 if doorOut then timer = 0 - setStatus("Внеш. дверь открыта. Выходите.", "0,200,255") + setStatus(S_WAIT_OUT, C_CYAN) state = ST_WAIT_OUT end @@ -262,7 +281,7 @@ function upd(dt) timer = timer + dt if press4 or timer >= WAIT_TIMEOUT then press4consumed = press4 - setStatus("Закрытие внеш. двери...", "255,200,0") + setStatus(S_CLOSE_OUT, C_YELLOW) out[1] = 0 state = ST_CLOSE_OUT end @@ -272,13 +291,13 @@ function upd(dt) if not doorOut then if flow == FLOW_IN then -- Сценарий "снаружи": после закрытия — осушение и вход в отсек - setStatus("Осушение после входа...", "0,200,255") + setStatus(S_DRAIN_AFTER, C_CYAN) out[3] = 1 out[4] = -100 state = ST_DRAIN_RET else -- Сценарий "наружу": завершён - setStatus("Готов", "0,255,0") + setStatus(S_READY, C_GREEN) state = ST_IDLE flow = FLOW_NONE end