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

52 lines
2.0 KiB
JavaScript

(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "tsparticles-engine", "./ResolveCollision"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Collider = void 0;
const tsparticles_engine_1 = require("tsparticles-engine");
const ResolveCollision_1 = require("./ResolveCollision");
class Collider extends tsparticles_engine_1.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 = (0, tsparticles_engine_1.getDistance)(pos1, pos2), distP = radius1 + radius2;
if (dist > distP) {
continue;
}
(0, ResolveCollision_1.resolveCollision)(p1, p2, delta, container.retina.pixelRatio);
}
}
isEnabled(particle) {
return particle.options.collisions.enable;
}
reset() {
}
}
exports.Collider = Collider;
});