Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local c = require('component')
- local gpu = c.gpu
- local event = require('event')
- local term = require('term')
- local math = require('math')
- local oldXRes, oldYRes = gpu.getResolution()
- local newXRes,newYRes = 120,40 -- Разрешение экрана
- local sb = gpu.setBackground
- local sf = gpu.setForeground
- local oldBckCol = gpu.getBackground()
- local oldForCol = gpu.getForeground()
- local borderColor = 0xf742df
- local butCol = 0x888888
- local butTxtCol = 0x00ff00
- local addCol = 0x21effe
- local butActive = 0xcccccc
- local NIPath = "/home/nameItem"
- local gX, gY = 1,1
- local exit = false
- -- Проверяет существование файла и создаёт при отсутствии, возвращает количество строк в файле.
- --
- function verFile(path)
- local size = 0
- local f = io.open(path,"r")
- if(f == nil) then
- f = io.open(path,"w") f:close() f = io.open(path, "r")
- end
- for line in f:lines() do
- size = size + 1
- end
- f:close()
- return size
- end -- end func
- -- Рисует рамку от начальных координат с шириной и высотой внутренней области и заданным цветом
- --
- function border(x0,y0,w,h,col)
- sf(col)
- gpu.fill(x0+1,y0,w,1,'─')
- gpu.fill(x0+1,y0+h+1,w,1,'─')
- gpu.fill(x0,y0+1,1,h,'│')
- gpu.fill(x0+w+1,y0+1,1,h,'│')
- gpu.set(x0,y0,'┌')
- gpu.set(x0+w+1,y0,'┐')
- gpu.set(x0,y0+h+1,'└')
- gpu.set(x0+w+1,y0+h+1,'┘')
- sf(oldForCol)
- end -- end func
- -- Вставляет по начальным координатам строку с заданым цветом текста и фона в HEX
- --
- function setStr(x0,y0,str,colFg,colBck)
- str = tostring(str)
- colFg = colFg or 0xffffff
- colBck = colBck or 0
- sf(colFg)
- sb(colBck)
- gpu.set(x0,y0,str)
- sf(oldForCol)
- sb(oldBckCol)
- end -- end func
- --******* Главная функция(здесь начинается вся программа)
- --**
- function main()
- mainWin()
- eventMainWin()
- end -- end func
- -- Рисует главное окно
- function mainWin()
- setStr(newXRes-15,2,'AutoCraft v1.1',0xfefe22)
- border(1,1,newXRes-2,newYRes-2,borderColor)
- border(2,2,8,1,butCol)
- setStr(3,3,'Добавить',butTxtCol)
- border(12,2,8,1,butCol)
- setStr(13,3,'Изменить',butTxtCol)
- border(22,2,8,1,butCol)
- setStr(23,3,'Инфо',butTxtCol)
- border(32,2,8,1,butCol)
- setStr(33,3,'Выход',butTxtCol)
- end -- end func
- -- Проверяет область на клик мыши, вовзращает 1, если клик внутри области
- --
- function isCl(x0, y0, width, height)
- if(gX >= x0 and gX <= x0+width-1 and gY >= y0 and gY <= y0+height-1) then
- return true
- end
- end -- end func
- -- Регистрирует нажатие мыши на определённом пункте на главном окне
- --
- function eventMainWin()
- while(exit ~= true) do
- _,_,gX,gY = event.pull('touch')
- if(isCl(2,2,10,3)) then
- addWin()
- term.clear()
- mainWin()
- border(2,2,8,1,butActive)
- os.sleep(0.1)
- elseif(isCl(12,2,10,3)) then
- print('Изменить')
- term.clear()
- mainWin()
- border(12,2,8,1,butActive)
- os.sleep(0.1)
- elseif(isCl(22,2,10,3)) then
- print('Инфо')
- term.clear()
- mainWin()
- border(22,2,8,1,butActive)
- os.sleep(0.1)
- elseif(isCl(32,2,10,3)) then
- exit = true
- border(32,2,8,1,butActive)
- os.sleep(0.1)
- end
- end
- end -- end func
- -- Составная.
- -- Рисует окно добавления предметов
- function addWin()
- -- Объявления, глобальные для вложенных в addWin функций
- local itemTab = getNameItem()
- local page = 1 -- текущий лист
- local itemOnPage = 25 -- количество предметов на странице
- local maxPage = math.ceil(#itemTab/itemOnPage) -- максимальное количество листов
- print(maxPage)
- local exitAdd = false -- Выход из подменю
- ---------------------------------------------------------------------------------------------------------
- -- Составная.
- -- Регистрирует нажатие мыши на кнопках и элементах
- function eventAddWin()
- --
- -- Печатает на страницу до itemOnPage элементов массива arr, если они существуют
- function printToPage()
- for i =1,itemOnPage do
- if(itemTab[i+(page-1)*itemOnPage]) then
- if(i+(page-1)*itemOnPage < 10) then
- setStr(5,i+3,i+(page-1)*itemOnPage..'.',addCol)
- elseif(i+(page-1)*itemOnPage < 100) then
- setStr(4,i+3,i+(page-1)*itemOnPage..'.',addCol)
- elseif(i+(page-1)*itemOnPage < 1000) then
- setStr(3,i+3,i+(page-1)*itemOnPage..'.',addCol)
- end
- setStr(7,i+3,itemTab[i+(page-1)*itemOnPage].name)
- end
- end
- setStr(3,31,'Всего: ',0xfefe22)
- setStr(10,31,#itemTab)
- end -- end func
- --
- -- Отображает текущий лист, и кнопки перелистывания
- function listNow()
- if(page ~= 1) then
- border(12,newYRes-1-2,1,1,butCol)
- setStr(13,newYRes-2,'<',butTxtCol)
- end
- border(15,newYRes-1-2,1,1,butCol)
- setStr(16,newYRes-2,page)
- if(page ~= maxPage) then
- border(18,newYRes-1-2,1,1,butCol)
- setStr(19,newYRes-2,'>',butTxtCol)
- end
- end -- end func
- -- Конец объявления функций в eventAddWin, начало работы самой функции
- ---------------------------------------------------------------------------------------------------------
- while(not(exitAdd)) do
- -- gpu.fill(2,3,40,26,' ')
- -- gpu.fill(12,newYRes-1-2,9,3,' ')
- -- printToPage()
- -- listNow()
- _,_,gX,gY = event.pull('touch')
- if(isCl(2,newYRes-1-2,7,3)) then exitAdd = true
- elseif(page ~= 1 and isCl(12,newYRes-1-2,3,3)) then
- page = page - 1
- gpu.fill(2,3,40,26,' ')
- gpu.fill(12,newYRes-1-2,9,3,' ')
- printToPage()
- listNow()
- elseif(page ~= maxPage and isCl(18,newYRes-1-2,3,3)) then
- page = page + 1
- gpu.fill(2,3,40,26,' ')
- gpu.fill(12,newYRes-1-2,9,3,' ')
- printToPage()
- listNow()
- end
- end
- end -- end func
- -- Конец объявления функций в addWin, начало работы самой функции
- ---------------------------------------------------------------------------------------------------------
- term.clear()
- border(1,1,newXRes-2,newYRes-2,borderColor)
- setStr(2,2,'Добавление предметов а автокрафт',butTxtCol)
- border(2,newYRes-1-2,5,1,butCol)
- setStr(3,newYRes-1-1,'Назад',butTxtCol)
- printToPage()
- listNow()
- eventAddWin()
- -- Вывести на экран с учётом листа
- -- Обработать клик
- -- Занести в базу
- end -- end func
- -- Читает из файла библиотеки данные и записывает в массив, который возвращает
- --
- function getNameItem()
- local cntLine,cntItem = 0,0 -- счётчик линии и предмета файла
- local nameItem, idItem, dmgItem = "","",0 -- навзание, полный идентификатор(id + dmg)
- local verTab = {}
- local fSize = verFile(NIPath)
- -- Формируем табилцу из библиотеки
- local f = io.open(NIPath,"r")
- while(cntLine ~= fSize) do
- cntItem = cntItem + 1
- nameItem = f:read()
- idItem = f:read()
- dmgItem = f:read()
- cntLine = cntLine + 3
- verTab[cntItem] = {name = nameItem, id = idItem, dmg = dmgItem}
- end
- f:close()
- return verTab
- end -- end func
- ---------------------------------------------------------------------------
- gpu.setResolution(newXRes,newYRes)
- main()
- term.clear()
- gpu.setResolution(oldXRes,oldYRes)
- --------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement