Elias
Ну да, я использую такой хэш. И если ты объекты распихиваешь по бакетам, то не нужно будет проходиться по всем объектам на карте, а только по объектам, которые лежат в активной части карты, например
Elias
ООП бывает разный Самая проблематичная система, это когда у тебя есть наследование в духе Character -> Enemy -> Troll -> SuperMegaTrollWithGuns Если много типов объектов, то такое дерево быстро разростается и его не так удобно поддерживать. Объекты часто тащат за собой много ненужных зависимостей, особенно данных. Часто любят в класс Entity/Character напихать всего подряд, в итоге у самых простых объектов есть много объектов и членов класса, что как-то не ок. Чуть лучше - это когда ты наследуешь от IDrawable, ITransformable и пр. Это почти уже ECS, где различные аспекты объектов разбиваются на разные классы, а затем Entity собираются из них. И это очень близко к ECS и можно даже так ECS написать, но проблема в том, что ты не можешь создавать без рекомпиляции новые сущности. Т.е. если я захочу сделать новый тип объекта, я пропишу один JSON и всё. Иначе нужно было бы писать код, рекомпилировать его и пр. В индустрии, где те же геймдизайнеры хотят писать скрипты и не заниматься C++ кодом, это особенно полезно. Можно изменить многие вещи для каждого типа объекта не прикасаясь к коду вообще. :)
Elias
Вот так выглядит JSON одной из Entity
Columbus
кстати, какую либу для json ты юзаешь
Columbus
у меня пока только xml есть
Elias
https://github.com/nlohmann/json
Elias
И да, в ECS меня долго путал концепт систем Там вроде как должна быть вся логика. Что-то вроде: пробегаемся по компонентам X,Y и делаем для каждого Z Но на самом деле это нужно только для некоторых вещей, особенно низкоуровневых: физики, рендеринга и пр. Обычная же логика (в духе "что делать, если враг заметил игрока" или "что делать, если игрок упал с большой высоты") пишется в коллбеках и машинах состояний. Есть много "игровых" компонентов, которые просто не требуют итерации по ним постоянно. Health, Inventory и пр.
Snusmumriken
Получил нотариально заверенное подтверждение что пингвины не умеют писать код :<
Elias
А я думал, что там Linux пишут
Elias
Интересно, проведен ли туда интернет вообще По идее должен быть. Хотя может спутник для связи используют
Пингвины Github не используют. Они по электронной почте патчи шлют.
Anonymous
Голуби сдохнут по пути
Snusmumriken
Зато романтика. Перфокарты привязанные к лапкам голубей.
Columbus
не, у них би
Columbus
бинарник на бересте выцарапан
Snusmumriken
В ASCII. неотображаемые символы приходится перебирать лапками ((( Символ перевода строки приходится рисовать отдельно.
Snusmumriken
Это уже чит. Во, ююканный текст! http://lurkmore.to/%D0%AE%D1%8E%D0%BA
Anonymous
Привет
Anonymous
тут есть ктото кто хорошо знает mysql на уровне функций
Columbus
Долго ли использовать glm::intersect? Надо ебануть луч и проверить, пересечёт ли он сложную геометрию.
Columbus
Или как еще можно сделать интерсекцию для кучи сложной геометрии на сцене?
B
есть возможность запустить вторую консоль луа на паралельную работу? просто это Get-Content name, name2 -Encoding Byte | Set-Content name3 -Encoding Byte работает куда медленнее чем это copy /b name, name2 name3
Snusmumriken
Ничосе сколько вопросов разом. > тут есть ктото кто хорошо знает mysql на уровне функций Я - только на уровне простых запросов :< > Долго ли использовать glm::intersect? Надо ебануть луч и проверить, пересечёт ли он сложную геометрию. Не в курсе, попробуй или упростить геометрию, или въебать пространственную индексацию, и сравнивать луч только с тем что он пересекает. В моих танчиках, алгоритмом построения прямых (https://ru.wikipedia.org/wiki/Алгоритм_Ву), по вектору (лучу) движения объекта вырезаются все квадраты spartial hash, которые пересекает луч, из которых выдираются объекты принадлежащие этому spartial hash далее, объекты сортируются по дистанции до начала луча и начинается сравнение. Объект бросающий луч - перемещается к ближайшему объекту из списка, вызывается функция обновления объекта с долей от delta time, и если при этом вектор движения/позиции объекта изменился (кто-то кого-то пихнул/толкнул/отскочил) - всё заново, если нет - продолжаем. Я так обхожу множественные столкновения и отскоки за один кадр и туннели коллизии. Впрочем, у нашего мира тоже проблемы с коллизией (https://ru.wikipedia.org/wiki/Туннельный_эффект) > есть возможность запустить вторую консоль луа на паралельную работу? Думаю что нет. Или попробовать через те же lanes.
Anonymous
Vlad можешь запустить несколько cmd.exe для обработки записанных .bat pipe = io.popen("cmd.exe /c ".. arg, "r") print("Output: ", pipe:read("*a")) И так несколько раз. В порыве безумности можно попытаться соорудить и взаимную связь через пайпы между консолями... Кто на что горазд
Anonymous
Vlad ещё для копирования на винде есть robocopy, задавай потоков сколько влезет: https://ss64.com/nt/robocopy.html
Snusmumriken
Легко: print(('hey!'):match('(%d.)!'))
Snusmumriken
http://www.lua.org/pil/20.2.html http://lua-users.org/wiki/PatternsTutorial И много-много баловаться, пока не вкуришь. Всё то же самое как в js/perl, только отсутствует количество повторов паттерна {a[, b]} и вместо \ используется %. Вроде всё.
Anonymous
эх
Anonymous
жаль в луа нет нормальных паттернов
B
Vlad можешь запустить несколько cmd.exe для обработки записанных .bat pipe = io.popen("cmd.exe /c ".. arg, "r") print("Output: ", pipe:read("*a")) И так несколько раз. В порыве безумности можно попытаться соорудить и взаимную связь через пайпы между консолями... Кто на что горазд
я просто хотел что б оставалось в одной среде, если уже начал на powershell'е то и делать там же просто там это дело занимает достаточно много времени, я ради пробы взял файлик под 100 метров и оно мне компудахтер поломало
B
а кстати в самом луа нет возможности мержа файлов?
Anonymous
Типа cat file1 file2 > bigfile ?
B
ну что б оно воспринимало файл как бинарник
Anonymous
ну так
Anonymous
открой как бинарник
Anonymous
и запиши
Anonymous
и допиши второй в конец
Anonymous
в чём проблема?
Anonymous
Побайтово прочитал, побайтово записал. На винде это "rb" "wb", чтобы оно само концы строк не подменяло и другие фокусы
Anonymous
f1 = io.open(file, 'rb') c1 = f1:read('*a') f2 = io.open(file2, 'rb') c2 = f2:read('*a') fc = io.open(file, 'wb') fc:write(c1) fc:write(c2) fc:close()
Anonymous
не?
Anonymous
по крайней мере, у меня работало
Anonymous
А если файл 6 ГБ, а ты разом фигачишь? ^_^
Anonymous
ну так никто про размеры не говорил
Anonymous
я 6мб файлы разом хуярил и всё ок
Snusmumriken
жаль в луа нет нормальных паттернов
Есть в сторонних либах. Use it, luke.
B
просто не встречал нигде rb wb
Anonymous
@GroovyCake а ещё можно вызвать cmd из ps: https://stackoverflow.com/a/8753353
Anonymous
Но они работают :) Создай файл один раз через w, и wb, запиши туда \n на винде. 1) должно быть \r\n 2) \n Posix такой фигнёй вроде совсем не страдает
B
жалуется что ждет стринг а получает на запись файл
Anonymous
Код?
B
local file1 = io.open(path1, 'rb') local fileInfo1 = file1:read('*a') local file2 = io.open(path2, 'rb') local fileInfo2 = file2:read('*a') local file3 = io.open(gPath .. [[name.exe]], 'wb') file3:write(file1) file3:write(file2) file3:close() file1:close() file2:close()
Anonymous
да, запутался ты в именах. Пиши же fileInfo1/2 а не file1/2
Anonymous
local file1 = io.open(path1, 'rb') local fileInfo1 = file1:read('*a') local file2 = io.open(path2, 'rb') local fileInfo2 = file2:read('*a') local file3 = io.open(gPath .. [[name.exe]], 'wb') file3:write(fileInfo1) file3:write(fileInfo2) file3:close() file1:close() file2:close()
B
а сорян =) поправил, работает о ну так тут уже performance в разы выше, тот же 100М файл как внучёк-пирожек забил
B
а вот подумал а можно же и копирование файлов выполнять в такой манере? как раз без использования сторонних вещей
Anonymous
Можно. Только Lua не C. (Если очень честно, то оверхед может быть большой только на вызов cmd. Если очень-очень честно, то оставлять эту функцию стоит за ОС, мало ли какие там флаги у файла и возможности файловой системы) В любом случае писать-копировать следует блоками, а не то всю память жирным файлом забьёшь.
Elias
Ещё есть Lua File System, хорошая библиотека
Anonymous
ага
Anonymous
что-то типа
Anonymous
делаешь буфер, читаешь в него, пишешь это в нужный файл, повторить пока не закончится файл :)
Snusmumriken
function copyFile(src, dst, csize) src = assert(io.open(src, 'rb')) dst = assert(io.open(dst, 'wb')) csize = csize or 1024 local chunk = src:read(csize) while chunk do dst:write(chunk) chunk = src:read(csize) end src:close() dst:close() end
Anonymous
угу, именно:)
B
а кто что про setlocale напишет? как куда пирменять, зачем? и у меня кстати при таком копировании возникли потери а ннет, они возникли из-за того что я забыл закрыть файлы после выполнения
Anonymous
Яндекс пишет лучше нас: http://pgl.yoyo.org/luai/i/os.setlocale Можешь поиграться с региональными настройками в винде и посмотреть что будет
Snusmumriken
а кто что про setlocale напишет? как куда пирменять, зачем? и у меня кстати при таком копировании возникли потери а ннет, они возникли из-за того что я забыл закрыть файлы после выполнения
Ну например setlocale('RU_ru') (или что-то такое) заставляет tonumber превращать строки типа таких "123,132" в числа (разделитель дробной части - запятая)
B
я думал просто это на восприятие языка плашка влияет типа ru_RU и хоба кириллица больше не сидит вне закона
Snusmumriken
Это было бы слишком радужно : ) Чтобы в консоль выводить кириллицу (венда, utf8) - к твоим услугам os.execute'chcp 65001', т.е. просто переключение страницы интерпретации символов. Под ansi/win1251 - аналогично свои страницы.
Snusmumriken
А вот те же регулярки, например, всё равно сложнее, ибо паттерны %w/%d/%a и т.п. рассчитаны на ansi-однобайтовые символы, а кириллица (за исключением дополнительного блока ansi, который учитывается в паттернах разве что как "знаки препинания") - двухбайтовая. Такие пироги. Поэтому для регулярок над многобайтовой фигнёй - придётся мутить свои автоматы регулярок, а лучше - таблицы трансляции по категориям.
Snusmumriken
Прошёл, очень странный тест.
Snusmumriken
Ну нет, скорее всего. Но фигня в том, что объективной корелляции интеллект/счастье нет, плюс понятие счастья очень расплывчато. Я могу скомбинировать и упростить всё что слышал о счастье в "Счастье - это когда всё вокруг правильно, и ты получаешь от этого удовольствие", но всё равно термин слишком стрёмный. Кстати, мне так никто не может сказать, чем дружба отличается от приятельства, а любовь от влюблённости от дружбы от приятельства. Или расплывчатая ненаучная ерунда, или описывается как "выделение определённых гормонов от взаимодействия с конкретным человеком". Стрёмно, в общем.
Tverd
ну допустим есть описание, чем влюбленность отличается от любви... одни гормоны и другие )
B
есть у кого какие ссылочки с примерчиками или более менее полным описанием
B
работы со стрингами, что как искать, как фильтровать, как можно поступить в нетипичных ситуациях и тд тп
Snusmumriken
Строки?