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 не используют. Они по электронной почте патчи шлют.
Columbus
Columbus
Anonymous
Голуби сдохнут по пути
Snusmumriken
Зато романтика. Перфокарты привязанные к лапкам голубей.
Columbus
не, у них би
Columbus
бинарник на бересте выцарапан
Snusmumriken
В ASCII. неотображаемые символы приходится перебирать лапками (((
Символ перевода строки приходится рисовать отдельно.
Dika
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
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мб файлы разом хуярил и всё ок
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, хорошая библиотека
B
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
B
я думал просто это на восприятие языка плашка влияет
типа ru_RU и хоба кириллица больше не сидит вне закона
Snusmumriken
Это было бы слишком радужно : )
Чтобы в консоль выводить кириллицу (венда, utf8) - к твоим услугам
os.execute'chcp 65001', т.е. просто переключение страницы интерпретации символов. Под ansi/win1251 - аналогично свои страницы.
Snusmumriken
А вот те же регулярки, например, всё равно сложнее, ибо паттерны %w/%d/%a и т.п. рассчитаны на ansi-однобайтовые символы, а кириллица (за исключением дополнительного блока ansi, который учитывается в паттернах разве что как "знаки препинания") - двухбайтовая. Такие пироги.
Поэтому для регулярок над многобайтовой фигнёй - придётся мутить свои автоматы регулярок, а лучше - таблицы трансляции по категориям.
Nick
Snusmumriken
Прошёл, очень странный тест.
Snusmumriken
Ну нет, скорее всего. Но фигня в том, что объективной корелляции интеллект/счастье нет, плюс понятие счастья очень расплывчато.
Я могу скомбинировать и упростить всё что слышал о счастье в "Счастье - это когда всё вокруг правильно, и ты получаешь от этого удовольствие", но всё равно термин слишком стрёмный.
Кстати, мне так никто не может сказать, чем дружба отличается от приятельства, а любовь от влюблённости от дружбы от приятельства. Или расплывчатая ненаучная ерунда, или описывается как "выделение определённых гормонов от взаимодействия с конкретным человеком". Стрёмно, в общем.
Tverd
ну допустим есть описание, чем влюбленность отличается от любви... одни гормоны и другие )
B
есть у кого какие ссылочки с примерчиками или более менее полным описанием
B
работы со стрингами, что как искать, как фильтровать, как можно поступить в нетипичных ситуациях и тд тп
Snusmumriken
Строки?