Tag
Тег - аналогичен компоненту, но не содержит никаких данных, служит для маркировки сущности
- Оптимизированное хранилище, не хранит массивы данных, не замедляет поиск по компонентам, позволяет создавать множество тегов
- Представлен в виде пользовательской структуры без данных с маркер интерфейсом
ITag
Пример:
public struct Unit : ITag { }
Требуется регистрация в мире между созданием и инициализацией
World.Create(WorldConfig.Default());
//...
World.RegisterTagType<Unit>();
//...
World.Initialize();
Создание:
// Добавление тега на сущность (методы перегрузки от 1-5 тегов) (Вернет true если тег отсутствовал и был добавлен)
bool added = entity.SetTag<Unit>();
entity.SetTag<Unit, Player>();
Основные операции:
// Получить количество тегов на сущности
int tagsCount = entity.TagsCount();
// Проверить наличие ВСЕХ тегов (методы перегрузки от 1-3 тегов)
entity.HasAllOfTags<Unit>();
entity.HasAllOfTags<Unit, Player>();
// Проверить наличие хотя бы одного тега (методы перегрузки от 2-3 тегов)
entity.HasAnyOfTags<Unit, Player>();
// Удалить тег у сущности (Вернет true если тег присутствовал и был удален)
// Можно безопасно использовать даже если тега не было
bool deleted = entity.DeleteTag<Unit>();
entity.DeleteTag<Unit, Player>();
// Если тега нет на сущности то он добавляется, если есть то удаляется (методы перегрузки от 1-3 тегов)
// (Вернет текущее состояние, true если тег был добавлен, false если тег был удален)
bool state = entity.ToggleTag<Unit>();
entity.ToggleTag<Unit, Player>();
// В зависимости от переданого значения или устанавливается тег (true) или удаляется (false) (методы перегрузки от 1-3 тегов)
entity.ApplyTag<Unit>(true);
entity.ApplyTag<Unit, Player>(false, true);