Mask

Маска - аналогична тегу, но занимает лишь 1 бит памяти

  • НЕ Дает возможность строить запросы только по маскам, может использоваться только как дополнительный критерий поиска
  • Представлен в виде пользовательской структуры без данных с маркер интерфейсом IMask

Пример:

public struct Visible : IMask { }

Требуется регистрация в мире между созданием и инициализацией

MyEcs.Create(EcsConfig.Default());
//...
MyEcs.World.RegisterMaskType<Visible>();
//...
MyEcs.Initialize();

Создание:

// Добавление маски на сущность (методы перегрузки от 1-5 масок)
entity.SetMask<Flammable, Frozen, Visible>();

Основные операции:

// Получить количество масок на сущности
int masksCount = entity.MasksCount();

// Проверить наличие ВСЕХ масок (методы перегрузки от 1-3 масок)
entity.HasAllOfMasks<Flammable>();
entity.HasAllOfMasks<Flammable, Frozen, Visible>();

// Проверить наличие хотя бы одной маски (методы перегрузки от 2-3 масок)
entity.HasAnyOfMasks<Flammable, Frozen, Visible>();

// Удалить маску у сущности (В DEBUG режиме будет ошибка если сущности нет, 
// в релизе нельзя использовать если нет гарантии что маска присутствует) (методы перегрузки от 1-5 масок)
entity.DeleteMask<Frozen>();

// Удалить маску у сущности если она существует (методы перегрузки от 1-5 масок)
var deleted = entity.TryDeleteMask<Frozen>();