2023-02-17 11:06:01 +01:00

38 lines
1.3 KiB
JavaScript

import { ParticlesInteractorBase, getDistance } from "tsparticles-engine";
import { resolveCollision } from "./ResolveCollision";
export class Collider extends ParticlesInteractorBase {
constructor(container) {
super(container);
}
clear() {
}
init() {
}
async interact(p1, delta) {
const container = this.container, pos1 = p1.getPosition(), radius1 = p1.getRadius(), query = container.particles.quadTree.queryCircle(pos1, radius1 * 2);
for (const p2 of query) {
if (p1 === p2 ||
!p2.options.collisions.enable ||
p1.options.collisions.mode !== p2.options.collisions.mode ||
p2.destroyed ||
p2.spawning) {
continue;
}
const pos2 = p2.getPosition(), radius2 = p2.getRadius();
if (Math.abs(Math.round(pos1.z) - Math.round(pos2.z)) > radius1 + radius2) {
continue;
}
const dist = getDistance(pos1, pos2), distP = radius1 + radius2;
if (dist > distP) {
continue;
}
resolveCollision(p1, p2, delta, container.retina.pixelRatio);
}
}
isEnabled(particle) {
return particle.options.collisions.enable;
}
reset() {
}
}