Columbus
3д головоломка с физическими задачами
Snusmumriken
Да, тут bullet должен быть норм.
Columbus
Типа использовать физику игры для открытия дверей и т.д.
Elias
Тогда стоит того, да :)
Snusmumriken
Просто тут народ типа "а давайте сделаем квадратную пушку которая будет стрелять миллионами квадратных пуль по миллиардам квадратов!".
Ну, типа этих же танчиков )))
Anonymous
Звучит неплохо
Nick
подскажите, если у меня nginx+lua и очень хочется lua 5.3, то проще переписать все например на тарантул и нгинх оставить только фронтендом, или есть еще варианты?
Snusmumriken
Так просто не выйдет и скорость потеряешь.
Ну, или биндить lua5.3 к nginx, мда.
Nick
оно там не очень совместимо
Snusmumriken
Тарантул с openresty - отлично совместимы, там один и тот же luajit (5.1).
Nick
а как соотносятся luajit и lua по версиям?
5.3 я хочу из-за поддержки юникода
Snusmumriken
Ммм. Ставишь либу на luajit с юникодом, ту же самую что и в 5.3.
Saphire
mva
mva
;)
mva
mva
если юникодные переменные, то они есть и в luajit
mva
если string.utf8, то да, есть либа. Подключаешь её к JIT и не знаешь проблем.
Saphire
https://github.com/dibyendumajumdar/ravi o..o
mva
ravi - не то
Snusmumriken
Вот эта - идентична 5.3
https://github.com/starwing/luautf8
Elias
Чего там у тебя на С++ такого на 20к строк?
По большей части низкоуровневые вещи, либо те, которые легко обобщаются вне зависимости от игры. Рендеринг, ввод, коллизия, ECS, GUI, тайл мэпы и пр.
Я использую SFML, который по идее уже должен сократить количество строк кода для многих вещей, но все равно как-то накопилось.
А вся игровая логика на Lua. Пока что контента маловато, так что 5к строк пока что. :)
Saphire
ECS \o/
Saphire
...а насколько большой мир поддерживается? Какие тыйлы и взаимодействия между ними?
Columbus
По большей части низкоуровневые вещи, либо те, которые легко обобщаются вне зависимости от игры. Рендеринг, ввод, коллизия, ECS, GUI, тайл мэпы и пр.
Я использую SFML, который по идее уже должен сократить количество строк кода для многих вещей, но все равно как-то накопилось.
А вся игровая логика на Lua. Пока что контента маловато, так что 5к строк пока что. :)
а ты юзаешь наследование\виртуальные методы?
Saphire
Elias
Я не тестировал пока что очень большие карты, но по идее поддерживаются. Карты состоят из чанков тайлов 8x8, хранятся в разреженной матрице, поэтому место не тратится впустую и в итоге можно эффективно хранить не только прямоугольные карты.
С тайлами пока мало взаимодействий, коллизия, а также можно коллбеки писать в зависимости от типа тайла (например сделать тайл, который будет тайлом пропасти, в результате столкновения с которым игровые объекты будут "падать")
Columbus
Нафиг, ECS же?
нууу, знаешь, лично мне такая система не нравится
Saphire
Saphire
Columbus
оу...
Saphire
Columbus
Чем же?
тем что каждый компонент должен соответствовать родителю
Columbus
а у меня там сооовсем все разное
Saphire
...эм
Saphire
ECS это когда у тебя куча мелких компонентов, которые практически не связаны друг с другом
Saphire
И ты можешь легко навесить требуемые на любой объект игровой
Columbus
например, класс C_Mesh, в котором находятся несколько методов по управлению буфферами, несколько буфферов и еще материал с текстурой, а в классе C_ParticleEmitter куча совсем других вещей
Columbus
и наследовать все от компонентов как-то не хочется
Columbus
ибо тогда в родителе придется объявлять все это
Columbus
а, например, в классе для работы с частицами нахер не нужны буфферы нормалей и tangent\bitangent, а так же методы их обработки
Saphire
Columbus
и в C_Mesh нахер не нужны поля и методы для обработки частиц
Saphire
...ты вообще про что-то другое говоришь, ибо это не ECS
Columbus
ну да, я не реализовывала ECS за ненадобностью
Elias
Почему json, а не луа?
Долго использовал Lua, но потом захотелось явно отделить данные от логики. JSON для данных как-то больше нравится. Особенно тем, что не требует состояния Lua, легко парсится и сериализуется. Это нужно для визуального редактора Entity
Columbus
я видела исходники движков с использованием ECS, но имхо, сложно понять что к чему относится
Columbus
и что где используется
Saphire
Фигово написали видимо..
Columbus
ECS хорошо использовать в 2D движках, вроде как, ибо все их используют именно там. Для 3D я не видел такого
Columbus
CryEngine не использует это, Banshee Engine, Serious Engine, XRay Engine
Elias
В 3d только так используют. Тот же UE4 - ECS
И вообще философия пошла от 3d игр, которым понадобилась тонна производительности.
Columbus
да, (а)уе4 этим страдает
Elias
Deus Ex, Neverwinter Nights, Thief, Tony Hawk's Pro Skater...
Сейчас тот же Overwatch написан на ECS. Первое, что в голову пришло. :)
Columbus
а у тебя есть их исходнки?
Columbus
и да, thief на UE написан
Elias
Неа. Знаю об этих вещах по блог постам и презентациям на конференциях
К сожалению пока что на коммерческие игры с открытым кодом на ECS не натыкался. Давно ничего крупного не раскрывали
Snusmumriken
А чем ESC отличается от всего остального?
Условно, куча объектов с координатами и размерами, отнаследованные от класса сущности, и все в куче крутятся?
Columbus
хз, я пишу, конечно, лютый говнокод, но люблю, когда этот говнокод понятен
Elias
Они ещё создаются из блоков, компонентов
Какое-нибудь дерево имеет collision, graphics, transform
А враг имеет ещё ai, health и пр.
Columbus
имхо, ECS сложнее для чтения, чем система ВЛОБ
Columbus
Saphire
Saphire
Columbus
пишешь в лоб
Snusmumriken
А, типа сущности с повешенными на них классификаторами, а ля "drawable/collidable/updatable".
Columbus
просто пишешь, как хочешь, а не по шаблону
Elias
Ещё стоит упомянуть про системы, которые потом итерируют по всем активным компонентам и что-то делают для них. Например проверяют коллизию на Collision component
Да, что-то похожее на то, как раньше делали (и делают, я думаю)
Как наследование от IDrawable, ICollidable и пр.
Только вместо наследования композиция
Snusmumriken
Извращения : )
На самом деле, это офигенно сложная фиговина, особенно итерирование.
Как ты будешь отбирать объекты? Проходить по всей куче из ста миллиардов висящих в оперативке?
Columbus
опять меня убеждают в том, что я все это время писала хуйню
Columbus
эххх
Elias
Отбирать, в смысле знать какие объекты обновлять, а какие - нет?
Elias
опять меня убеждают в том, что я все это время писала хуйню
Не, нормально и ООП юзать, если быть аккуратным. Просто для больших игр с огромным числом видом объектов и их взаимодействий, эта система быстро становится адовой
Для каких-нибудь рпг, например
Для игр, где количество типов объектов не является большим, ООП нормально работает
Snusmumriken
Отбирать, в смысле знать какие объекты обновлять, а какие - нет?
Ну вроде того. Я показывал пример где обрезаем сущности в spartial hash коллайдера ориентируясь по камере, и это оказалось самым рациональным.
Но для этого нужно иметь этот самый spartial hash и цеплять сущности к нему, чтобы была какая-то пространственная индексация.
Очень далёкие объекты не нужно обновлять, даже если они активны. А прохождение по списку из сотен миллионов сущностей - долго.
Snusmumriken