ECS. Когда использовать компонент, а когда отдельную сущность с компонентом?

Рейтинг: 1Ответов: 1Опубликовано: 14.01.2023

Изучаю шаблон Entity-Component-System. Есть в игре сущность "город". Город - компонент, который висит на сущности. Далее у каждого города есть набор бонусов (временных бафов), которые представляют собой структуру

BonusItem {
int id; //bonus type

DateTime dateEnd
}

Так вот не могу определиться, как это сделать. В виде компонента TownBonusesComponent, в котором есть List всех BonusItem. Или второй вариант. Каждый бонус представить в виде отдельной сущности, на которой будет висеть компонент BonusItem? Когда в подобных случаях использовать отдельные сущности? Или если что-то представлено в виде списка, то это явный повод вынести в отдельные сущности?

Ответы

▲ 1Принят

Ну тут сложновато что-то судить, поскольку тут уже идут приколы с архитектурой, которую мы как бы не видим))

Лично я бы всякие типы бонусов (И другие типы) делал бы через enum.

НО, но, но. Сначала грамотно продумайте и дайте ответы себе на вопросы:

  • Сможет ли каждый город иметь несколько бонусов?
  • Один бонус даёт только один бафф? (Пример из игр, когда какой-то бонус задёт бафф к НЕСКОЛЬКИМ характеристикам)
  • Будет ли этот спик/enum иметь ДЭбаффы?
  • Будет ли список бонусов дополнять? Насколько сложный будет механизм додавания бонусов?
  • И самое главное: имеет ли сам бонус какой-то ПОВЕДЕНИЕ (Если да, значит это уже будет объект класса)? Будет ли сам бонус влиять на что-то, или другие игровые механики будут смотреть наличие бонуса и его дэ/баффы?

После этого подумайте, как лучше будет вам сделать бонус:

  • Перечисление (enum)
  • Объект класса
  • Список (Возможно List<> типов предыдущего пункта)