Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local com = require("component")
- local term = require("term")
- local event = require("event")
- local gpu = com.gpu
- local proxyReactors
- local ResX, ResY = gpu.getResolution()
- local color = {
- ["StartForeground"] = gpu.getForeground(), -- цвета для завершения проги
- ["StartBackground"] = gpu.getBackground(), -- цвета для завершения проги
- ["background"] = 0x161a1e, -- цвет фона
- ["UpBar"] = 0x2a323b, -- цвет фона вверхней полосы (бар)
- ["foreground"] = 0xf5f5f5, -- цвет текста
- ["reactorON"] = 0x00DD00, -- цвет текста состояния реактора.
- ["reactorOFF"] = 0xFF0000, -- цвет текста состояния реактора.
- ["reactorNIL"] = 0x5c5c5c, -- цвет состояния, если реактор не найден
- ["lastColor"] = 0x000000, -- штука для хоть какойнить оптимизации
- ["warningHeat"] = 0xffba00,
- ["normalHeat"] = 0x66cc00,
- ["backgroundReactorIcon"] = { -- таакс... а это цвета для выделения блоков. что бы не сливались
- ["background_1"] = 0x777777,
- ["background_2"] = 0x878787,
- ["background_nil_1"] = 0x393939,
- ["background_nil_2"] = 0x262626
- },
- ["ByColors"] = {0xffffff,0x66ff00,0xe0e0e0,0x0060ff,0xc2c2c2,0xff0000,0x999999}
- }
- local addresses = {
- --1 2 3 4 5 6 7 8 9 реактор
- "7a1f8910-06a8-43a0-ba8c-6b27db6a6295", "6805d282-0578-4a82-9d62-f2c243e7348d", "db0b7d44-f548-4c18-a1bb-ddf15f33b026", "b588b706-b5d6-4abd-993d-9f9038861de1", "533ae447-2575-499e-a816-a0dc852aa255", "d20a9f91-7d30-4ae6-936b-f88d4b296aa9", "263f47df-289e-42bb-9333-d1483258315d", "39a94a0d-a159-4c6a-b2be-d7fa79002aaa", "686c16e2-35c1-4b99-a385-d9c5a65fe986", "75c6a04b-c8b1-42ae-ae4b-233c8e9cab5d", "f421709b-6a23-4fd5-8a9c-05a2e047c83a", "495822c7-5570-4b85-bc1c-af4dc5e9a473", "15cc5994-d357-4bd0-819b-3c0fede6d05d", "d5148f85-7920-43d3-a773-0997f12d2784", "712263df-ce76-46b1-804e-44a2364df712", "c2d9dc27-c1a7-4f84-856b-658fcbf70e7f", "74f86322-a4f6-4e63-937d-0210dd08f951", "df94b33e-d85a-4d4d-bf32-e86dec7bbbfe", "c81d3234-956d-4fc4-bb99-5fcd757f918e", "410cdc0c-6864-4619-8a62-a4a9930e3f3d", "5fcb98a1-e9d0-437e-97a0-5dcc9dcf4c6c", "27389320-99b7-42d1-a8da-16acf319e8d0", "bd022ad7-6d46-4b21-828b-cfb76c34e5fc", "6127ff23-8a0b-4b1c-b182-8f701663bb39", "2cf30389-494b-4721-a048-6656fe6a56ce", "fd043f5d-c561-4841-8e2a-f01bc917ed56", "a65f2b2b-9149-4409-9146-e3e66c86cd28", "6ccbb2f6-dcad-44ea-84a0-1bce69ba183b", "d298d943-b476-41a9-ad8c-75202b93e1d8", "8b4cc36a-1923-4bdf-a60a-1a10702c7581", "c3d402cb-1078-4f96-ba9f-48b7f957974d", "91c7373d-285b-4b51-9f8b-970a0bd0d7a1", "b01ef098-150b-4b00-b3b1-4dc8b76b481e", "96e570a1-36ac-41db-810f-2c6e158035bf", "b6a92b7d-4580-46cd-8177-bc4b76926061", "eecf8f06-f074-43c6-8107-d72ea137b12f", "98d44057-028d-4ce3-8774-431e5a10d11d", "80912358-f868-4dc9-8449-529991eaf8fc", "7a57a8d3-665e-4e42-a5dc-03c3395b650b", "bfd526fb-8c5b-446b-b2ae-0f636e9eda80", "a4e449ef-5db2-4cee-8e95-3a8f24533640", "6ebed09a-17bc-49f1-8446-c95e008003fb", "d53f0f90-f0e3-4987-a7d9-4e5a5ffef2b8", "d1c25ba7-38fd-4b58-b885-7739bc594108", "d3f05ca1-f84b-415f-bca5-c3ece7db3e3e", "f6e12279-9dae-4778-9600-f0c82ac3b976", "c86b5366-e612-48e0-a251-333b1e6ce758", "537a924d-0d2c-4d53-a5c6-c2b0ea3799d9", "20e02864-8aab-4965-bf03-c459657ef0a1", "1ef764ce-bfb7-42a3-97bf-1de7633a6a1e"
- }
- local statusReactors = {}
- local IDColorBy = 1
- local ExitStatus = false
- local function DrawBy()
- local by = "by oGoOgO"
- gpu.setBackground(color.UpBar)
- gpu.setForeground(color.ByColors[IDColorBy])
- lastColor = color.ByColors[IDColorBy]
- gpu.set(ResX-#by+1, 1, by)
- if IDColorBy+1 <= #color.ByColors then IDColorBy = IDColorBy + 1 else IDColorBy = 1 end
- end
- local function GetComponentsReactors(addressesComponents)
- local proxys = {}
- for i = 1, #addressesComponents do
- proxys[i] = com.proxy(addressesComponents[i]) or "?"
- end
- return proxys
- end
- local function GetStatusReactors(reactors)
- local result = {}
- for i = 1, #reactors do
- if com.get(reactors[i].address) ~= nil then
- result[i] = {
- math.floor(reactors[i].getReactorEUOutput()),
- reactors[i].getHeat()/reactors[i].getMaxHeat()*100
- }
- end
- end
- return result
- end
- local function GetColorBackgroundReactor(ID,color1,color2)
- return ID%2==0 and color1 or color2
- end
- local function GetColorStatusReactor(ID,color1,color2)
- return statusReactors[ID][1]>0 and color1 or color2
- end
- local function ChangeForegroundColor(color)
- if lastColor ~= color then
- gpu.setForeground(color); lastColor = color
- end
- end
- local function DrawBarsAndOther()
- gpu.setBackground(color.background)
- gpu.setForeground(color.foreground)
- term.clear()
- gpu.setBackground(color.UpBar)
- gpu.fill(1,1,160,3," ")
- gpu.fill(5,1,1,50," ")
- gpu.set(1,1,"X")
- for i=1, 6 do
- local XPos = 4+(i-1)*24+i
- gpu.set((XPos*2+26)/2-3,2, "Блок "..i)
- gpu.fill(30+((i-1)*25),3,1,48," ")
- end
- end
- local function DrawStatusReactors(STS)
- local IDReactor = 1
- local IBlocks = 1
- for address=1, #addresses do
- local EUOutput, HeatReactor = "?"
- local StartX = 6+(IBlocks-1)*24+IBlocks
- local StartY = 5+(IDReactor-1)*5
- local EndX = 22
- local EndY = 5
- local positionIcon = {StartX, StartY, EndX, EndY}
- local PositionText = {
- (positionIcon[1]*2+positionIcon[3])/2,
- (positionIcon[2]*2+positionIcon[4])/2
- }
- if STS[address] ~= nil then
- EUOutput = tostring(STS[address][1]).." EU/t"
- HeatReactor = tostring(STS[address][2]).."% Нагрев"
- gpu.setBackground(GetColorBackgroundReactor(IDReactor,color.backgroundReactorIcon.background_1,color.backgroundReactorIcon.background_2))
- ChangeForegroundColor(GetColorStatusReactor(address,color.reactorON,color.reactorOFF))
- else
- ChangeForegroundColor(color.reactorNIL)
- gpu.setBackground(GetColorBackgroundReactor(IDReactor,color.backgroundReactorIcon.background_nil_1,color.backgroundReactorIcon.background_nil_2))
- end
- gpu.fill(positionIcon[1],positionIcon[2],positionIcon[3],positionIcon[4]," ")
- gpu.set(PositionText[1]-5,PositionText[2],"Реактор N"..IDReactor)
- gpu.set(StartX,PositionText[2]+2,EUOutput)
- ChangeForegroundColor(STS[address][2]>=50 and color.warningHeat or color.normalHeat)
- gpu.set(StartX+EndX-#HeatReactor,PositionText[2]-2,HeatReactor)
- if IDReactor+1 <= 9 then IDReactor = IDReactor + 1 else IDReactor = 1; IBlocks = IBlocks + 1 end
- end
- end
- local function HandlerTouch()
- local _, _, x, y = event.pull(1,"touch")
- ExitStatus = x == 1 and y == 1
- end
- local function Init()
- for i=1, #addresses do addresses[i] = com.get(addresses[i]) or "?" end
- proxyReactors = GetComponentsReactors(addresses)
- DrawBarsAndOther()
- end
- local function Main()
- while not ExitStatus do
- statusReactors = GetStatusReactors(proxyReactors)
- DrawStatusReactors(statusReactors)
- DrawBy() -- и это тоже не трогай, иначе будет плохо...
- HandlerTouch()
- end
- gpu.setBackground(color.StartBackground)
- gpu.setForeground(color.StartForeground)
- term.clear()
- end
- Init()
- Main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement