@ProLua

Страница 191 из 307
Group Butler [beta]
03.11.2017
06:29:01
Добро пожаловать в чат pro.lua, Nick! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Nick
03.11.2017
06:30:13
подскажите, если у меня nginx+lua и очень хочется lua 5.3, то проще переписать все например на тарантул и нгинх оставить только фронтендом, или есть еще варианты?

Snusmumriken
03.11.2017
06:30:36
Так просто не выйдет и скорость потеряешь. Ну, или биндить lua5.3 к nginx, мда.

Nick
03.11.2017
06:31:03
оно там не очень совместимо

Google
Snusmumriken
03.11.2017
06:34:04
Тарантул с openresty - отлично совместимы, там один и тот же luajit (5.1).

Nick
03.11.2017
06:39:23
а как соотносятся luajit и lua по версиям? 5.3 я хочу из-за поддержки юникода

Snusmumriken
03.11.2017
06:39:58
Ммм. Ставишь либу на luajit с юникодом, ту же самую что и в 5.3.

Saphire
03.11.2017
06:42:00
Чего там у тебя на С++ такого на 20к строк?

Snusmumriken
03.11.2017
06:45:59
а как соотносятся luajit и lua по версиям? 5.3 я хочу из-за поддержки юникода
В общем, это не повод отказываться от luajit, он слишком крут. Ещё спасибо скажешь, когда у тебя бек заработает в 30-80 раз быстрее, и ты сможешь подключать абсолютно любые с/с++-либы на лету без перекомпиляций.

Vadim
03.11.2017
07:02:43
;)

а как соотносятся luajit и lua по версиям? 5.3 я хочу из-за поддержки юникода
смотря что именно ты понимаешь под поддержкой юникода

если юникодные переменные, то они есть и в luajit

если string.utf8, то да, есть либа. Подключаешь её к JIT и не знаешь проблем.

Saphire
03.11.2017
07:04:16
https://github.com/dibyendumajumdar/ravi o..o

Vadim
03.11.2017
07:04:37
ravi - не то

Snusmumriken
03.11.2017
07:07:35
Вот эта - идентична 5.3 https://github.com/starwing/luautf8

Google
Elias
03.11.2017
07:51:06
Чего там у тебя на С++ такого на 20к строк?
По большей части низкоуровневые вещи, либо те, которые легко обобщаются вне зависимости от игры. Рендеринг, ввод, коллизия, ECS, GUI, тайл мэпы и пр. Я использую SFML, который по идее уже должен сократить количество строк кода для многих вещей, но все равно как-то накопилось. А вся игровая логика на Lua. Пока что контента маловато, так что 5к строк пока что. :)

Saphire
03.11.2017
07:51:40
ECS \o/

...а насколько большой мир поддерживается? Какие тыйлы и взаимодействия между ними?

Elias
03.11.2017
07:56:03
Я не тестировал пока что очень большие карты, но по идее поддерживаются. Карты состоят из чанков тайлов 8x8, хранятся в разреженной матрице, поэтому место не тратится впустую и в итоге можно эффективно хранить не только прямоугольные карты. С тайлами пока мало взаимодействий, коллизия, а также можно коллбеки писать в зависимости от типа тайла (например сделать тайл, который будет тайлом пропасти, в результате столкновения с которым игровые объекты будут "падать")

Columbus
03.11.2017
07:56:16
Нафиг, ECS же?
нууу, знаешь, лично мне такая система не нравится

Elias
03.11.2017
07:57:36
а ты юзаешь наследование\виртуальные методы?
Наследование только в таком духе. Component <- GraphicsComponent ;) А все типы игровых объектов описываются в JSON

Columbus
03.11.2017
07:57:50
оу...

Columbus
03.11.2017
07:58:24
Чем же?
тем что каждый компонент должен соответствовать родителю

а у меня там сооовсем все разное

Saphire
03.11.2017
07:58:50
...эм

