@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
77 lines • 5.99 kB
JavaScript
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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