UNPKG

5.71 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.LinkInstance = void 0;
4const Utils_1 = require("../../../Utils");
5class 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}
124exports.LinkInstance = LinkInstance;