drafting wall attach system
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user