WorldType
Тип-тег-идентификатор мира, служит для изоляции статических данных при создании разных миров в одном процессе
- Представлен в виде пользовательской структуры без данных с маркер интерфейсом
IWorldType
Пример:
public struct MainWorldType : IWorldType { }
public struct MiniGameWorldType : IWorldType { }
World
Точка входа в библиотеку, отвечающая за доступ, создание, инициализацию, работу и уничтожение данных мира
- Представлен в виде статического класса
World<T>
параметризованногоIWorldType
Так как тип-идентификатор
IWorldType
определяет доступ к конкретному миру
Есть три способа работы с библиотекой:
Первый способ - как есть через полное обращение (очень неудобно):
public struct WT : IWorldType { }
World<WT>.Create(WorldConfig.Default());
World<WT>.CalculateEntitiesCount();
var entity = World<WT>.Entity.New<Position>();
Второй способ - чуть более удобный, использовать статические импорты или статические алиасы (придется писать в каждом файле)
using static FFS.Libraries.StaticEcs.World<WT>;
public struct WT : IWorldType { }
Create(WorldConfig.Default());
CalculateEntitiesCount();
var entity = Entity.New<Position>();
Трейтий способ - самый удобный, использовать типы-алиасы в корневом неймспейсе (не требуется писать в каждом файле)
Везде в примерах будет использован именно этот способ
public struct WT : IWorldType { }
public abstract class World : World<WT> { }
World.Create(WorldConfig.Default());
World.CalculateEntitiesCount();
var entity = World.Entity.New<Position>();
Основные операции:
// Определяем ID мира
public struct WT : IWorldType { }
// Регестрируем типы - алиасы
public abstract class World : World<WT> { }
// Создание мира с дефолтной конфигурацие
World.Create(WorldConfig.Default());
// Или кастомной
World.Create(new() {
// Базовая емкость для сущностей при создания мира
baseEntitiesCapacity = 4096,
// Базовый размер всех разновидностей типов компонентов (количество типов компонент)
BaseComponentTypesCount = 64
// Базовый размер всех разновидностей типов тегов (количество типов тегов)
BaseTagTypesCount = 64,
// Режим работы многопоточной обработки
// (Disabled - потоки не создаются, MaxThreadsCount - создается максимально доступное количество потоков, CustomThreadsCount - указанное количество потоков)
ParallelQueryType = ParallelQueryType.Disabled,
// Количество потоков при ParallelQueryType.CustomThreadsCount
CustomThreadCount = 4,
// Строгий режим работы Query по умолчанию, дополнительно в разделе "Запросы"
DefaultQueryModeStrict = true
});
World.Entity. // Доступ к сущности для MainWorldType (ID мира)
World.Context. // Доступ к контексту для MainWorldType (ID мира)
World.Components.// Доступ к компонентам для MainWorldType (ID мира)
World.Tags. // Доступ к тегам для MainWorldType (ID мира)
// Инициализация мира
World.Initialize();
// Уничтожение и очистка данных мира
World.Destroy();
// true если мир инициализирован
bool initialized = World.IsInitialized();
// количество активных сущностей в мире
int entitiesCount = World.CalculateEntitiesCount();
// текущая емкость для сущностей
int entitiesCapacity = World.CalculateEntitiesCapacity();