Advertisement
Guest User

ac

a guest
Feb 21st, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.01 KB | None | 0 0
  1. local c = require('component')
  2. local gpu = c.gpu  
  3. local event = require('event')
  4. local term = require('term')
  5. local math = require('math')
  6.  
  7. local oldXRes, oldYRes = gpu.getResolution()
  8. local newXRes,newYRes = 120,40      -- Разрешение экрана
  9.  
  10. local sb = gpu.setBackground
  11. local sf = gpu.setForeground
  12.  
  13. local oldBckCol = gpu.getBackground()
  14. local oldForCol = gpu.getForeground()
  15.  
  16. local borderColor = 0xf742df
  17. local butCol = 0x888888
  18. local butTxtCol = 0x00ff00
  19. local addCol = 0x21effe
  20. local butActive = 0xcccccc
  21.  
  22. local NIPath = "/home/nameItem"
  23.  
  24. local gX, gY = 1,1
  25. local exit = false
  26.  
  27.  
  28. -- Проверяет существование файла и создаёт при отсутствии, возвращает количество строк в файле.
  29. --
  30. function verFile(path)
  31.   local size = 0
  32.   local f = io.open(path,"r")
  33.   if(f == nil) then
  34.     f = io.open(path,"w") f:close() f = io.open(path, "r")
  35.   end
  36.   for line in f:lines() do
  37.     size = size + 1
  38.   end
  39.   f:close()
  40.   return size
  41. end -- end func
  42.  
  43. --  Рисует рамку от начальных координат с шириной и высотой внутренней области и заданным цветом
  44. --
  45. function border(x0,y0,w,h,col)
  46.  
  47.   sf(col)
  48.   gpu.fill(x0+1,y0,w,1,'─')
  49.   gpu.fill(x0+1,y0+h+1,w,1,'─')
  50.   gpu.fill(x0,y0+1,1,h,'│')
  51.   gpu.fill(x0+w+1,y0+1,1,h,'│')
  52.   gpu.set(x0,y0,'┌')
  53.   gpu.set(x0+w+1,y0,'┐')
  54.   gpu.set(x0,y0+h+1,'└')
  55.   gpu.set(x0+w+1,y0+h+1,'┘')
  56.   sf(oldForCol)
  57.  
  58. end -- end func
  59.  
  60.  
  61.  
  62. -- Вставляет по начальным координатам строку с заданым цветом текста и фона в HEX
  63. --
  64. function setStr(x0,y0,str,colFg,colBck)
  65.  
  66.   str = tostring(str)
  67.   colFg = colFg or 0xffffff
  68.   colBck = colBck or 0
  69.   sf(colFg)
  70.   sb(colBck)
  71.   gpu.set(x0,y0,str)
  72.   sf(oldForCol)
  73.   sb(oldBckCol)
  74.  
  75. end -- end func
  76.  
  77. --******* Главная функция(здесь начинается вся программа)
  78. --**
  79. function main()
  80.   mainWin()
  81.   eventMainWin()
  82.  
  83. end -- end func
  84.  
  85.  
  86. -- Рисует главное окно
  87. function mainWin()
  88.  
  89.   setStr(newXRes-15,2,'AutoCraft v1.1',0xfefe22)
  90.  
  91.   border(1,1,newXRes-2,newYRes-2,borderColor)
  92.   border(2,2,8,1,butCol)
  93.   setStr(3,3,'Добавить',butTxtCol)
  94.  
  95.   border(12,2,8,1,butCol)
  96.   setStr(13,3,'Изменить',butTxtCol)
  97.  
  98.   border(22,2,8,1,butCol)
  99.   setStr(23,3,'Инфо',butTxtCol)
  100.  
  101.   border(32,2,8,1,butCol)
  102.   setStr(33,3,'Выход',butTxtCol)
  103.  
  104. end -- end func
  105.  
  106. -- Проверяет область на клик мыши, вовзращает 1, если клик внутри области
  107. --
  108. function isCl(x0, y0, width, height)
  109.   if(gX >= x0 and gX <= x0+width-1 and gY >= y0 and gY <= y0+height-1) then
  110.     return true
  111.   end
  112. end -- end func
  113.  
  114.  
  115.  
  116. -- Регистрирует нажатие мыши на определённом пункте на главном окне
  117. --
  118. function eventMainWin()
  119.  
  120.   while(exit ~= true) do
  121.     _,_,gX,gY = event.pull('touch')
  122.     if(isCl(2,2,10,3)) then  
  123.       addWin()
  124.       term.clear()
  125.       mainWin()
  126.       border(2,2,8,1,butActive)
  127.       os.sleep(0.1)
  128.     elseif(isCl(12,2,10,3)) then  
  129.       print('Изменить')
  130.       term.clear()
  131.       mainWin()
  132.       border(12,2,8,1,butActive)
  133.       os.sleep(0.1)
  134.     elseif(isCl(22,2,10,3)) then  
  135.       print('Инфо')
  136.       term.clear()
  137.       mainWin()
  138.       border(22,2,8,1,butActive)
  139.       os.sleep(0.1)
  140.     elseif(isCl(32,2,10,3)) then
  141.       exit = true
  142.       border(32,2,8,1,butActive)
  143.       os.sleep(0.1)
  144.     end
  145.   end
  146.  
  147.  
  148. end -- end func
  149.  
  150. -- Составная.
  151. -- Рисует окно добавления предметов
  152. function addWin()
  153. -- Объявления, глобальные для вложенных в addWin функций
  154.  
  155.   local itemTab = getNameItem()
  156.   local page = 1    -- текущий лист
  157.   local itemOnPage = 25   -- количество предметов на странице
  158.   local maxPage = math.ceil(#itemTab/itemOnPage) -- максимальное количество листов
  159.   print(maxPage)
  160.   local exitAdd = false -- Выход из подменю
  161. ---------------------------------------------------------------------------------------------------------
  162. -- Составная.
  163. -- Регистрирует нажатие мыши на кнопках и элементах
  164.  
  165.   function eventAddWin()
  166.   --
  167.   -- Печатает на страницу до itemOnPage элементов массива arr, если они существуют
  168.  
  169.     function printToPage()
  170.  
  171.       for i =1,itemOnPage do
  172.         if(itemTab[i+(page-1)*itemOnPage]) then  
  173.           if(i+(page-1)*itemOnPage < 10) then
  174.             setStr(5,i+3,i+(page-1)*itemOnPage..'.',addCol)
  175.           elseif(i+(page-1)*itemOnPage < 100) then
  176.             setStr(4,i+3,i+(page-1)*itemOnPage..'.',addCol)
  177.           elseif(i+(page-1)*itemOnPage < 1000) then
  178.             setStr(3,i+3,i+(page-1)*itemOnPage..'.',addCol)
  179.           end
  180.           setStr(7,i+3,itemTab[i+(page-1)*itemOnPage].name)
  181.         end
  182.       end
  183.       setStr(3,31,'Всего: ',0xfefe22)
  184.       setStr(10,31,#itemTab)
  185.     end -- end func
  186.     --
  187.     -- Отображает текущий лист, и кнопки перелистывания
  188.  
  189.     function listNow()
  190.       if(page ~= 1) then
  191.         border(12,newYRes-1-2,1,1,butCol)
  192.         setStr(13,newYRes-2,'<',butTxtCol)
  193.       end
  194.       border(15,newYRes-1-2,1,1,butCol)
  195.       setStr(16,newYRes-2,page)
  196.       if(page ~= maxPage) then
  197.         border(18,newYRes-1-2,1,1,butCol)
  198.         setStr(19,newYRes-2,'>',butTxtCol)
  199.       end
  200.     end -- end func
  201. -- Конец объявления функций в eventAddWin, начало работы самой функции
  202. ---------------------------------------------------------------------------------------------------------
  203.  
  204.  
  205.     while(not(exitAdd)) do
  206.     --  gpu.fill(2,3,40,26,' ')
  207.     --  gpu.fill(12,newYRes-1-2,9,3,' ')
  208.     --  printToPage()
  209.     --  listNow()
  210.       _,_,gX,gY = event.pull('touch')
  211.       if(isCl(2,newYRes-1-2,7,3)) then exitAdd = true
  212.       elseif(page ~= 1 and isCl(12,newYRes-1-2,3,3)) then
  213.         page = page - 1
  214.         gpu.fill(2,3,40,26,' ')
  215.         gpu.fill(12,newYRes-1-2,9,3,' ')
  216.         printToPage()
  217.         listNow()
  218.       elseif(page ~= maxPage and isCl(18,newYRes-1-2,3,3)) then
  219.         page = page + 1
  220.         gpu.fill(2,3,40,26,' ')
  221.         gpu.fill(12,newYRes-1-2,9,3,' ')
  222.         printToPage()
  223.         listNow()
  224.       end
  225.     end
  226.   end -- end func
  227. -- Конец объявления функций в addWin, начало работы самой функции
  228. ---------------------------------------------------------------------------------------------------------
  229.  
  230.  
  231.   term.clear()
  232.   border(1,1,newXRes-2,newYRes-2,borderColor)
  233.   setStr(2,2,'Добавление предметов а автокрафт',butTxtCol)
  234.   border(2,newYRes-1-2,5,1,butCol)
  235.   setStr(3,newYRes-1-1,'Назад',butTxtCol)
  236.  
  237.   printToPage()
  238.   listNow()
  239.   eventAddWin()
  240.  
  241.  -- Вывести на экран с учётом листа
  242.  -- Обработать клик
  243. --  Занести в базу
  244. end -- end func
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254. -- Читает из файла библиотеки данные и записывает в массив, который возвращает
  255. --
  256. function getNameItem()
  257.  
  258.   local cntLine,cntItem = 0,0 -- счётчик линии и предмета файла
  259.   local nameItem, idItem, dmgItem = "","",0 -- навзание, полный идентификатор(id + dmg)
  260.   local verTab = {}
  261.   local fSize = verFile(NIPath)
  262.  
  263.   -- Формируем табилцу из библиотеки
  264.   local f = io.open(NIPath,"r")
  265.   while(cntLine ~= fSize) do
  266.     cntItem = cntItem + 1
  267.     nameItem = f:read()
  268.     idItem = f:read()
  269.     dmgItem = f:read()
  270.     cntLine = cntLine + 3
  271.     verTab[cntItem] = {name = nameItem, id = idItem, dmg = dmgItem}  
  272.   end
  273.   f:close()
  274.   return verTab
  275.  
  276. end -- end func
  277.  
  278. ---------------------------------------------------------------------------
  279. gpu.setResolution(newXRes,newYRes)
  280. main()
  281. term.clear()
  282. gpu.setResolution(oldXRes,oldYRes)
  283. --------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement