removeEntities method

void removeEntities(
  1. Iterable<EntityID> entities
)

Implementation

void removeEntities(Iterable<EntityID> entities) {
  final Map<Archetype, List<int>> rows = {};

  for (final e in entities) {
    final record = _entityIndex.remove(e);
    if (record == null) continue;
    rows.putIfAbsent(record.archetype, () => []).add(record.entityRow);
  }

  for (final entry in rows.entries) {
    final archetype = entry.key;
    final rowsToRemove = entry.value..sort((a, b) => b.compareTo(a));

    for (final row in rowsToRemove) {
      for (final column in archetype.components) {
        column.removeAt(row);
      }
    }

    for (int i = 0; i < archetype.components[0].length; i++) {
      final eid = archetype.components[0][i].entityID;
      if (eid != -1) {
        _entityIndex[eid]!.entityRow = i;
      }
    }
  }
}