queryEachPairs method
void
queryEachPairs(
- QueryParams aParams,
- QueryParams bParams,
- void fn(
- QueryRowView a,
- QueryRowView b
Implementation
void queryEachPairs(
QueryParams aParams,
QueryParams bParams,
void Function(QueryRowView a, QueryRowView b) fn,
) {
if (!aParams.activate(this) || !bParams.activate(this)) return;
final aColumns = List<int>.filled(aParams.componentIDs.length, 0);
final bColumns = List<int>.filled(bParams.componentIDs.length, 0);
final aRow = QueryRowView();
final bRow = QueryRowView();
final archetypes = _archetypeIndex.values.toList(growable: false);
for (final aArch in archetypes) {
if (aArch.isEmpty || !aArch.setHash.contains(aParams.hash)) continue;
for (int c = 0; c < aParams.componentIDs.length; c++) {
aColumns[c] = _componentIndex[aParams.componentIDs[c]]![aArch.setHash]!;
}
for (final bArch in archetypes) {
if (bArch.isEmpty || !bArch.setHash.contains(bParams.hash)) continue;
for (int c = 0; c < bParams.componentIDs.length; c++) {
bColumns[c] = _componentIndex[bParams.componentIDs[c]]![bArch.setHash]!;
}
for (int ai = 0; ai < aArch.entityCount; ai++) {
aRow.bind(aArch, aColumns, ai, aParams.typeIndices);
for (int bi = 0; bi < bArch.entityCount; bi++) {
bRow.bind(bArch, bColumns, bi, bParams.typeIndices);
if (aRow.entity == bRow.entity) continue;
fn(aRow, bRow);
}
}
}
}
}