protected virtual void UpdateBounces(TimeSpan duration) { Parallel.ForEach(quadTree.AllQuadrants(), quad => { for (int i = 0; i < quad.Nodes.Count; i++) { NodeBase nodeA = quad.Nodes[i]; // find bounces for (int j = i + 1; j < quad.Nodes.Count; j++) { NodeBase nodeB = quad.Nodes[j]; double dist = VectorTools.Distance(nodeA.Position, nodeB.Position); if (dist <= nodeA.Radius + nodeB.Radius) { CalcNodeCollision(nodeA, nodeB, bounceEfficiency); } } } }); }