UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

77 lines 5.99 kB
import { Vertices } from "./vertices.js"; import { Ellipse } from "./ellipse.js"; const TAU = 2 * Math.PI; export function makeDatasetAndElements(branches, roundness) { const vertices = new Vertices(); const elements = []; const sections = []; for (const branch of branches) branch2section2(sections, branch, roundness); for (const section of sections) addSectionToGeometry(section, vertices, elements); return { dataset: vertices.dataset, elements: resolveElements(elements, vertices.count), }; } function resolveElements(elements, count) { if (count < 0xff) return new Uint8Array(elements); if (count < 0xffff) return new Uint16Array(elements); return new Uint32Array(elements); } function branch2section2(sections, branch, roundness) { const section = { roundness: branch.roundness ?? roundness, points: [ { pos: branch.pos, radius: branch.radius, uv: branch.uv, }, ], }; let cursor = branch; let { children } = cursor; if (!children) return; while (children && children.length === 1) { cursor = children[0]; if (cursor.roundness ?? roundness !== section.roundness) break; section.points.push({ pos: cursor.pos, radius: cursor.radius, uv: cursor.uv, }); children = cursor.children; } sections.push(section); if (children) { for (const child of children) { branch2section2(sections, child, roundness); } } } function addSectionToGeometry(section, vertices, elements) { if (section.points.length === 0) return; if (section.points.length === 1) { const [point] = section.points; addSphereToGeometry(point, vertices, elements); return; } const ellipses = [null]; for (let i = 0; i < section.points.length; i++) { const prv = section.points[i - 1]; const cur = section.points[i]; const nxt = section.points[i + 1]; ellipses.push(new Ellipse(prv, cur, nxt, section.roundness, vertices, elements)); } } function addSphereToGeometry(point, vertices, elements) { console.error("[addSphereToGeometry] Function not implemented."); return; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFpbnRlci90dWJlcy9nZW9tZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBR3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFbkMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUE7QUFFdkIsTUFBTSxVQUFVLHNCQUFzQixDQUNsQyxRQUFpQyxFQUNqQyxTQUFpQjtJQUtqQixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFBO0lBQy9CLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQTtJQUM3QixNQUFNLFFBQVEsR0FBYyxFQUFFLENBQUE7SUFDOUIsS0FBSyxNQUFNLE1BQU0sSUFBSSxRQUFRO1FBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDM0UsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRO1FBQUUsb0JBQW9CLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUNqRixPQUFPO1FBQ0gsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1FBQ3pCLFFBQVEsRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUM7S0FDdEQsQ0FBQTtBQUNMLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxRQUFrQixFQUFFLEtBQWE7SUFDdEQsSUFBSSxLQUFLLEdBQUcsSUFBSTtRQUFFLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDakQsSUFBSSxLQUFLLEdBQUcsTUFBTTtRQUFFLE9BQU8sSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDcEQsT0FBTyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtB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