ёж
> Да купи ты уже пэйджер :)
На что ты намекаешь?
ёж
> Да купи ты уже пэйджер :)
> Или печатай что хотел сказать.
Тут такой кринж, что не надо слов.
ёж
> Да купи ты уже пэйджер :)
ёж
> Что лучше только читать чем таким образом "писать".
Это уж точно
Вы в rbfx вроде ECS хотели? Есть какие-то движения?
Я ща леталку (https://github.com/dviglo2d-learn/mini_games) с иерархии классов на entt переписываю, че-то вообще не нравится. Но доведу уже до конца как эксперимент, выложу.
Писать неудобно, читать полотна си-подобного кода еще неудобнее. Хотя я мб по неопытности что-то не так делаю
1vanK
> Вы в rbfx вроде ECS хотели? Есть какие-то движения?
Я в своей игре на rbfx примотал EnTT, полет нормальный, очень сильно упрощает жизнь.
Интеграция висит как плагин, мержить в движок не хочу, потому что движок — не мусорка для кода, там и так его хватает.
> Писать неудобно, читать полотна си-подобного кода еще неудобнее. Хотя я мб по неопытности что-то не так делаю
EnTT не каждой игре полезен, и не во всем. Я использую одновременно EnTT копоненты и обычные жирные компоненты, для разных целей.
А как с синглтонами по феншую сделать? Я щас так делаю, но мб есть способ покрасивше
auto player_view = reg.view<CObject, CPlayerMarker>(); entity player_ent = player_view.front(); // Игрок всегда один CObject& player_obj = player_view.get<CObject>(player_ent);
CPlayerMarker - это пустая структура, просто обозначает игрока
1vanK
В общем-то так и делаю. Компонент, который тянет логику игрока, если их больше одного — что-то пошло не так. Если один, работаю с единственным. Если ноль, то ничего не делаю.
1vanK
> Писать неудобно, читать полотна си-подобного кода еще неудобнее. Хотя я мб по неопытности что-то не так делаю
Вещи, в которых EnTT выигрывает, в моей игре:
- Логика и данные объектов, которые из сцены вообще выгружены. Как только появляется какая-то подгрузка вещей, сразу приходится придумывать, а где хранить штуки, если не в основной сцене. EnTT это естественным образом решает.
- Очень дешевая итерация по наборам компонентов. Итерация по view<A, B, C>() имеет линейную сложность от количества А. Поэтому мне очень легко написать логику, которая работает только на тех объектах, которые реализуют конкретные черты — и я понимаю, насколько это будет дорого. Очень часто я первым делом фильтрую только загруженные в сцену объекты, или только получатели события. А если надо и незагруженные — то выбираю самый узкий компонент.
- События через компоненты более безопасные, но ценой лага. Если я хочу уничтожить объект, я вешаю на него компонент OnDestroyed. Это позволяет мне произвести все уничтожения в одном месте игрового цикла, что упрощает логику. Когда события зависят от других событий (урон - уничтожение - реакция на уничтожение - и так далее), опасно вызвать всю цепочку синхронно — никогда не знаешь наверняка, какой именно код ты вызовешь и как он тебе сломает состояние.
- Дешево делать много мелких компонентов, что само по себе почти бесполезно, но зато очень хорошо сочетается с view. Мне не надо проверять, что я нашел нужный мне объект. Я делаю критерий компонентом, и если я смог найти объект, значит он и есть нужный.
Eugene
> Итерация по view<A, B, C>() имеет линейную сложность от количества А.
То есть надо еще соображать, какой компонент первым ставить? Там еще с группами какая-то замута, не разбирался пока.
> События через компоненты более безопасные, но ценой лага. Если я хочу уничтожить объект, я вешаю на него компонент OnDestroyed.
Ну я так и без entt делал (чистил списки от уничтоженных объектов в конце апдейта):
https://github.com/dviglo2d-learn/mini_games/blob/main/letalka/sr… cpp#L190-L193
Лага в кадр при этом нет в принципе, просто в каждой функции работающей в с объектом проверяешь, что он не мертв.
В entt еще легче, так как можно при фильтрации исключать мертвые:
// Ищем столкновения корбаля игрока с кораблями противника auto enemy_view = reg.view<CObject, CEnemy>(exclude<CDestroyedMarker>);
дискорд забанили в рф кста седня, переезд не планируете? или неактуально
1vanK
> переезд не планируете?
А куда ехать то? Везде и так всякими беженцами и релокантами переполнено, тут ещё какие-то игроделы приедут...
be_hip
> А куда ехать то? Везде и так всякими беженцами и релокантами переполнено, тут ещё какие-то игроделы приедут...
я про другой сервис вообще-то) физически они уже переехали, я им новости из рф сообщаю)
1vanK
> я про другой сервис вообще-то
Про сервис для покупки дешёвых авиабилетов?