diff --git a/ui/blockmesh.js b/ui/blockmesh.js index 1358cba..35fdd9b 100644 --- a/ui/blockmesh.js +++ b/ui/blockmesh.js @@ -23,6 +23,12 @@ const colorFields = { SLEEVES_COLOR: true, }; +export function getRootMesh(mesh) { + if (flock.meshDebug) console.log(mesh.parent); + if (mesh.parent && mesh.name === "__root__") return mesh.parent; + return getRootMesh(mesh.parent); +} + export function updateOrCreateMeshFromBlock(block, changeEvent) { if (flock.meshDebug) diff --git a/ui/gizmos.js b/ui/gizmos.js index 3a7f528..94e066d 100644 --- a/ui/gizmos.js +++ b/ui/gizmos.js @@ -3,7 +3,7 @@ import * as Blockly from "blockly"; import { meshMap, meshBlockIdMap } from "../generators"; import { flock } from "../flock.js"; import { setPositionValues } from "./addmeshes.js"; -import { getMeshFromBlockKey, updateBlockColorAndHighlight } from "./blockmesh.js"; +import { getMeshFromBlockKey, getRootMesh, updateBlockColorAndHighlight } from "./blockmesh.js"; export let gizmoManager; const blueColor = flock.BABYLON.Color3.FromHexString("#0072B2"); // Colour for X-axis @@ -55,6 +55,12 @@ document.addEventListener("DOMContentLoaded", function () { } }); +function resetMesh(mesh) { + if (mesh.visibility === 0.001) mesh.visibility = 0; + mesh.showBoundingBox = false; + if (flock.meshDebug) console.log(mesh.visibility); +} + function pickMeshFromCanvas() { const canvas = flock.scene.getEngine().getRenderingCanvas(); @@ -454,10 +460,10 @@ export function toggleGizmo(gizmoType) { gizmoManager.boundingBoxGizmoEnabled = false; if (gizmoManager.attachedMesh) { - gizmoManager.attachedMesh.showBoundingBox = false; + resetMesh(gizmoManager.attachedMesh); gizmoManager.attachedMesh .getChildMeshes() - .forEach((child) => (child.showBoundingBox = false)); + .forEach((child) => (resetMesh(child))); } document.body.style.cursor = "default"; @@ -613,15 +619,15 @@ export function toggleGizmo(gizmoType) { const pointerObserver = pointerObservable.add((event) => { if (event.type === flock.BABYLON.PointerEventTypes.POINTERPICK) { if (gizmoManager.attachedMesh) { - gizmoManager.attachedMesh.showBoundingBox = false; + resetMesh(gizmoManager.attachedMesh); gizmoManager.attachedMesh .getChildMeshes() - .forEach((child) => (child.showBoundingBox = false)); + .forEach((child) => (resetMesh(child))); blockKey = findParentWithBlockId( gizmoManager.attachedMesh, ).metadata.blockKey; } - const pickedMesh = event.pickInfo.pickedMesh; + let pickedMesh = event.pickInfo.pickedMesh; if (pickedMesh && pickedMesh.name !== "ground") { // Assuming 'mesh' is your Babylon.js mesh object @@ -639,6 +645,14 @@ export function toggleGizmo(gizmoType) { color: "black" }); + if (flock.meshDebug) console.log(pickedMesh.parent); + + if (pickedMesh.parent) { + pickedMesh = getRootMesh(pickedMesh.parent); + if (flock.meshDebug) console.log(pickedMesh.visibility); + pickedMesh.visibility = 0.001; + if (flock.meshDebug) console.log(pickedMesh.visibility); + } const block = meshMap[blockKey]; highlightBlockById(Blockly.getMainWorkspace(), block); @@ -669,7 +683,7 @@ export function toggleGizmo(gizmoType) { if (gizmoManager.attachedMesh) { gizmoManager.attachedMesh .getChildMeshes() - .forEach((child) => (child.showBoundingBox = false)); + .forEach((child) => (resetMesh(child))); gizmoManager.attachToMesh(null); // Detach the gizmo } } @@ -1304,10 +1318,10 @@ export function toggleGizmo(gizmoType) { function turnOffAllGizmos() { if (gizmoManager.attachedMesh) { - gizmoManager.attachedMesh.showBoundingBox = false; + resetMesh(gizmoManager.attachedMesh); gizmoManager.attachedMesh .getChildMeshes() - .forEach((child) => (child.showBoundingBox = false)); + .forEach((child) => (resetMesh(child))); } gizmoManager.attachToMesh(null); gizmoManager.positionGizmoEnabled = false; @@ -1456,10 +1470,10 @@ export function setGizmoManager(value) { } if (gizmoManager.attachedMesh) { - gizmoManager.attachedMesh.showBoundingBox = false; + resetMesh(gizmoManager.attachedMesh); gizmoManager.attachedMesh .getChildMeshes() - .forEach((child) => (child.showBoundingBox = false)); + .forEach((child) => (resetMesh(child))); if (mesh) { while (mesh && mesh.parent && !mesh.parent.physics) {