Snusmumriken
Правда, ты там боролся за компактность, поэтому пользуйся методикой из перепостенного.
Ах да, таблицы это ссылки. Функции тоже, так что там просто присвоение в конечной сборке M ссылок на нужные таблицы с функциями.
Egor
Egor
и..пока не проверял насчет ограничений
Egor
а..пофигу, как столкнусь в реальности с ограничениями, буду думать
Egor
Получается что-то типа:
local signedAngleBetween = {}
function signedAngleBetween.getAngle(vectr1, vectr2, planeNormal)
local normvectr1 = self.vectr1:normalize()
local normvectr2 = self.vectr2:normalize()
local angle = math.acos(normvectr1:dot(normvectr2))
local crossProduct = self.vectr1:cross(self.vectr2)
if crossProduct:dot(self.planeNormal) < 0 then
return -angle
else
return angle
end
end
local autoPilotLibrary = {}
autoPilotLibrary.signedAngleBetween = signedAngleBetween
return autoPilotLibrary
?
Snusmumriken
Ну типа того. Правда вызывать ты будешь
local autoPilotLibrary = require"autopilotlibrary"
local angle = autoPilotLibrary.signedAngleBetween.getAngle(vec1, vec2, norm)
Snusmumriken
Мне страшно от длины модулей и методов.
Egor
Предлагаешь сократить название или другой способ есть?
Egor
Хмм, а если что0-то типа такого:
local autoPilotLibrary = {}
autoPilotLibrary.signedAngleBetween = signedAngleBetween.getAngle(vectr1, vectr2, planeNormal)
return autoPilotLibrary
Snusmumriken
Ну частично можно сократить и закешировать.
local aplib = require"autopilotlibrary"
local getAngleBetween = aplib.signedAngleBetween.getAngle
local angle = getAngleBetween(vec1, vec2, norm)
Функции это ссылки. Создаём ещё одну ссылку на ту же функцию с произвольным именем и используем.
Snusmumriken
Snusmumriken
Убери его, тогда будет ок.
Egor
вот и скопировал
Egor
local mvar = {}
function mvar.mfn(tt)
print(tt)
end
local asd = {}
asd.mvar = mvar.mfn
return asd
-----------
local myfn = require('.test.fun1')
myfn.mvar(11)
так работает хммм
Snusmumriken
Ну и имена тоже странные. vectr1 — что это за вектор такой?
Плюс "распространённое" обозначение векторов — vec1/vec2, tr — типа лишнее ))
Хотя тут уже начинается интересное, потому что именно как vec2/vec3/vec4 обозначают векторы определённой размерности, как и с матрицами mat4, например. Поэтому давай vecA/vecB, самому потом будет понятнее.
Egor
Egor
оно глобальное игровое
Egor
как и vec3
Snusmumriken
Да я уже понял что это функции создания векторов.
Snusmumriken
Ну тады vecA и vecB, ибо цифры у них принято под размерность точить, я уже описал.
Egor
так и сделал
Snusmumriken
Экспериментируй, в общем, и старайся сокращать, сохраняя понятность. А то оче много текста, и писать неудобно и читать потом.
Snusmumriken
Во, какие ещё функции ты собрался запихивать в signedAngleBetween? Ну там есть getAngle, а что ещё там может быть?
Egor
Snusmumriken
А зачем тогда таблица signedAngleBetween?
Egor
есть куча мелкий функций
Egor
типа рассчета времени разгона/остановки и тд. решил запизать в одну
Egor
Egor
кажется так красивее)
Snusmumriken
Это ненужное усложнение ))
Плюс так даже с длинными именами получается короче.
Egor
ахах) угу
Snusmumriken
Вот если у тебя несколько библиотек объединяются в одной по категориям, как я показывал с graphics и music — это понятно зачем, оно так легко разделяется плюс можно закешировать. Допустим, ты в этом месте работаешь только с графикой, и такой:
local gr = module.graphics
gr.draw(something)
gr.draw(something_else)
gr.print(some_text)
Snusmumriken
Категории должны быть обоснованы, иначе это лишние сущности, которые самое время обрезать большой опасной бритвой.
Egor
Snusmumriken
Лучше сделать только то что необходимо, и не больше ))
Snusmumriken
Snusmumriken
Хотя если у тебя там ещё будет getUnsignedAngle, то можно выделить подкатегорию angle, а в неё запихнуть getSigned/getUnsigned и ещё чего-нибудь. Если чего-нибудь не будет — то не нужно ради двух функций мутить целую таблицу.
Egor
unsigned - есть готовая функция встроенная
Snusmumriken
Тады запихни и её сюда ))
Snusmumriken
Пущай будут рядышком.
Egor
да у меня просто разрыв мозга немного. автопилот есть для планеты и космоса. и это будет два разнх кода т.е. для космолета и самолета. А также..может быть такое, что они будут объединены(в большинстве случаем) т.е. корабль летает и в космосе и на планете. Вот и думаю, может все в одном файле сделать?
Egor
но опять же чисто космическому нафиг не нужен автопилот для планеты и наоборот
Egor
а хотя... планетарный автопилот можно юзать для облета любых других объектов
Egor
@Snusmumriken ничего что флужу или запрещено?
Snusmumriken
Переключение между космосом и планетой в зависимости от того, какой режим сейчас активен. Ну и набор связок между.
Snusmumriken
Допустим, долететь до ближайшей точки до тебя на планете, и уже потом ориентироваться на ней.
Snusmumriken
Это даёт некоторые погрешности в плане оптимальности, но проще.
Egor
хотя что космический или планетарный почти ничем не отличаются, только одной функцией
Egor
на всякий случай вынесу код общий (мини функции) вдруг что на будущее понадобится
Egor
Snusmumriken
Потом
Egor
То чувство, что не знаешь куда засунуть функцию, так как она юзается и как чать либы и как самостоятельная фукнция -_-
Egor
Как правильнее сделать:
local myval = {}
-- оно меняется всегда при каждом тике
myval.data = long_long_value_from_game
function myval.fun()
-- проблема в том, что эта переменная как я понял кэшируется
-- можно ли сделать чтобы оно не кэшировалась, а вынес наружу, так как переменная юзается несколько раз.
myval.data
end
Snusmumriken
Ммм. Как ты получаешь long_long_value_from_game, если оно постоянно меняется?
Egor
Egor
стало лень и просто их продублировал везде
Nikola
что я делаю не так?
if words[wold] == nil then
words[words] = true
return word
end
Highly Likely
Nikola
Опечатка во второй строчке?...
таки да, премного благодарен. интересное наблюдение: при гуглении обратной таблицы, что бы почитать юзкейс, поисковик ничего толком не дал
Highly Likely
Nikola
хух, таки нашел данный термин. начал уже на шизу думать)
Highly Likely
Всё равно ничего не понял, но ладно
🐅🤦♂️
Есть репозиторий love2d проекта под управлением git. Решил попробовать накачать сторонних библиотек сабмодулями. Сделал git submodule init. Потом качаю так git submodule add https://github.com/YoungNeer/lovelib.git Скачивается. В main.lua пишу
love.colors = require "lovelib/lovecc/lovecc", но при запуске получаю ошибку, что lovecc.lua не может найти модуль colorcodes. Этот модуль лежит на одном уровне с файлом lovecc.lua. В lovecc.lua первая строка
local colors=require 'colorcodes'. Как-то можно добавить пути поиска модулей, что-бы подключались файлы из lovelib/lovecc/lovecc без изменения кода скачанной библиотеки?
🐅🤦♂️
Пошел читать "Package Path"
Anonymous
Друзья, кто проводил сравнение JS и Lua в плане скорости? Можете сказать кто где выигрывает?
vvzvlad
ТВОЙ НИК НА МЕНЯ ОРЕТ
Anonymous
извини, попрошу его потише быть
Snusmumriken
Друзья, кто проводил сравнение JS и Lua в плане скорости? Можете сказать кто где выигрывает?
У жаваскрипта есть популярная компилирующая виртуальная машина v8, которую используют во всяких браузерах и нодах.
У луа есть две основные виртуальные машины: PUC Lua (дефолтная) и luajit — компилирующая.
PUC Lua — довольно быстрая фиговина для не-компилирующих скриптов, обгоняет всякие дефолтные питоны и жаваскрипты. Luajit — где-то обгоняет v8, где-то не совсем: лучше всего luajit справляется с циклами с минимумом условий и математикой, на этом он обгоняет всех подряд. И на вызове внешних функций, они там быстрее чем в C.
vvzvlad
jit на больших циклах победит
Anonymous
Snusmumriken
Когда как.
Snusmumriken
Вот на вот этой задаче — вот так вот.
https://habr.com/ru/post/113804/
Anonymous
видел статью, но мне показалось не совсем корректное сравнение
Anonymous
а, нет, это другая статья
Anonymous
прошу прощения
Snusmumriken
а в % соотношении насколько быстрее luajit, допустим, на больших циклах?
Более-менее нормальное. С учётом не очень оптимизированного кода и на жаваскриптовой, и на луажытной стороне.
Я надеюсь, ты понимаешь что синтетические тесты — это полная фигня? Всегда есть совершенно конкретная таска, которую что-то выполняет быстрее а что-то медленнее. В среднем, луажыт быстрее на циклах (когда трассы успевают разогреться).
Anonymous