@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
59 lines (40 loc) • 1.36 kB
JavaScript
/**
* NOTE: use {@link graph_compute_disconnected_clusters} instead where possible
* @param {{connections:Connection[]}[]} nodes
* @return {Array}
*/
export function computeDisconnectedSubGraphs(nodes) {
//find disconnected sub-graphs
const unexplored = nodes.slice();
let cursor, i;
let currentCluster;
function exploreNode(node) {
const i = unexplored.indexOf(node);
if (i !== -1) {
unexplored.splice(i, 1);
currentCluster.push(node);
}
}
const clusters = [];
while (unexplored.length > 0) {
const node = unexplored.pop();
currentCluster = [node];
cursor = 0;
while (cursor < currentCluster.length) {
const node = currentCluster[cursor++];
const connections = node.connections;
for (i = 0; i < connections.length; i++) {
const connection = connections[i];
const source = connection.source;
const target = connection.target;
if (source === node) {
exploreNode(target);
} else {
exploreNode(source);
}
}
}
clusters.push(currentCluster);
}
return clusters;
}