Как стать автором
Обновить
8
-3
Игорь Гулькин @StarKRE

Senior Game Developer

Отправить сообщение

Это да, но аббревиатура KISS расшифровывается: Keep It Simple Stupid. Последнее слово как-раз имеется ввиду, что ты можешь сделать решение более топорное, возможно даже немного накостылять и захардкодить

В идеале так и нужно писать простой код, соблюдая SOLID. В статье речь идет о том, что можно уйти в крайности:

  • Простая система, может превратиться в God Object

  • Супер гибкая система, может превратиться в спагетти.

Поэтому в статье объясняется, что нужно держать баланс. Нельзя просто следовать SOLID. В тоже время нужно контролировать, чтобы Stupid классы не превращались в God Object'ы.

Такое сработает, если разработчик уже решал похожую задачу ранее. Если для специалиста задача новая, то легко угодить в ловушку двух зайцев. Думать одновременно о том, чтобы код и работал и был причесан, может очень сильно тормозить процесс разработки (по себе знаю). В результате будет потрачено больше времени, сил и энергии. Поэтому рабочий код и чистый код — это разного рода задачи, и лучше рефакторить после проверки работоспособности кода.

К сожалению не будет удобнее, уже проходил это с интерфейсами. В результате на большом проекте у тебя будет 500+ интерфейсов, которые нужно будет прописывать на каждый чих, и код-база будет расти слишком быстро. Поэтому в атомарном подходе в основном лучше использовать динамическую типизацию вместо статической.

character.Is("TakeDamagable");

Это и есть интерфейс, просто динамически типизированный.

Но сделать вот так на атомарном подходе тоже можно (писал про пример с аптечкой)

character is IDamagable

Вы просто не поняли :)

А зачем сериализовывать все? Если мы говорим про мультиплеер, то достаточно сериализовать состояние объекта (то есть данные) и синхронизировать их с игровым объектом на сервере.

Тут да, в атомарном подходе объект по умолчанию представляет собой набор данных и логики, а в ECS сущность — только данные. Но на самом деле это не мешает создать объект на атомарном подходе только из данных без логики, и позволить другим классам и системам манипулировать этими данными.

Также если нужно, можно добавлять и удалять данные объекта в Run-time по аналогии с добавлением и удалением компонентов в сущности. (см главу про Динамические объекты)

Не совсем понял примеры с кодом проброса геттеров из конкретных компонентов, можешь, плиз, привести пример кода?

Ключевое отличие атомарного подхода от ECS заключается в том, что атомарный подход остается в парадигме ООП, а ECS нет. Атомарный подход подчиняется принципам ООП: инкапсуляция, наследование, полиморфизм, а ECS — нет.

Единственное, что эти концепции объединяет — это то, что оба подхода применяют принцип разделения данных и логики, для того, чтобы можно было переиспользовать структуры данных и механики, а в ECS переиспользовать компоненты и системы.

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

Не оч понял, почему дорого будет сделать сериализацию состояния мира или протестировать игровые объекты?

Не оч понял аргумент, почему сущность теряет гибкость и тестируемость, если объект состоит из данных и логики?

В атомарном подходе тип — это просто маркер или тэг объекта.

Не, у ECS есть свои тараканы и там практически нет полиморфизма.

На обычных интерфейсах делать можно, я уже это проходил, но проблема в том, что придется делать их очень много, на каждый чих + для каждого игрового объекта делать дополнительный фасад . В результате такой дизайн выглядит слишком избыточным... Поэтому айдишники в виде строк — это самый компактный и гибкий вариант

Главное — не сдохнуть на этом проекте 😅

Да, я оч хочу добавить механику командиров и механику различных активностей на карте)

Если говорить честно: и да, и нет. Для более сложных задач сначала писались тесты, а потом код, для более простых задач — сначала код, потом тесты)

Честно, не понял про способность прогнознозировать

Зов души, мечта детства)

Огонь, спасибо большое! 🔥

Очень полезная информация! ❤️

Информация

В рейтинге
Не участвует
Дата рождения
Зарегистрирован
Активность

Специализация

Game Developer, Game Designer
Lead
C#
Unity3d
Game Development