4epB9Ik

Energy System [DVision]

Feb 12th, 2017
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 9.70 KB | None | 0 0
  1. -- #Глобальные переменные
  2. local component = require("component")
  3. local unicode = require("unicode")
  4. local event = require("event")
  5. local term = require("term")
  6. local sides = require("sides")
  7. local gpu = component.gpu
  8.  
  9. -- #Конфигурация
  10. --*общее
  11. local white_list = "4epB9Ik"
  12. local res_X = 100   -- ширина программы в пикселях
  13. local res_Y = 30    -- высота программы в пикселях
  14. local program_background = 0x18FAFF -- цвет заднего фона программы
  15. --*форма
  16. local form_background_head = 0x1E90FF -- цвет шапки формы
  17. local form_background_body = 0x87CEFA -- цвет тела формы
  18. local form_title_whidght = 2 -- высота шапки формы в пикселях
  19. local form_pading_X = 5 -- отступ формы от сторон в пикселях
  20. local form_pading_Y = 3 -- отступ формы по высоте в пикселях
  21. --*кнопки
  22. local buttons_active_color = 0x77DD77 -- цвет кнопки в активированном состоянии
  23. local buttons_deactive_color = 0xEB4C42 -- цвет кнопки в деактивированном состоянии
  24. local buttons_active_caption_color = 0x3D0AE1
  25. local buttons_deactive_caption_color = 0x3D0AE1
  26. local buttons_pading_X = 5 -- отступ кнопки от сторон в форме
  27. local buttons_pading_Y = 1 -- отступ кнопки от вершин в форме
  28. local buttons_height = 3 -- высота кнопки
  29.  
  30. --*дополнительно
  31. local program_whidght = res_X + 1 -- фикс сдвига (ебаная версия OC)
  32.  
  33. --*динамические переменные (не менять!!)
  34. --Кнопка_1
  35. local btn1_X_size
  36. local btn1_X_pos
  37. local btn1_Y_size
  38. local btn1_Y_pos
  39. local btn1_label_X_pos
  40. local btn1_label_Y_pos
  41. --Кнопка_2
  42. local btn2_X_size
  43. local btn2_X_pos
  44. local btn2_Y_size
  45. local btn2_Y_pos
  46. local btn2_label_X_pos
  47. local btn2_label_Y_pos
  48. --Кнопка_3
  49. local btn3_X_size
  50. local btn3_X_pos
  51. local btn3_Y_size
  52. local btn3_Y_pos
  53. local btn3_label_X_pos
  54. local btn3_label_Y_pos
  55. --Кнопка_4
  56. local btn4_X_size
  57. local btn4_X_pos
  58. local btn4_Y_size
  59. local btn4_Y_pos
  60. local btn4_label_X_pos
  61. local btn4_label_Y_pos
  62.  
  63. --Переключатель режима ожидания
  64. local waiting = true
  65. ---------------------------------------
  66.  
  67. -- #Редстоун-блоки (Рубильники)
  68. local light_voltage_to_RF = component.proxy("28394c45-d973-485b-91ca-7f6304806442") -- адрес рубильника подачи энергии легкого напряжения в хранилище RF
  69. local hight_voltage_to_RF = component.proxy("a0ec075b-c36c-4ed2-b528-6a1251582441") -- адрес рубильника подачи энергии высокого напряжения в хранилище RF
  70. local light_voltage_to_EU = component.proxy("2755d58e-7069-4b12-94c3-72cb4a3462e3") -- адрес рубильника подачи энергии легкого напряжения в хранилище EU
  71. local hight_voltage_to_EU = component.proxy("ec42d90c-bb13-4a87-931a-42917d373def") -- адрес рубильника подачи энергии высокого напряжения в хранилище EU
  72.  
  73. -- #Переменные статуса рубильников
  74. local lvt_rf = true  -- рубильник с легким напряжением на блок RF
  75. local lvt_eu = true  -- рубильник с легким напряжением на блок EU
  76. local hvt_rf = true  -- рубильник с тяжелым напряжением RF
  77. local hvt_eu = true  -- рубильник с тяжелым напряжением EU
  78.  
  79. -- #Первичный принудительный запуск всех рубильников при включении
  80. function hard_run()
  81.     -- выключаем подачу легкого напряжения на RF
  82.     light_voltage_to_RF.setOutput(sides.up, 15)
  83.     lvt_rf = false
  84.    
  85.     -- выключаем подачу тяжелого напряжения на RF
  86.     hight_voltage_to_RF.setOutput(sides.up, 15)
  87.     hvt_rf = false
  88.    
  89.     -- выключаем подачу легкого напряжения на EU
  90.     light_voltage_to_EU.setOutput(sides.up, 15)
  91.     lvt_eu = false
  92.    
  93.     -- выключаем подачу тяжелого напряжения на EU
  94.     hight_voltage_to_EU.setOutput(sides.up, 15)
  95.     hvt_eu = false
  96.    
  97.     -- запускаем главную функцию проприсовки
  98.     start_screen()
  99.    
  100. end
  101.  
  102. -- #Прорисовка кнопок
  103. function draw_buttons()
  104. -- ~я конечно понимаю что можно было сделать не так уебищно через цикл и функции динамически создающих кнопок - но идите нахуй! Мой код - кодю как хочу!
  105. local buttons_size_X = program_whidght / 2 - form_pading_X - (buttons_pading_X * 2)
  106. local buttons_size_Y = buttons_height    
  107.    
  108.      
  109.     -- Начинаем рисовать кнопку 1 (легкое напряжение на RF)
  110.     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 -- Выбор цвета фона, если рубильник перекрыт - красный, если рубильник открыт - зеленый
  111.     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)
  112.    
  113.     -- Присваиваем динамическим переменным размеры и положение нашей кнопки 1 для дальнейшей обработки события.
  114.     btn1_str = "Подача на RF блок"
  115.     btn1_X_pos = form_pading_X + buttons_pading_X
  116.     btn1_Y_pos = form_pading_Y + form_title_whidght + buttons_pading_Y
  117.     btn1_X_size = program_whidght / 2 - form_pading_X - (buttons_pading_X * 2)
  118.     btn1_Y_size = buttons_height
  119.     local str_salt, b = math.modf(unicode.len(btn1_str) / 2)
  120.     btn1_str_X_pos = form_pading_X + buttons_pading_X + (buttons_size_X / 2) - str_salt
  121.     btn1_str_Y_pos = form_pading_Y + form_title_whidght + buttons_pading_Y + 1
  122.    
  123.    
  124.    
  125.     if gpu.getBackground ~= buttons_check_backcolor then
  126.         gpu.fill(btn1_X_pos, btn1_Y_pos, btn1_X_size, btn1_Y_size," ")
  127.         gpu.set(btn1_str_X_pos, btn1_str_Y_pos, btn1_str)
  128.     end
  129.     waiting = true
  130.     main()
  131. end
  132.  
  133. -- #Прорисовка формы
  134. function draw_form()
  135.    
  136.     gpu.setBackground(form_background_head) -- цвет верхнего блока формы
  137.     --          5,3,100 - 5, 3 + 2
  138.     gpu.fill(form_pading_X,form_pading_Y,program_whidght - (form_pading_X * 2) + 1,form_title_whidght," ")
  139.     --gpu.fill(5,3,95,5," ")
  140.     gpu.setBackground(form_background_body) -- цвет остальной формы
  141.     -- 5, 3 + 2, 100 - 5, 30 - 3;
  142.     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 ," ")
  143.     --gpu.fill(5,5,95,27," ")
  144.     draw_buttons()
  145. end
  146.  
  147. -- #Предварительная настройка/очистка экрана
  148. function start_screen()
  149.     gpu.setResolution(res_X ,res_Y) -- разрешение экрана
  150.     -- фон
  151.     gpu.setBackground(program_background) -- цвет фона
  152.     gpu.fill(0,0,program_whidght,res_Y," ") -- заливка фона цветом (выше)
  153.     -- название программы
  154.     gpu.setForeground(0xFFA018) -- Цвет шрифта подписи
  155.     gpu.set(37,1,"Панель управления Энергосистемы")
  156.     -- запуск прорисовки формы
  157.     draw_form()
  158.     -- футер
  159.     gpu.setBackground(0x000000) -- Цвет футера
  160.     gpu.fill(0,res_Y,program_whidght,res_Y, " ") -- Заливка футера
  161.     -- копирайт с низу
  162.     gpu.setForeground(0xFF181C) -- Цвет шрифта логотипа
  163.     gpu.set(42,30,"DVision Energy (C)")
  164.     main()
  165. end
  166. -- #Слушатель кликов
  167. function action_clics(name,address,x,y,button,player)
  168.     if string.find(white_list, player) ~= nil then
  169.         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
  170.             waiting = false
  171.             if lvt_rf == true then
  172.                 light_voltage_to_RF.setOutput(sides.up, 15)
  173.                 lvt_rf = not lvt_rf
  174.                
  175.             else
  176.                 light_voltage_to_RF.setOutput(sides.up, 0)
  177.                 lvt_rf = not lvt_rf
  178.             end
  179.             draw_buttons()
  180.         end
  181.     else
  182.     gpu.setBackground(0x000000) --  Цвет фона футера
  183.     gpu.fill(0,res_Y,program_whidght,res_Y, " ")
  184.     gpu.setForeground(0xFF181C) -- Цвет шрифта сообщения о недостатке прав
  185.     gpu.set(29,30,"Извини "..player..", но у тебя недостаточно прав!")
  186.     os.sleep(1)
  187.     gpu.fill(0,res_Y,program_whidght,res_Y, " ")
  188.     gpu.set(42,30,"DVision Energy (C)")
  189.    
  190.     end
  191. end
  192. -- #Основная функция прорисовки
  193. function main()
  194.      gpu.setBackground(0x87CEFA) -- цвет фона  
  195.      gpu.setForeground(0xFF181C)
  196.      gpu.set(45,15,"В разработке")
  197.      while(waiting) do
  198.      os.sleep(0,2)
  199.      end
  200.      
  201.      
  202. end
  203. -- запускаем слушатель кликов
  204. event.listen("touch",action_clics)
  205. hard_run()
Add Comment
Please, Sign In to add comment