53 lines
2.3 KiB
JavaScript
53 lines
2.3 KiB
JavaScript
"use strict";
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
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() {
|
|
}
|
|
interact(p1, delta) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
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;
|