@tsparticles/shape-text
Version:
tsParticles text shape
39 lines (38 loc) • 1.5 kB
JavaScript
import { executeOnSingleOrMultiple, isInArray, itemFromSingleOrMultiple, } from "@tsparticles/engine";
import { drawText, validTypes } from "./Utils.js";
import { loadFont } from "@tsparticles/canvas-utils";
const firstIndex = 0, minLength = 0;
export class TextDrawer {
draw(data) {
drawText(data);
}
async init(container) {
const options = container.actualOptions;
if (validTypes.find(t => isInArray(t, options.particles.shape.type))) {
const shapeOptions = validTypes
.map(t => options.particles.shape.options[t])
.find(t => !!t), promises = [];
executeOnSingleOrMultiple(shapeOptions, shape => {
promises.push(loadFont(shape.font, shape.weight));
});
await Promise.all(promises);
}
}
particleInit(_container, particle) {
if (!particle.shape || !validTypes.includes(particle.shape)) {
return;
}
const character = particle.shapeData;
if (character === undefined) {
return;
}
const textData = character.value;
if (!textData) {
return;
}
particle.textLines = itemFromSingleOrMultiple(textData, particle.randomIndexData)?.split("\n") ?? [];
particle.maxTextLength = particle.textLines.length
? Math.max(...particle.textLines.map(t => t.length))
: (particle.textLines[firstIndex]?.length ?? minLength);
}
}