addComponent<T extends Component> method
void
addComponent<
T extends Component>( - EntityID entityID,
- T component
)
Implementation
void addComponent<T extends Component>(EntityID entityID, T component) {
component.entityID = entityID;
final componentID = _getOrCreateComponentID(T);
_componentIndex[componentID] ??= {};
final record = _entityIndex.remove(entityID);
if (record == null) {
final hash = SetHash({componentID});
final archetype = _getOrCreateArchetype(hash);
if (_componentIndex[componentID]![hash] == null) {
_componentIndex[componentID]![hash] = archetype.components.length;
archetype.components.add([]);
}
final componentsList = archetype.components[_componentIndex[componentID]![hash]!];
_entityIndex[entityID] = Record(archetype: archetype, entityRow: componentsList.length);
componentsList.add(component);
} else {
final oldArchetype = record.archetype;
final hash = oldArchetype.setHash.copy();
hash.add(componentID);
final archetype = _getOrCreateArchetype(hash);
_moveEntity(
entityID,
oldArchetype,
record.entityRow,
archetype,
toAdd: [component],
);
}
}