From 70cf2d88cf71e3c7e881edf0aa1506e56c51369e Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 12:07:24 +0000 Subject: [PATCH] Changes Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com> --- src/devkit/SmokeTest.tsx | 44 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/devkit/SmokeTest.tsx b/src/devkit/SmokeTest.tsx index 016cb2e..69dd4e3 100644 --- a/src/devkit/SmokeTest.tsx +++ b/src/devkit/SmokeTest.tsx @@ -106,6 +106,50 @@ function buildSteps(): Step[] { return location.protocol; }, }, + { + name: 'reparent preserva world-transform (Object3D.attach)', + run: async () => { + const scene = new THREE.Scene(); + const parent = new THREE.Group(); + parent.position.set(1, 2, 3); + parent.rotation.set(0, Math.PI / 4, 0); + scene.add(parent); + const child = new THREE.Group(); + child.position.set(0.5, 0, 0); + parent.add(child); + scene.updateMatrixWorld(true); + const beforeWorld = child.matrixWorld.clone(); + scene.attach(child); + scene.updateMatrixWorld(true); + const afterWorld = child.matrixWorld.clone(); + for (let i = 0; i < 16; i++) { + if (Math.abs(beforeWorld.elements[i] - afterWorld.elements[i]) > 1e-5) { + throw new Error(`world drift no índice ${i}`); + } + } + // re-attach back + parent.attach(child); + scene.updateMatrixWorld(true); + const restored = child.matrixWorld.clone(); + for (let i = 0; i < 16; i++) { + if (Math.abs(beforeWorld.elements[i] - restored.elements[i]) > 1e-5) { + throw new Error(`world drift restore ${i}`); + } + } + return 'world preserved'; + }, + }, + { + name: 'lock toggle persiste no store', + run: async () => { + store().setLocked(false); + if (store().isLocked) throw new Error('isLocked deveria ser false'); + store().setLocked(true); + if (!store().isLocked) throw new Error('setLocked(true) falhou'); + store().setLocked(false); + return 'ok'; + }, + }, ]; }