applyBehaviour(particle, time, index) {
    if (this.emitter) {
      Util.sliceArray(this.emitter.particles, index, this.newPool);
    } else {
      Util.sliceArray(this.pool, index, this.newPool);
    }

    const length = this.newPool.length;
    let otherParticle;
    let lengthSq;
    let overlap;
    let totalMass;
    let averageMass1, averageMass2;
    let i;

    for (i = 0; i < length; i++) {
      otherParticle = this.newPool[i];

      if (otherParticle !== particle) {
        this.delta.copy(otherParticle.p);
        this.delta.sub(particle.p);

        lengthSq = this.delta.lengthSq();
        const distance = particle.radius + otherParticle.radius;

        if (lengthSq <= distance * distance) {
          overlap = distance - Math.sqrt(lengthSq);
          overlap += 0.5;

          totalMass = particle.mass + otherParticle.mass;
          averageMass1 = this.mass ? otherParticle.mass / totalMass : 0.5;
          averageMass2 = this.mass ? particle.mass / totalMass : 0.5;

          particle.p.add(
            this.delta
              .clone()
              .normalize()
              .multiplyScalar(overlap * -averageMass1)
          );
          otherParticle.p.add(this.delta.normalize().multiplyScalar(overlap * averageMass2));

          this.callback && this.callback(particle, otherParticle);
        }
      }
    }
  }
Apply this behaviour for all particles every time

@memberof Proton#Proton.Collision
@method applyBehaviour
@instance

@param {Proton.Particle} particle
@param {Number} 			time the integrate time 1/ms
@param {Int} 			index the particle index