1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.LinkInstance = void 0;
|
4 | const Utils_1 = require("../../../Utils");
|
5 | class LinkInstance {
|
6 | constructor(container) {
|
7 | this.container = container;
|
8 | }
|
9 | particleCreated(particle) {
|
10 | const linkParticle = particle;
|
11 | linkParticle.links = [];
|
12 | }
|
13 | particleDestroyed(particle) {
|
14 | const linkParticle = particle;
|
15 | linkParticle.links = [];
|
16 | }
|
17 | drawParticle(context, particle) {
|
18 | const linkParticle = particle;
|
19 | const container = this.container;
|
20 | const particles = container.particles;
|
21 | const pOptions = particle.options;
|
22 | if (linkParticle.links.length > 0) {
|
23 | context.save();
|
24 | const p1Links = linkParticle.links.filter((l) => {
|
25 | const linkFreq = container.particles.getLinkFrequency(linkParticle, l.destination);
|
26 | return linkFreq <= pOptions.links.frequency;
|
27 | });
|
28 | for (const link of p1Links) {
|
29 | const p2 = link.destination;
|
30 | if (pOptions.links.triangles.enable) {
|
31 | const links = p1Links.map((l) => l.destination);
|
32 | const vertices = p2.links.filter((t) => {
|
33 | const linkFreq = container.particles.getLinkFrequency(p2, t.destination);
|
34 | return linkFreq <= p2.options.links.frequency && links.indexOf(t.destination) >= 0;
|
35 | });
|
36 | if (vertices.length) {
|
37 | for (const vertex of vertices) {
|
38 | const p3 = vertex.destination;
|
39 | const triangleFreq = particles.getTriangleFrequency(linkParticle, p2, p3);
|
40 | if (triangleFreq > pOptions.links.triangles.frequency) {
|
41 | continue;
|
42 | }
|
43 | this.drawLinkTriangle(linkParticle, link, vertex);
|
44 | }
|
45 | }
|
46 | }
|
47 | if (link.opacity > 0 && container.retina.linksWidth > 0) {
|
48 | this.drawLinkLine(linkParticle, link);
|
49 | }
|
50 | }
|
51 | context.restore();
|
52 | }
|
53 | }
|
54 | drawLinkTriangle(p1, link1, link2) {
|
55 | var _a;
|
56 | const container = this.container;
|
57 | const options = container.actualOptions;
|
58 | const p2 = link1.destination;
|
59 | const p3 = link2.destination;
|
60 | const triangleOptions = p1.options.links.triangles;
|
61 | const opacityTriangle = (_a = triangleOptions.opacity) !== null && _a !== void 0 ? _a : (link1.opacity + link2.opacity) / 2;
|
62 | if (opacityTriangle <= 0) {
|
63 | return;
|
64 | }
|
65 | const pos1 = p1.getPosition();
|
66 | const pos2 = p2.getPosition();
|
67 | const pos3 = p3.getPosition();
|
68 | container.canvas.draw((ctx) => {
|
69 | if ((0, Utils_1.getDistance)(pos1, pos2) > container.retina.linksDistance ||
|
70 | (0, Utils_1.getDistance)(pos3, pos2) > container.retina.linksDistance ||
|
71 | (0, Utils_1.getDistance)(pos3, pos1) > container.retina.linksDistance) {
|
72 | return;
|
73 | }
|
74 | let colorTriangle = (0, Utils_1.colorToRgb)(triangleOptions.color);
|
75 | if (!colorTriangle) {
|
76 | const linksOptions = p1.options.links;
|
77 | const linkColor = linksOptions.id !== undefined
|
78 | ? container.particles.linksColors.get(linksOptions.id)
|
79 | : container.particles.linksColor;
|
80 | colorTriangle = (0, Utils_1.getLinkColor)(p1, p2, linkColor);
|
81 | }
|
82 | if (!colorTriangle) {
|
83 | return;
|
84 | }
|
85 | (0, Utils_1.drawLinkTriangle)(ctx, pos1, pos2, pos3, options.backgroundMask.enable, options.backgroundMask.composite, colorTriangle, opacityTriangle);
|
86 | });
|
87 | }
|
88 | drawLinkLine(p1, link) {
|
89 | const container = this.container;
|
90 | const options = container.actualOptions;
|
91 | const p2 = link.destination;
|
92 | let opacity = link.opacity;
|
93 | const pos1 = p1.getPosition();
|
94 | const pos2 = p2.getPosition();
|
95 | container.canvas.draw((ctx) => {
|
96 | var _a, _b;
|
97 | let colorLine;
|
98 | const twinkle = p1.options.twinkle.lines;
|
99 | if (twinkle.enable) {
|
100 | const twinkleFreq = twinkle.frequency;
|
101 | const twinkleRgb = (0, Utils_1.colorToRgb)(twinkle.color);
|
102 | const twinkling = Math.random() < twinkleFreq;
|
103 | if (twinkling && twinkleRgb !== undefined) {
|
104 | colorLine = twinkleRgb;
|
105 | opacity = twinkle.opacity;
|
106 | }
|
107 | }
|
108 | if (!colorLine) {
|
109 | const linksOptions = p1.options.links;
|
110 | const linkColor = linksOptions.id !== undefined
|
111 | ? container.particles.linksColors.get(linksOptions.id)
|
112 | : container.particles.linksColor;
|
113 | colorLine = (0, Utils_1.getLinkColor)(p1, p2, linkColor);
|
114 | }
|
115 | if (!colorLine) {
|
116 | return;
|
117 | }
|
118 | const width = (_a = p1.retina.linksWidth) !== null && _a !== void 0 ? _a : container.retina.linksWidth;
|
119 | const maxDistance = (_b = p1.retina.linksDistance) !== null && _b !== void 0 ? _b : container.retina.linksDistance;
|
120 | (0, Utils_1.drawLinkLine)(ctx, width, pos1, pos2, maxDistance, container.canvas.size, p1.options.links.warp, options.backgroundMask.enable, options.backgroundMask.composite, colorLine, opacity, p1.options.links.shadow);
|
121 | });
|
122 | }
|
123 | }
|
124 | exports.LinkInstance = LinkInstance;
|