🐅🤦♂️
-- buttons.lua
local buttons = {}
function createBtn(x,y,w,h,txt, handler)
html = [[<div style="position:absolute; top:]]..y..[[; left:]]..x..[[vw; width:]]..w..[[vw; height: ]]..h..[[vh">]]..text..[[</div>]]
screen.setHTML(x,y,html)
buttons[buttons + 1] = {x=x,y=y,x1=w+x,y1=h+y, handler = handler}
end
for _, but in pairs(buttons) do
if x<but.x and x<but.x1 and y > but.y and but.y1 then
but.handler()
end
end
return { createBtn = createBtn }
-- other file
local createBtn = require "buttons".createBtn
createBtn(1,1,2,2, "Hello", function() end)
createBtn(5,4,2,2, "Hello", function() end)
🐅🤦♂️
Как один из вариантов
Egor
Igor
У таблицы buttons, кстати, как я понял, последовательные индексы, pairs можно не использовать, он помедленнее обычного цикла будет. Хоть внутри хендлера кнопки это не так уж и критично, но всё же
Egor
Igor
Ну таблица то всё равно однородная получится
Igor
С последовательными индексами
Igor
Другое дело, если из неё нужно будет что-то удалять
Igor
Вот тут уже запарно
Igor
Можно в принципе обратным циклом проходиться по таблице, и из него удалять уже ячейки таблицы с помощью table.remove
Egor
ну, быстродействие некритично,
Egor
только как-то апдейтить бы
Egor
текст
Snusmumriken
-- buttons.lua
local buttons = {}
function createBtn(x,y,w,h,txt, handler)
html = [[<div style="position:absolute; top:]]..y..[[; left:]]..x..[[vw; width:]]..w..[[vw; height: ]]..h..[[vh">]]..text..[[</div>]]
screen.setHTML(x,y,html)
buttons[buttons + 1] = {x=x,y=y,x1=w+x,y1=h+y, handler = handler}
end
for _, but in pairs(buttons) do
if x<but.x and x<but.x1 and y > but.y and but.y1 then
but.handler()
end
end
return { createBtn = createBtn }
-- other file
local createBtn = require "buttons".createBtn
createBtn(1,1,2,2, "Hello", function() end)
createBtn(5,4,2,2, "Hello", function() end)
-- str = "Hello %item%!"
-- tfill(str, {item = "world"})
function tfill(tmpl, tbl)
local function replace(c)
return tbl[c] or '%' .. c .. '%'
end
return tmpl:gsub('%%(.-)%%', replace)
end
local templates = {}
templates.button = [[
<div style="position:absolute; top:%y%; left:%x%vw; width:%w%vw; height: %h%vh">%text%</div>]]
local buttons = {}
function createButton(info)
info.html = tfill(templates.button, info)
table.insert(buttons, info)
end
createButton{x=10, y=20, w=100, h=200, text="Yo" }
🐅🤦♂️
Snusmumriken
for i, v in ipairs(t) do ... end
ㅤ
Snusmumriken
Да не, вполне можно использовать. Но только в некритичных по времени циклах: он в полтора раза медленнее for i = 1, #tbl do.
ㅤ
В этом таки есть смысл.
ㅤ
ㅤ
Впрочем, получение длины массива для for тоже не совсем предсказуемо для начинающих луашников.
Snusmumriken
Плюс если массив с дырками — используй pairs. Он пропустит дырки и пройдёт по всем не-nil элементам.
ㅤ
ㅤ
Тем не менее, например, в гайдлайне Logiceditor (есть на Гитхабе) ipairs запрещён.
Snusmumriken
Карочи, просто не делаем массивов с дырками, и радуемся ))
Благо нам как раз выдали волшебный table.remove.
ㅤ
Лол.
Snusmumriken
Там вообще много всего запрещено, шаг влево-вправо — расстрел. Но тут есть одна фигнюшка: этот стайлгайд создан и используется в LogicEditor. Для их внутренней кухни он работает неплохо. Там (весьма) специфический набор библиотек, и стайлгайд вырос из него.
🐅🤦♂️
Snusmumriken
Ды : )
Плюс "Привет, %username%", с типичных форумов, при ошибке заполнения поля. Считай что это пыховые шаблончики.
🐅🤦♂️
Мне вот вертикальная черта нравится |, но ее иногда проблемно набирать(
Snusmumriken
Да заюзай что угодно, лишь бы это не использовалось в самом тексте.
Snusmumriken
Но крайне желательно определить левую и правую границы вставляемого текста, а не только условный $width.
Snusmumriken
Но шаблоны придумывали не просто так, и они реально хороши.
А ещё, ты можешь зашаблонить сами кнопочки и вставить их в шаблон страницы:
local layout = {
btn1 = tfill(btn, {...})
btn2 = tfill(btn, {...})
}
local page = [[
<html>
<body>
%btn1%
%btn2%
</body>
</html>]]
page = tfill(page, layout)
Max
Snusmumriken
Кажется, что pairs -- меньшее зло, чем table.remove из середины
Из середины ещё норм, а вот когда этих table.remove из середины много — уже грустно, ибо куча сдвигов одного и того же.
Я как раз недавно писал волшебную функцию. Помечаем дырки чем хотим, а потом сносим всё за ~O(n).
function table_clear(tbl, v)
local p = 1
for i = 1, #tbl do
tbl[p] = tbl[i]
if tbl[i] ~= v then
p = p + 1
end
end
for i = p, #tbl do
tbl[i] = nil
end
return tbl
end
local t = {'a', 0, 'c', 0, 0, 'd', 'e', 0, 'g', 0, 'f'}
print('Clear', render( table_clear(t, 0) ))
--> Clear { "a", "c", "d", "e", "g", "f" }
Max
Из середины ещё норм, а вот когда этих table.remove из середины много — уже грустно, ибо куча сдвигов одного и того же.
Я как раз недавно писал волшебную функцию. Помечаем дырки чем хотим, а потом сносим всё за ~O(n).
function table_clear(tbl, v)
local p = 1
for i = 1, #tbl do
tbl[p] = tbl[i]
if tbl[i] ~= v then
p = p + 1
end
end
for i = p, #tbl do
tbl[i] = nil
end
return tbl
end
local t = {'a', 0, 'c', 0, 0, 'd', 'e', 0, 'g', 0, 'f'}
print('Clear', render( table_clear(t, 0) ))
--> Clear { "a", "c", "d", "e", "g", "f" }
Опять хороший пример кода, на котором jit может дать замедление по сравнению с интерпретатором (если в массиве будут разнородные данные)
Snusmumriken
А чаво, разнотипные сравнения не jit'уются?
Snusmumriken
Ну дык это на любом ветвлении в принципе, не? Трасса это просто набор инструкций сквозь все функции и ветвления. Одно условие уже добавляет новую ветвь.
Max
Если не использовать luavela с правильными опциями, разумеется!)))
Max
Max
Но в бенчмарках, разумеется, всё очень быстро
Snusmumriken
Жуть. Но тем не менее, это лучше чем много table.remove, плюс я не в курсе о более подходящем решении специально для luajit : )
Max
ㅤ
Теперь боты рекламируют пикабушные посты?
RE
RE
сам код работает норм, но только если запускать скрипт самостоятельно, типа
root@gate1:~# ./script
но если скармливать скрипт утилите timeout (ограничивает время выполнения скрипта)
root@gate1:~# /usr/bin/timeout -s 2 140 /root/script
то срабатывает проверка - if checkInstanceCount() > 1 then
почемуто находит 2 инстанса..
пытаюсь разобраться
Lämppi
RE
нифига не пойму
s, n = s:gsub(path, '')
в s получаю весь вывод команды ps
в n - кол-во подстановок, что совершил gsub
Leon174
https://www.lua.org/pil/16.html
Leon174
The effect of the colon is to add an extra hidden parameter in a method definition and to add an extra argument in a method call. The colon is only a syntactic facility, although a convenient one; there is nothing really new here. We can define a function with the dot syntax and call it with the colon syntax, or vice-versa, as long as we handle the extra parameter correctly
Snusmumriken
нифига не пойму
s, n = s:gsub(path, '')
в s получаю весь вывод команды ps
в n - кол-во подстановок, что совершил gsub
Это такое ООП.
Прочитай вот тут вот: https://habr.com/ru/post/346892/ (где-то в середине есть про двоеточия, но лучше прочитай всё)
Грубо говоря,
local s = "qwerty123"
print( s:match("%d+") ) --> 123
print( string.match(s, "%d+") ) --> 123
-- у строки можно вызвать ключ, если это функция — вызвать её
print( s.match(s, "%d+") ) --> 123
(у строк есть метатаблица, __index'ом которой является таблица string).
У файлов, в луа по умолчанию возвращается объект, то есть указатель на хендлер, с функциями.
local file = io.open("text.txt")
for line in file:lines() do print(line) end
print( file:read("*all") )
file:close()
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
	<uses-permission android:name="android.permission.INTERNET" />
who can dec this ?
Александр
Denis
было бы забавно, если бы это декодировалось в какую-нибудь спам ссылку
новый вид ботов для чатов из программистов))
Lucky
Какой язык учить после Lua? Китайский!
Lucky
https://habr.com/ru/post/478910/
Leon174
Ну, успехов в изучении китайского, чо. У меня знакомая четвертый год там учится по обмену. Первый год только китайский долбили, больше ничего. Каждый божий учебный день, шесть дней в неделю, по нескольку часов мяуканья, причем над душой постоянно стояли менторы и не уходили, пока не выдавливались устраивающие их звуки. Я так для себя понял, что безухим и безголосым там ловить нечего. Про их письменность из палочек и веточек и говорить не приходится, если бы не WeChat с переводчиком, то ходила бы только в фастфуд питаться, потому что после первого года при встрече смогла выдать только "нихао". Причем это пекинский диалект, путунхуа, который вроде как официальный, но где Пекин, а где Харбин, поэтому ее "богатейшие" знания языка в быту не особо помогают. И все это в родной языковой среде, с упертыми менторами и несколько лет обучения, которое ведется только на китайском.
А вакансии Lua из таблицы, наверное, в том числе из-за Cocos-а, говорят, дико популярен там. Настолько популярный, что плевать хотели на нормальную документацию на английском, как и на сам английский тоже. Иначе бы не было у нее столько подработок в детсадах, где она этот самый английский и преподает.
Lucky
Ну, успехов в изучении китайского, чо. У меня знакомая четвертый год там учится по обмену. Первый год только китайский долбили, больше ничего. Каждый божий учебный день, шесть дней в неделю, по нескольку часов мяуканья, причем над душой постоянно стояли менторы и не уходили, пока не выдавливались устраивающие их звуки. Я так для себя понял, что безухим и безголосым там ловить нечего. Про их письменность из палочек и веточек и говорить не приходится, если бы не WeChat с переводчиком, то ходила бы только в фастфуд питаться, потому что после первого года при встрече смогла выдать только "нихао". Причем это пекинский диалект, путунхуа, который вроде как официальный, но где Пекин, а где Харбин, поэтому ее "богатейшие" знания языка в быту не особо помогают. И все это в родной языковой среде, с упертыми менторами и несколько лет обучения, которое ведется только на китайском.
А вакансии Lua из таблицы, наверное, в том числе из-за Cocos-а, говорят, дико популярен там. Настолько популярный, что плевать хотели на нормальную документацию на английском, как и на сам английский тоже. Иначе бы не было у нее столько подработок в детсадах, где она этот самый английский и преподает.
Ну, круто же!
Pavel
Hauve
Мне сразу вспоминаются ммо всякие при упоминании китайского геймдева
Lämppi
Lucky
В Китае же, ну.
Lämppi
Я жопу на юань не меняю
Lucky
Странное место для хранения навыков программирования.
Lämppi
Pavel
Lämppi
На рубли только от безысходности
Lämppi
Хотя я и так, почти
Egor
Как удалить из таблицы какой-то элемент:
a = {}
a[22] = 3
a[32] = 4
...
Например a[32] ?
Lämppi
a[32] = nil 🌝
Lucky
Воспользоваться учебником PiL?
Leon174
Всегда завидовал таким людям. Не в обиду, пожалуйста. Без рефлексии, без чтения мануалов, шашки наголо и поскакали. Я так не умею, поэтому завидую.
Leon174
https://www.lua.org/pil/19.2.html
Egor
Egor
и я думал что делаю что-то не так