Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- #Глобальные переменные
- local component = require("component")
- local unicode = require("unicode")
- local event = require("event")
- local term = require("term")
- local sides = require("sides")
- local gpu = component.gpu
- -- #Конфигурация
- --*общее
- local white_list = "4epB9Ik"
- local res_X = 100 -- ширина программы в пикселях
- local res_Y = 30 -- высота программы в пикселях
- local program_background = 0x18FAFF -- цвет заднего фона программы
- --*форма
- local form_background_head = 0x1E90FF -- цвет шапки формы
- local form_background_body = 0x87CEFA -- цвет тела формы
- local form_title_whidght = 2 -- высота шапки формы в пикселях
- local form_pading_X = 5 -- отступ формы от сторон в пикселях
- local form_pading_Y = 3 -- отступ формы по высоте в пикселях
- --*кнопки
- local buttons_active_color = 0x77DD77 -- цвет кнопки в активированном состоянии
- local buttons_deactive_color = 0xEB4C42 -- цвет кнопки в деактивированном состоянии
- local buttons_active_caption_color = 0x3D0AE1
- local buttons_deactive_caption_color = 0x3D0AE1
- local buttons_pading_X = 5 -- отступ кнопки от сторон в форме
- local buttons_pading_Y = 1 -- отступ кнопки от вершин в форме
- local buttons_height = 3 -- высота кнопки
- --*дополнительно
- local program_whidght = res_X + 1 -- фикс сдвига (ебаная версия OC)
- --*динамические переменные (не менять!!)
- --Кнопка_1
- local btn1_X_size
- local btn1_X_pos
- local btn1_Y_size
- local btn1_Y_pos
- local btn1_label_X_pos
- local btn1_label_Y_pos
- --Кнопка_2
- local btn2_X_size
- local btn2_X_pos
- local btn2_Y_size
- local btn2_Y_pos
- local btn2_label_X_pos
- local btn2_label_Y_pos
- --Кнопка_3
- local btn3_X_size
- local btn3_X_pos
- local btn3_Y_size
- local btn3_Y_pos
- local btn3_label_X_pos
- local btn3_label_Y_pos
- --Кнопка_4
- local btn4_X_size
- local btn4_X_pos
- local btn4_Y_size
- local btn4_Y_pos
- local btn4_label_X_pos
- local btn4_label_Y_pos
- --Переключатель режима ожидания
- local waiting = true
- ---------------------------------------
- -- #Редстоун-блоки (Рубильники)
- local light_voltage_to_RF = component.proxy("28394c45-d973-485b-91ca-7f6304806442") -- адрес рубильника подачи энергии легкого напряжения в хранилище RF
- local hight_voltage_to_RF = component.proxy("a0ec075b-c36c-4ed2-b528-6a1251582441") -- адрес рубильника подачи энергии высокого напряжения в хранилище RF
- local light_voltage_to_EU = component.proxy("2755d58e-7069-4b12-94c3-72cb4a3462e3") -- адрес рубильника подачи энергии легкого напряжения в хранилище EU
- local hight_voltage_to_EU = component.proxy("ec42d90c-bb13-4a87-931a-42917d373def") -- адрес рубильника подачи энергии высокого напряжения в хранилище EU
- -- #Переменные статуса рубильников
- local lvt_rf = true -- рубильник с легким напряжением на блок RF
- local lvt_eu = true -- рубильник с легким напряжением на блок EU
- local hvt_rf = true -- рубильник с тяжелым напряжением RF
- local hvt_eu = true -- рубильник с тяжелым напряжением EU
- -- #Первичный принудительный запуск всех рубильников при включении
- function hard_run()
- -- выключаем подачу легкого напряжения на RF
- light_voltage_to_RF.setOutput(sides.up, 15)
- lvt_rf = false
- -- выключаем подачу тяжелого напряжения на RF
- hight_voltage_to_RF.setOutput(sides.up, 15)
- hvt_rf = false
- -- выключаем подачу легкого напряжения на EU
- light_voltage_to_EU.setOutput(sides.up, 15)
- lvt_eu = false
- -- выключаем подачу тяжелого напряжения на EU
- hight_voltage_to_EU.setOutput(sides.up, 15)
- hvt_eu = false
- -- запускаем главную функцию проприсовки
- start_screen()
- end
- -- #Прорисовка кнопок
- function draw_buttons()
- -- ~я конечно понимаю что можно было сделать не так уебищно через цикл и функции динамически создающих кнопок - но идите нахуй! Мой код - кодю как хочу!
- local buttons_size_X = program_whidght / 2 - form_pading_X - (buttons_pading_X * 2)
- local buttons_size_Y = buttons_height
- -- Начинаем рисовать кнопку 1 (легкое напряжение на RF)
- if lvt_rf == false then gpu.setBackground(buttons_deactive_color) gpu.setForeground(buttons_deactive_caption_color) else gpu.setBackground(buttons_active_color) gpu.setForeground(buttons_active_caption_color) end -- Выбор цвета фона, если рубильник перекрыт - красный, если рубильник открыт - зеленый
- local button1_check_simbol, button1_check_forecolor, button_check_backcolor = gpu.get(form_pading_X + buttons_pading_X + 1, form_pading_Y + form_title_whidght + buttons_pading_Y + 1)
- -- Присваиваем динамическим переменным размеры и положение нашей кнопки 1 для дальнейшей обработки события.
- btn1_str = "Подача на RF блок"
- btn1_X_pos = form_pading_X + buttons_pading_X
- btn1_Y_pos = form_pading_Y + form_title_whidght + buttons_pading_Y
- btn1_X_size = program_whidght / 2 - form_pading_X - (buttons_pading_X * 2)
- btn1_Y_size = buttons_height
- local str_salt, b = math.modf(unicode.len(btn1_str) / 2)
- btn1_str_X_pos = form_pading_X + buttons_pading_X + (buttons_size_X / 2) - str_salt
- btn1_str_Y_pos = form_pading_Y + form_title_whidght + buttons_pading_Y + 1
- if gpu.getBackground ~= buttons_check_backcolor then
- gpu.fill(btn1_X_pos, btn1_Y_pos, btn1_X_size, btn1_Y_size," ")
- gpu.set(btn1_str_X_pos, btn1_str_Y_pos, btn1_str)
- end
- waiting = true
- main()
- end
- -- #Прорисовка формы
- function draw_form()
- gpu.setBackground(form_background_head) -- цвет верхнего блока формы
- -- 5,3,100 - 5, 3 + 2
- gpu.fill(form_pading_X,form_pading_Y,program_whidght - (form_pading_X * 2) + 1,form_title_whidght," ")
- --gpu.fill(5,3,95,5," ")
- gpu.setBackground(form_background_body) -- цвет остальной формы
- -- 5, 3 + 2, 100 - 5, 30 - 3;
- gpu.fill(form_pading_X,form_pading_Y + form_title_whidght,program_whidght - (form_pading_X * 2) + 1 ,res_Y - form_title_whidght - form_pading_Y * 2 ," ")
- --gpu.fill(5,5,95,27," ")
- draw_buttons()
- end
- -- #Предварительная настройка/очистка экрана
- function start_screen()
- gpu.setResolution(res_X ,res_Y) -- разрешение экрана
- -- фон
- gpu.setBackground(program_background) -- цвет фона
- gpu.fill(0,0,program_whidght,res_Y," ") -- заливка фона цветом (выше)
- -- название программы
- gpu.setForeground(0xFFA018) -- Цвет шрифта подписи
- gpu.set(37,1,"Панель управления Энергосистемы")
- -- запуск прорисовки формы
- draw_form()
- -- футер
- gpu.setBackground(0x000000) -- Цвет футера
- gpu.fill(0,res_Y,program_whidght,res_Y, " ") -- Заливка футера
- -- копирайт с низу
- gpu.setForeground(0xFF181C) -- Цвет шрифта логотипа
- gpu.set(42,30,"DVision Energy (C)")
- main()
- end
- -- #Слушатель кликов
- function action_clics(name,address,x,y,button,player)
- if string.find(white_list, player) ~= nil then
- if x >= btn1_X_pos and x <= btn1_X_pos + btn1_X_size and y >= btn1_Y_pos and y <= btn1_Y_pos + btn1_Y_size then
- waiting = false
- if lvt_rf == true then
- light_voltage_to_RF.setOutput(sides.up, 15)
- lvt_rf = not lvt_rf
- else
- light_voltage_to_RF.setOutput(sides.up, 0)
- lvt_rf = not lvt_rf
- end
- draw_buttons()
- end
- else
- gpu.setBackground(0x000000) -- Цвет фона футера
- gpu.fill(0,res_Y,program_whidght,res_Y, " ")
- gpu.setForeground(0xFF181C) -- Цвет шрифта сообщения о недостатке прав
- gpu.set(29,30,"Извини "..player..", но у тебя недостаточно прав!")
- os.sleep(1)
- gpu.fill(0,res_Y,program_whidght,res_Y, " ")
- gpu.set(42,30,"DVision Energy (C)")
- end
- end
- -- #Основная функция прорисовки
- function main()
- gpu.setBackground(0x87CEFA) -- цвет фона
- gpu.setForeground(0xFF181C)
- gpu.set(45,15,"В разработке")
- while(waiting) do
- os.sleep(0,2)
- end
- end
- -- запускаем слушатель кликов
- event.listen("touch",action_clics)
- hard_run()
Add Comment
Please, Sign In to add comment