Files
webeditor3d/tests/domain/whitebox-primitives-runtime.test.ts

66 lines
2.0 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
createConeBrush,
createRadialPrismBrush,
createTorusBrush,
createWedgeBrush
} from "../../src/document/brushes";
import { createPlayerStartEntity } from "../../src/entities/entity-instances";
import { createEmptySceneDocument } from "../../src/document/scene-document";
import { buildRuntimeSceneFromDocument } from "../../src/runtime-three/runtime-scene-build";
describe("whitebox primitives runtime build", () => {
it("builds runtime meshes and colliders for wedge, cylinder, cone, and torus solids", () => {
const document = createEmptySceneDocument({ name: "Primitive Runtime" });
const wedge = createWedgeBrush({
id: "brush-wedge-runtime",
center: { x: -2, y: 1, z: 0 }
});
const cylinder = createRadialPrismBrush({
id: "brush-cylinder-runtime",
center: { x: 2, y: 1, z: 0 },
sideCount: 12
});
const cone = createConeBrush({
id: "brush-cone-runtime",
center: { x: 6, y: 1, z: 0 },
sideCount: 12
});
const torus = createTorusBrush({
id: "brush-torus-runtime",
center: { x: 10, y: 1, z: 0 },
majorSegmentCount: 16,
tubeSegmentCount: 8
});
const playerStart = createPlayerStartEntity({
id: "entity-player-start-primitives"
});
document.brushes[wedge.id] = wedge;
document.brushes[cylinder.id] = cylinder;
document.brushes[cone.id] = cone;
document.brushes[torus.id] = torus;
document.entities[playerStart.id] = playerStart;
const runtimeScene = buildRuntimeSceneFromDocument(document);
expect(runtimeScene.brushes.map((brush) => brush.kind)).toEqual([
"wedge",
"radialPrism",
"cone",
"torus"
]);
expect(runtimeScene.colliders).toHaveLength(4);
expect(
runtimeScene.colliders.every(
(collider) =>
collider.kind === "trimesh" &&
collider.source === "brush" &&
collider.vertices.length > 0 &&
collider.indices.length > 0
)
).toBe(true);
});
});