UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

91 lines 7.07 kB
import { TgdPainterMeshGltf, TgdPainterNode, } from "./../painter/index.js"; import { isNumber, isString } from "./../types/guards.js"; /** * Create a `TgdPainterNode` from a node hierarchy from a GLTF structure. * @param options * * `data`: a GLTF parser * * `context`: we will create painters, so we need a TgdContext * * `node`: the root node you want to paint. * @returns */ export function tgdMakeMeshGlbPainter(options) { const { data, node = 0 } = options; const actualNode = getActualNode(data, node); const painter = makeNodePainter(actualNode, options); return { painter }; } /** * Retrieve node by index or by name */ function getActualNode(data, node) { if (isNumber(node)) return data.getNode(node); if (isString(node)) return data.getNodeByNameOrThrow(node); return node; } function makeNodePainter(node, options) { const transfo = {}; if (node.translation) { transfo.position = node.translation; } if (node.rotation) { transfo.orientation = node.rotation; } if (node.scale) { transfo.scale = node.scale; } const { data } = options; const children = makeMeshPainters(node.mesh, options); if (node.children) { for (const nodeIndex of node.children) { children.push(makeNodePainter(data.getNode(nodeIndex), options)); } } const painter = new TgdPainterNode({ name: `TgdPainterNode::${node.name}`, transfo, children, }); return painter; } function makeMeshPainters(meshIndex, options) { var _a, _b; if (!isNumber(meshIndex)) return []; const { data, context, overrideMaterial, excludeByMaterialName, includeOnlyMaterialNames, } = options; const mesh = data.getMesh(meshIndex); const targets = []; for (let primitiveIndex = 0; primitiveIndex < mesh.primitives.length; primitiveIndex++) { const primitive = data.getMeshPrimitive(meshIndex, primitiveIndex); const material = isNumber(primitive.material) ? data.getMaterial(primitive.material) : null; const materialName = (_a = material === null || material === void 0 ? void 0 : material.name) !== null && _a !== void 0 ? _a : `#${primitive.material}`; if (excludeByMaterialName && excludeByMaterialName.includes(materialName)) { // Skipping this primitive because the material has been excluded. continue; } if (includeOnlyMaterialNames && !includeOnlyMaterialNames.includes(materialName)) { // If we have an include only list, we skip everything else. continue; } const materialFactory = overrideMaterial === null || overrideMaterial === void 0 ? void 0 : overrideMaterial({ data, mesh, primitive, }); const target = new TgdPainterMeshGltf(context, { name: `${mesh.name}/${(_b = material === null || material === void 0 ? void 0 : material.name) !== null && _b !== void 0 ? _b : ""}`, asset: data, meshIndex, primitiveIndex, material: materialFactory, }); targets.push(target); } return targets; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1nbGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmFjdG9yeS9tZXNoLWdsYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLGNBQWMsR0FFakIsTUFBTSxjQUFjLENBQUE7QUFTckIsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQTJCdEQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxPQUFrQztJQUdwRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFDbEMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUM1QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQTtBQUN0QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGFBQWEsQ0FDbEIsSUFBZ0IsRUFDaEIsSUFBeUM7SUFFekMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzdDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzFELE9BQU8sSUFBSSxDQUFBO0FBQ2YsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUNwQixJQUF1QixFQUN2QixPQUFrQztJQUVsQyxNQUFNLE9BQU8sR0FBK0IsRUFBRSxDQUFBO0lBQzlDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQTtJQUN2QyxDQUFDO0lBQ0QsSUFBSSxJ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