drafting wall attach system

This commit is contained in:
wass08
2026-01-19 07:59:06 +09:00
parent 159b61d22a
commit a217d0d3a6
8 changed files with 163 additions and 37 deletions
+1
View File
@@ -10,6 +10,7 @@ export interface GridEvent {
export interface NodeEvent<T extends AnyNode = AnyNode> {
node: T;
position: [number, number, number];
localPosition: [number, number, number];
normal?: [number, number, number];
stopPropagation: () => void;
}
+1
View File
@@ -93,6 +93,7 @@ const useScene = create<SceneState>()(
type: "item",
name: "Window",
position: [2.5, 0.5, 0],
parentId: wall0.id,
asset: {
name: "Round Window",
thumbnail: "/items/window-round/thumbnail.png",
@@ -47,12 +47,20 @@ function updateWallGeometry(wallId: string) {
.map((childId) => useScene.getState().nodes[childId])
.filter((n): n is AnyNode => n !== undefined);
// Perform the Extrusion with Holes logic we discussed
// Generate visual geometry with holes
const newGeo = generateExtrudedWall(node, childrenNodes);
mesh.geometry.dispose();
mesh.geometry = newGeo;
// Update collision mesh with solid geometry (no holes)
const collisionMesh = mesh.getObjectByName("collision-mesh") as THREE.Mesh;
if (collisionMesh) {
const collisionGeo = generateExtrudedWall(node, []); // No children = no holes
collisionMesh.geometry.dispose();
collisionMesh.geometry = collisionGeo;
}
mesh.position.set(node.start[0], 0, node.start[1]);
// Rotate mesh to look at 'end' point