vvzvlad
что очень странно.
vvzvlad
RE
if (os.execute("grep -q test /root/tmp") == 0) then
print("ok!")
end
Snusmumriken
Egor
Добрый день. Как сделать, что почитать? Есть экран, с координатами x,y в %, где 0,0 - верхний левый угол.. 100,100 - нижний правый угол. также можно ловить эвенты кликов и скролла мыши,
С кнопками тут проще, так как известны заранее его размеры и координаты изначальные. А не подскажете куда лучше копать,если хочу реализовать табы, списки с чекбоксами, и тд?
Snusmumriken
Что юзаешь?
Snusmumriken
Потому что табы могут быть реализованы вплоть до кнопками, которые переключают видимость других кнопок. Чекбокс — кнопка, меняющая текст (хотя бы x/o). Списки — чутка сложнее, там ещё небось может быть миллиард пунктов, и не все должны быть отрисованы единовременно. Гипотетически тоже можно кнопками, если их можно двигать и менять видимость ))
Snusmumriken
(практически всё может быть сделано с помощью кнопки, если кнопка достаточно гибкая)
Egor
Что юзаешь?
ничего нет. отображение рисуется с помощью хтмл/свг. Но с ними нельзя взаимодействовать. т.е. ты его рисуешь и делаешь. setContent(x,y, content)
Egor
можно ловить клики на экране, скролы и все
Egor
ну mouseup и mousedown
Snusmumriken
Ух ты, какая прикольная штука. И если ты нажал на кнопку, то тебе надо переделать хтмл-свг, чтобы отобразить нажим?
Egor
Snusmumriken
Snusmumriken
Сорян-борян, но это жесть, я убегаю спать
Egor
Egor
поэтому я и не реагирую на нажатия а просто постфактум реагирую
Snusmumriken
Что за система?
Egor
на луа пишется
Egor
т.е. логику (псевдо-моды) можно писать на луа
Snusmumriken
А, всё она же.
Кароч, для нормальных штук придётся делать свой DOM.
То есть ты такой делаешь состояние экрана, кучу разных элементов, у которых своё состояние, и по состоянию каждой фигульки строишь хтмл-свг.
Snusmumriken
Кто-то куда-то кликнул — изменилось состояние (выпал список, например), пришло время перестраивать хтмл-свг.
Egor
Snusmumriken
Кто-то крутанул колесо мыши (прокрутил список) — передвинули курсор списка, выбрали новые видимые объекты, перестроили хтмл-свг.
Snusmumriken
Дерево элементов обыкновенное.
Snusmumriken
local tree = {
id = "0",
list = newList(id = "1", ...),
button1 = newButton(id = "2", ...)
}
function tree:find(id, tree)
for i, v in ipairs(self) do
-- элементы имеют аналогичный метод
local res = v.id == id and v or v:find(id)
if res then return res end
end
end
function tree:render()
local xml = '<bla id="' .. self.id .. '">'
for i, v in ipairs(self) do
-- элементы имеют аналогичный метод
xml = xml .. v:render()
end
return xml .. '</bla>'
end
Snusmumriken
У гугла можешь спросить рекурсивные функции.
Snusmumriken
Ну у тебя есть хтмл и свг, надо сделать дом.
Hauve
Ты всю ночь радио писал?
Snusmumriken
Ты всю ночь радио писал?
Оптимизировал, искал способы не обосраться. Всё равно обосрался, но уже не настолько.
Hauve
Snusmumriken
Ты всю ночь радио писал?
Оно уже не жрёт в таких количествах оперативу, хотя io-операций всё ещё много. Почти пол часа уже играет нон-стопом.
Snusmumriken
Snusmumriken
Потому что если там есть просто "мышь была нажата и отжата" — придётся ещё рендерер делать, под что-то мало-мальски сложное ))
Snusmumriken
И в этой таблице содержатся все основные параметры. Если у тебя абсолютное положение кнопок в хтмл — их координаты будут в таблице. Надо же на основе чего-то строить и перестраивать хтмл.
Egor
Потому что если там есть просто "мышь была нажата и отжата" — придётся ещё рендерер делать, под что-то мало-мальски сложное ))
к сожалению апи под нда. и нет в публичных местах. Вот работа с экраном:
addContent(x,y,html)
возвращает id этого контента (т.е. потом можно делать
resetContent(id,html)
deleteContent(id)
showContent(id, state)
moveContent(id,x,y)
По мышкам (они срабатывают только на эти эвенты, т.е. можно вызывать на этих эвентах функцию):
mouseDown(x,y)
mouseUp(x,y)
и где-то скролл затерялся, как глобальный, но думаю, ну его. а все умещать в экран или сделать пагинацию
Snusmumriken
Колбеки есть?
Типа, игрок тыкнул мышкой на что-то, и что-то вызвалось.
Желательно с айдишкой.
Egor
я сейчас работаю только с нажатием, типа клик - получил координаты, начал искать через кучи if x if y итд
Snusmumriken
И они не вызываются ни с чем кроме x и y? Точно? Проверь.
Snusmumriken
Ну типа
function mouseDown(...)
print(select('#', ...), ...)
end
Egor
а. ну объект экрана, т.е. не содержимое а название экрана, если нужно работать с болеее чем с одним
Egor
и можно делать так:
if screen == 'screenName' then .. end
Egor
бесполезная фигня. так как работаю только с одним экраном
Snusmumriken
Потому что если только координаты — это тебе придётся писать рендерилку хтмля, которая считает все объекты точно так же как рисует рисовалка, чтобы точно определить всю фигню ))
Snusmumriken
Ну, или задавать всё в абсолютных размерах.
Egor
я сейчас так и делаю, каждый раз при эвенте вызываю функцию перерисовки ВСЕГО экрана
Snusmumriken
Это ты вручную всё позиционируешь, запоминаешь куда спозиционировал и на клике перебираешь.
Egor
Egor
где известны его координаты
Snusmumriken
В общем, на самом деле это жесть. Если бы оно хотя бы возвращало html или ID элемента на который кликнули — было бы просто, а так — или всё позиционировать и извращаться, или писать свою хтмл-офскрин-рендерилку (которая считает позиции и положения элементов, чтобы определять куда тыкнули).
Egor
Snusmumriken
Но на клик ты его не получишь. Что тебе от айдишки, с которой ты не можешь взаимодействовать, кроме как удалить?
Egor
Snusmumriken
Чтобы потом только удалить.
Snusmumriken
Если бы оно хотя бы возвращало эту айдишку на клике (там допустим сложный хтмл, кнопка из десятка div-ов и айдишку приобретает весь блок) — было бы гораздо лучше.
Egor
Egor
RE
а может lua скрипт вернуть какойто exit code, который потом можно будет в bash скрипте поймать и обработать?
например есть lua скрипт который генерит файл, на основе какой-то логики.
в результате, если все ок - то файл генерится и сохраняется на диск.
но если условие не выполняется, то файл не генерится.
и вот это состояние мне и нужно поймать bash скриптом-врапером, чтобы заново запустить lua скрипт, чтобы он еще раз проверл работу и все таки сгенерил файл
mva
os.exit
RE
то есть хочу чтото вроде:
#!/usr/bin/lua
....
if () then
CREATE FILE
else
return EXIT_CODE
end
RE
и потом врапером проверять этот exit code в каком-то цикле и если он есть -то заново запускать lua скрипт
mva
Pavel
RE
да дело в том, что сам скрипт запускается вручную и чел сам решает - повторить его или нет.
ну нужно еще и в кроне его запускать. вот врапер для крона и хочу сделать.
но для этого нужно сигнал от скрипта ловить для врапера
Andrey
https://github.com/premake/premake-core/blob/master/src/base/os.lua#L460-L476
mva
RE
да уже
спасибо
🐅🤦♂️
Кто-нибудь работал с svg файлами? Какие библиотеки использовали или писали сами?
Snusmumriken
Писал, но что-то простенькое. Там обычный XML с парсингом точек/безьех.
fgntfg
а анимацию в svg уже запилили?
Snusmumriken
Нет.
Snusmumriken
Ну почти нет.
https://habr.com/ru/post/450924/