removeComponents method

void removeComponents(
  1. EntityID entityID, {
  2. required List<Type> components,
})

Implementation

void removeComponents(EntityID entityID, {required List<Type> components}) {
  final record = _entityIndex[entityID];
  if (record == null) return;

  final componentIDs = components.map((e) => _getOrCreateComponentID(e)).toSet();
  final oldArchetype = record.archetype;
  final setHash = oldArchetype.setHash.copy();
  if (!setHash.removeAll(componentIDs)) return;
  if (setHash.isEmpty) {
    _removeEntityFromArchetype(entityID, oldArchetype, record.entityRow);
  } else {
    final archetype = _getOrCreateArchetype(setHash);
    _moveEntity(
      entityID,
      oldArchetype,
      record.entityRow,
      archetype,
      toRemove: componentIDs,
    );
  }
}