Перейти к основному содержимому

Systems Container

Описание

Модуль SystemsContainer предоставляет механизм кэширования инстансов Систем в ECS фреймворке. Он гарантирует, что в приложении существует только один экземпляр каждой Системы.

Назначение

  • Управление жизненным циклом Систем
  • Кэширование инстансов Систем
  • Предотвращение дублирования Систем
  • Оптимизация использования памяти

Архитектура

Основные классы

  1. SystemsContainer - контейнер для кэширования Систем
  2. ISystemsContainer - интерфейс контейнера

Диаграмма зависимостей

SystemsContainer
├── System (кэшируемые системы)
└── SystemType (тип конструктора системы)

Использование

Получение инстанса Системы

// Контейнер создается автоматически в EmpressCore
const container = new SystemsContainer();

// Получение Системы (создастся новый инстанс)
const system = container.get(MovementSystem);

// Повторное получение (вернется существующий инстанс)
const sameSystem = container.get(MovementSystem);

// system === sameSystem // true

Использование в SystemGroup

class MovementGroup extends SystemGroup<Vec2> {
public setup(chain: SystemChain, data: Vec2): void {
// SystemsContainer автоматически создаст или вернет
// существующий инстанс MovementSystem

chain.add(MovementSystem, data);
}
}

API

Класс SystemsContainer

Методы

  • get(ctor: SystemType<any, any>): ISystem<any> - получает или создает инстанс Системы

Свойства

  • _cache: Map<SystemType, ISystem> - приватное хранилище инстансов

FAQ

Когда создаются инстансы Систем?

Инстансы создаются при первом запросе через метод get. Все последующие запросы возвращают существующий инстанс из кэша.

Можно ли иметь несколько экземпляров одной Системы?

Нет, SystemsContainer гарантирует, что в приложении существует только один экземпляр каждой Системы.

Как долго живут инстансы Систем?

Инстансы создаются при первом запросе и существуют на протяжении всего времени работы приложения.

Как это влияет на производительность?

  • Уменьшает использование памяти за счет предотвращения дублирования Систем
  • Ускоряет доступ к Системам за счет кэширования
  • Оптимизирует создание объектов, создавая их только при необходимости

Нужно ли вручную управлять SystemsContainer?

Нет, контейнер создается и управляется автоматически в EmpressCore. Разработчику достаточно определять свои Системы и использовать их в SystemGroup.