1 | import { Constants, Utils, ColorUtils, NumberUtils } from "../../Utils";
|
2 | import { HoverMode } from "../../Enums/Modes";
|
3 | export class Grabber {
|
4 | constructor(container) {
|
5 | this.container = container;
|
6 | }
|
7 | isEnabled() {
|
8 | const container = this.container;
|
9 | const mouse = container.interactivity.mouse;
|
10 | const events = container.actualOptions.interactivity.events;
|
11 | if (!(events.onHover.enable && mouse.position)) {
|
12 | return false;
|
13 | }
|
14 | const hoverMode = events.onHover.mode;
|
15 | return Utils.isInArray(HoverMode.grab, hoverMode);
|
16 | }
|
17 | reset() {
|
18 | }
|
19 | interact() {
|
20 | var _a;
|
21 | const container = this.container;
|
22 | const options = container.actualOptions;
|
23 | const interactivity = options.interactivity;
|
24 | if (interactivity.events.onHover.enable && container.interactivity.status === Constants.mouseMoveEvent) {
|
25 | const mousePos = container.interactivity.mouse.position;
|
26 | if (mousePos === undefined) {
|
27 | return;
|
28 | }
|
29 | const distance = container.retina.grabModeDistance;
|
30 | const query = container.particles.quadTree.queryCircle(mousePos, distance);
|
31 | for (const particle of query) {
|
32 | const pos = particle.getPosition();
|
33 | const pointDistance = NumberUtils.getDistance(pos, mousePos);
|
34 | if (pointDistance <= distance) {
|
35 | const grabLineOptions = interactivity.modes.grab.links;
|
36 | const lineOpacity = grabLineOptions.opacity;
|
37 | const opacityLine = lineOpacity - (pointDistance * lineOpacity) / distance;
|
38 | if (opacityLine > 0) {
|
39 | const optColor = (_a = grabLineOptions.color) !== null && _a !== void 0 ? _a : particle.options.links.color;
|
40 | if (!container.particles.grabLineColor) {
|
41 | const linksOptions = container.actualOptions.interactivity.modes.grab.links;
|
42 | container.particles.grabLineColor = ColorUtils.getLinkRandomColor(optColor, linksOptions.blink, linksOptions.consent);
|
43 | }
|
44 | const colorLine = ColorUtils.getLinkColor(particle, undefined, container.particles.grabLineColor);
|
45 | if (colorLine === undefined) {
|
46 | return;
|
47 | }
|
48 | container.canvas.drawGrabLine(particle, colorLine, opacityLine, mousePos);
|
49 | }
|
50 | }
|
51 | }
|
52 | }
|
53 | }
|
54 | }
|