52 lines
2.0 KiB
JavaScript
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;
|
|
});
|