ECS это когда у тебя куча мелких компонентов, которые практически не связаны друг с другом

И ты можешь легко навесить требуемые на любой объект игровой

Columbus
03.11.2017
07:59:52
например, класс C_Mesh, в котором находятся несколько методов по управлению буфферами, несколько буфферов и еще материал с текстурой, а в классе C_ParticleEmitter куча совсем других вещей

и наследовать все от компонентов как-то не хочется

ибо тогда в родителе придется объявлять все это

Google
Elias
03.11.2017
08:00:26
А можно например сделать тайлы, которые создают, передают и потребляют некие ресурсы с соседями?
Неа. В моей игре нет подобных вещей, но я думаю, что можно было бы написать систему, которая бы пробегалась по карте, смотрела на id тайлов и делала что-то ресурсамм.

Columbus
03.11.2017
08:01:08
а, например, в классе для работы с частицами нахер не нужны буфферы нормалей и tangent\bitangent, а так же методы их обработки

Saphire
03.11.2017
08:01:22
Columbus
03.11.2017
08:01:32
и в C_Mesh нахер не нужны поля и методы для обработки частиц

Saphire
03.11.2017
08:02:12
...ты вообще про что-то другое говоришь, ибо это не ECS

Columbus
03.11.2017
08:02:37
ну да, я не реализовывала ECS за ненадобностью

Elias
03.11.2017
08:02:59
Почему json, а не луа?
Долго использовал Lua, но потом захотелось явно отделить данные от логики. JSON для данных как-то больше нравится. Особенно тем, что не требует состояния Lua, легко парсится и сериализуется. Это нужно для визуального редактора Entity

Columbus
03.11.2017
08:03:25
я видела исходники движков с использованием ECS, но имхо, сложно понять что к чему относится

и что где используется

Saphire
03.11.2017
08:04:41
Фигово написали видимо..

Elias
03.11.2017
08:04:51
А если например сделать некий таймер, и требуемые тайлы говорят "тыкни эту функцию через Н времени"?
Сейчас такие вещи могут делать только Entity. Я думаю, что тайлы можно было бы сделать похожими на них чуть больше. :) Ну или создавать для особых тайлов Entity в соответствие

Columbus
03.11.2017
08:04:54
ECS хорошо использовать в 2D движках, вроде как, ибо все их используют именно там. Для 3D я не видел такого

CryEngine не использует это, Banshee Engine, Serious Engine, XRay Engine

Elias
03.11.2017
08:06:15
В 3d только так используют. Тот же UE4 - ECS И вообще философия пошла от 3d игр, которым понадобилась тонна производительности.

Columbus
03.11.2017
08:06:51
да, (а)уе4 этим страдает

Elias
03.11.2017
08:07:57
Deus Ex, Neverwinter Nights, Thief, Tony Hawk's Pro Skater... Сейчас тот же Overwatch написан на ECS. Первое, что в голову пришло. :)

Columbus
03.11.2017
08:08:27
а у тебя есть их исходнки?

и да, thief на UE написан

Elias
03.11.2017
08:09:43
Неа. Знаю об этих вещах по блог постам и презентациям на конференциях К сожалению пока что на коммерческие игры с открытым кодом на ECS не натыкался. Давно ничего крупного не раскрывали

Snusmumriken
03.11.2017
08:10:31
А чем ESC отличается от всего остального? Условно, куча объектов с координатами и размерами, отнаследованные от класса сущности, и все в куче крутятся?

Google
Columbus
03.11.2017
08:12:03
хз, я пишу, конечно, лютый говнокод, но люблю, когда этот говнокод понятен

Elias
03.11.2017
08:12:20
Они ещё создаются из блоков, компонентов Какое-нибудь дерево имеет collision, graphics, transform А враг имеет ещё ai, health и пр.

Columbus
03.11.2017
08:12:24
имхо, ECS сложнее для чтения, чем система ВЛОБ

