Все типы компонентов добавляются в сущность заранее. Если для конкретного типа компонента не указано иное. ##### VisualComponent <br> Названия, что были кандидатами: ViewComponent (истасканное слово) VisualComponent (Сливается с View. Однако выбрал его, ни в коем случае, нельзя слово View теперь использовать в качестве названия компонента, иначе будет ужас.) RendererComponent RenderComponent GraphicComponent DisplayComponent <br> ##### MarkerComponent Позволяет отмечать сущность, чтобы его легко можно было найти. Нюанс: Маркером можно отмечать только один вид сущности?? Например, сущность бульдозера?? ##### BridgeComponent адаптер для Unity-компонента. Устарел. ##### DataComponent Хранит статические данные о сущности. ##### DynamicComponent (можно сократить до DynC при создании компонента с данным родителем?) Хранит непостоянные (динамические) данные о сущности, которые могут меняться с течением времени. Например, Position и Rotation. Какие еще названия предлагал GPT4: - StateComponent - VariableComponent - ChangeableComponent ##### TempComponent Помимо того, что он хранит непостоянные данные, так и еще сам компонент является непостоянным. Например: Карта состоит из ячеек. Каждая клетка на карте - это сущность. Если на клетки добавляется здание, то на сущности добавляются tempComponent, который хранит себе ссылку на здание. Нет смысла для всех пустых клеток добавлять компонент с пустым переменным, проще создавать компонент, когда здание есть и удалять компонент, когда здание удаляют. ##### OrderComponent Приказывает системе выполнить некоторую логику над сущностью, к которой добавлен сам компонент. Компонент должен добавляться только к той сущности, над которой планируется манипулирование системой. Задача может быть как однокадровой, так и продолжительной. Не может быть несколько приказов одного типа в один момент времени. Например, нельзя дать две команды на перемещение сущности. Примеры приказов: - Приказать системе построить маршрут. - Приказать системе, чтобы Сущность-транспорт поехала до точки назначения. - Приказать системе Атаковать врага. ##### RequestComponent Компонент создается только в момент, когда необходимо создать запрос. **Update.** Теперь данный компонент устарел. Его судьба будет решаться по ходу разработки. Не предназначен для передачи по сети. Не поддерживает Wrapped типы. Не поддерживается кодогенератором. Вместо него можно использовать следующий подход: Когда нужно обработать массовые запросы в рамках одного кадра, мы создаем OrderComponent и в нем будет коллекция, которая будет в рамках фрейма копить запросы. Если в массовых запросах нужно передать более одного поля, то либо использовать кортеж, либо создавать уже в качестве запроса полноценную сущность с необходимыми данными в виде компонентов. И далее, либо передавать id сущности в orderComponent или же ловить эти сущности с помощью foreach в системе. Позволяет отправить запрос на изменение данных в некую систему. В отличии от OrderComponent, не добавляется к конкретной сущности и тем самым можно генерировать однотипных RequestComponent сколько угодно. Создание нескольких запросов на редактирование одних и тех же данных возможно, к примеру, когда врага атакуют несколько юнитов. Соответственно, возможны одновременные попадания. А при попадании создаются запросы на изменение количества жизни у врага. ##### EventComponent Компонент добавляется к сущности только в момент необходимости отправить эвент. Любая система может генерировать эвенты, если происходят какие-то события. Является однокадровым. Удаляет та система, которая создала эвент. Вставляется в метод «update» системы до foreach ```csharp ComponentManager.RemoveAllEventsIfExist<HealthLevelChangedEventC>(); ``` Когда нужно сгенерировать в той же системе эвент ```csharp _victim.AddC(EntityFactory.PoolCManager.Get<HealthLevelChangedEventC>()); ``` <br> ##### SubscribeComponent (Удален) Позволяет подписаться на изменение данных в компонентах BridgeComponent или DataComponent Данный компонент добавляется на сущность, у которой следим за нужными данными. <br> Данный компонент удаляется автоматически если: - Х секунд никто из систем не проверил «на изменение» данные. - Компонент, за которым идет слежка, был удален. Например: PositionSubscribeC добавляем на транспорт-сущность. Как только транспорт-сущность начнет движение, то на эту сущность будет добавлен компонент RotationChangedEventC на один кадр