ComponentManager constructor

ComponentManager({
  1. Map<Type, ComponentListFactory> componentArrayFactories = const {},
  2. required ArchetypeManagerInterface archetypeManagerFactory(
    1. Iterable<Type>
    ),
})

Implementation

ComponentManager({
  Map<Type, ComponentListFactory> componentArrayFactories = const {},
  required ArchetypeManagerInterface Function(Iterable<Type>)
      archetypeManagerFactory,
}) {
  _componentArrayFactories = componentArrayFactories;
  _archetypeManager = archetypeManagerFactory(_componentArrayFactories.keys);

  final maxIndex = _componentArrayFactories.keys
      .map((type) => _archetypeManager.getTypeIndex(type) ?? -1)
      .fold<int>(-1, (max, index) => index > max ? index : max);

  _indexedComponentArrays = List.filled(maxIndex + 1, null);

  for (var entry in _componentArrayFactories.entries) {
    final list = entry.value();
    _componentArrays[entry.key] = list;
    final index = _archetypeManager.getTypeIndex(entry.key);
    if (index != null) {
      _indexedComponentArrays[index] = list;
      _typeIndexCache[entry.key] = index;
    }
  }
}