Saphire
03.11.2017
08:13:05
в игре не обязательно будет враг
Так это же тупо пример

Columbus
03.11.2017
08:13:54
пишешь в лоб

Snusmumriken
03.11.2017
08:14:04
А, типа сущности с повешенными на них классификаторами, а ля "drawable/collidable/updatable".

Columbus
03.11.2017
08:14:11
просто пишешь, как хочешь, а не по шаблону

Elias
03.11.2017
08:15:18
Ещё стоит упомянуть про системы, которые потом итерируют по всем активным компонентам и что-то делают для них. Например проверяют коллизию на Collision component Да, что-то похожее на то, как раньше делали (и делают, я думаю) Как наследование от IDrawable, ICollidable и пр. Только вместо наследования композиция

Snusmumriken
03.11.2017
08:16:24
Извращения : ) На самом деле, это офигенно сложная фиговина, особенно итерирование. Как ты будешь отбирать объекты? Проходить по всей куче из ста миллиардов висящих в оперативке?

Columbus
03.11.2017
08:16:35
опять меня убеждают в том, что я все это время писала хуйню

эххх

Elias
03.11.2017
08:17:29
Отбирать, в смысле знать какие объекты обновлять, а какие - нет?

Snusmumriken
03.11.2017
08:17:42
опять меня убеждают в том, что я все это время писала хуйню
Расслабься. Ты всегда писала хуйню, пишешь хуйню и будешь писать хуйню, это нормально : )

Elias
03.11.2017
08:19:18
опять меня убеждают в том, что я все это время писала хуйню
Не, нормально и ООП юзать, если быть аккуратным. Просто для больших игр с огромным числом видом объектов и их взаимодействий, эта система быстро становится адовой Для каких-нибудь рпг, например Для игр, где количество типов объектов не является большим, ООП нормально работает

Snusmumriken
03.11.2017
08:19:20
Отбирать, в смысле знать какие объекты обновлять, а какие - нет?
Ну вроде того. Я показывал пример где обрезаем сущности в spartial hash коллайдера ориентируясь по камере, и это оказалось самым рациональным. Но для этого нужно иметь этот самый spartial hash и цеплять сущности к нему, чтобы была какая-то пространственная индексация. Очень далёкие объекты не нужно обновлять, даже если они активны. А прохождение по списку из сотен миллионов сущностей - долго.

Elias
03.11.2017
08:20:55
Ну да, я использую такой хэш. И если ты объекты распихиваешь по бакетам, то не нужно будет проходиться по всем объектам на карте, а только по объектам, которые лежат в активной части карты, например

ООП бывает разный Самая проблематичная система, это когда у тебя есть наследование в духе Character -> Enemy -> Troll -> SuperMegaTrollWithGuns Если много типов объектов, то такое дерево быстро разростается и его не так удобно поддерживать. Объекты часто тащат за собой много ненужных зависимостей, особенно данных. Часто любят в класс Entity/Character напихать всего подряд, в итоге у самых простых объектов есть много объектов и членов класса, что как-то не ок. Чуть лучше - это когда ты наследуешь от IDrawable, ITransformable и пр. Это почти уже ECS, где различные аспекты объектов разбиваются на разные классы, а затем Entity собираются из них. И это очень близко к ECS и можно даже так ECS написать, но проблема в том, что ты не можешь создавать без рекомпиляции новые сущности. Т.е. если я захочу сделать новый тип объекта, я пропишу один JSON и всё. Иначе нужно было бы писать код, рекомпилировать его и пр. В индустрии, где те же геймдизайнеры хотят писать скрипты и не заниматься C++ кодом, это особенно полезно. Можно изменить многие вещи для каждого типа объекта не прикасаясь к коду вообще. :)

Google
Columbus
03.11.2017
08:32:39
кстати, какую либу для json ты юзаешь

Страница 191 из 307