Skip to content

Commit efe72d2

Browse files
committed
Hide robot truck outside robot modes
1 parent 25a8607 commit efe72d2

3 files changed

Lines changed: 51 additions & 8 deletions

File tree

packages/robot/src/components/navigation-scene-lifecycle.tsx

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ function getCurrentSceneGraph(): SceneGraph {
391391
}
392392
}
393393

394-
function removePascalTruckNodesFromCurrentScene() {
394+
function removeRuntimePascalTruckNodesFromCurrentScene() {
395395
const sceneState = useScene.getState()
396396
const truckIds = Object.entries(sceneState.nodes)
397397
.filter(([, node]) => isPascalTruckNode(node) && !hasPascalTruckManualPlacement(node))
@@ -402,11 +402,46 @@ function removePascalTruckNodesFromCurrentScene() {
402402
}
403403
}
404404

405+
function hidePascalTruckNodesOutsideRobotMode() {
406+
const sceneState = useScene.getState()
407+
const truckIdsToDelete: AnyNodeId[] = []
408+
const truckUpdates: { id: AnyNodeId; data: Partial<AnyNode> }[] = []
409+
410+
for (const [nodeId, node] of Object.entries(sceneState.nodes)) {
411+
if (!isPascalTruckNode(node)) {
412+
continue
413+
}
414+
415+
const truckNodeId = nodeId as AnyNodeId
416+
if (hasPascalTruckManualPlacement(node)) {
417+
if (node.visible !== false) {
418+
truckUpdates.push({ id: truckNodeId, data: { visible: false } })
419+
}
420+
421+
const truckObject = sceneRegistry.nodes.get(nodeId)
422+
if (truckObject?.visible) {
423+
truckObject.visible = false
424+
truckObject.updateMatrixWorld(true)
425+
}
426+
continue
427+
}
428+
429+
truckIdsToDelete.push(truckNodeId)
430+
}
431+
432+
if (truckUpdates.length > 0) {
433+
sceneState.updateNodes(truckUpdates)
434+
}
435+
if (truckIdsToDelete.length > 0) {
436+
sceneState.deleteNodes(truckIdsToDelete)
437+
}
438+
}
439+
405440
function ensurePascalTruckNodeInCurrentScene() {
406441
const sceneGraph = getCurrentSceneGraph()
407442
const stripped = stripPascalTruckFromSceneGraph(sceneGraph)
408443
const baseGraph = stripped.sceneGraph ?? sceneGraph
409-
removePascalTruckNodesFromCurrentScene()
444+
removeRuntimePascalTruckNodesFromCurrentScene()
410445

411446
const { node, parentId } = buildPascalTruckNodeForScene(baseGraph, stripped.truckNode)
412447
useScene.getState().createNode(node as AnyNode, parentId ? (parentId as AnyNodeId) : undefined)
@@ -621,14 +656,14 @@ export function NavigationSceneLifecycle() {
621656
} else if (previousRobotMode === 'task' && robotMode !== 'task') {
622657
restoreTaskModeSceneSnapshot({ clearSnapshot: true, mode: 'full' })
623658
if (robotMode === null) {
624-
removePascalTruckNodesFromCurrentScene()
659+
hidePascalTruckNodesOutsideRobotMode()
625660
} else {
626661
ensurePascalTruckNodeInCurrentScene()
627662
}
628663
} else if (previousRobotMode !== null && robotMode === null) {
629-
removePascalTruckNodesFromCurrentScene()
664+
hidePascalTruckNodesOutsideRobotMode()
630665
} else if (robotMode === null) {
631-
removePascalTruckNodesFromCurrentScene()
666+
hidePascalTruckNodesOutsideRobotMode()
632667
}
633668

634669
previousRobotModeRef.current = robotMode

packages/robot/src/editor-scene.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,25 @@ export function prepareNavigationSceneGraph<T extends SceneGraphWithCollections>
3434
for (const [nodeId, node] of Object.entries(baseGraph.nodes)) {
3535
if (isPascalTruckNode(node)) {
3636
const localTruckAsset = getPascalTruckLocalAsset()
37+
const shouldStripTruckMetadata =
38+
hasTransientNavigationMetadata(node) || getItemMoveVisualState(node.metadata) !== null
3739
if (
3840
node.asset?.src !== localTruckAsset.src ||
39-
node.asset?.thumbnail !== localTruckAsset.thumbnail
41+
node.asset?.thumbnail !== localTruckAsset.thumbnail ||
42+
node.visible !== false ||
43+
shouldStripTruckMetadata
4044
) {
4145
nextNodes ??= { ...baseGraph.nodes }
4246
nextNodes[nodeId] = {
4347
...node,
4448
asset: localTruckAsset,
49+
metadata: shouldStripTruckMetadata
50+
? setItemMoveVisualState(stripTransientMetadata(node.metadata), null)
51+
: node.metadata,
52+
visible: false,
4553
}
46-
continue
4754
}
55+
continue
4856
}
4957

5058
if (hasTransientNavigationMetadata(node)) {

packages/robot/src/lib/pascal-truck.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -623,7 +623,7 @@ export function buildPascalTruckNodeForScene(
623623
preserveManualPlacement && Array.isArray(sourceTruckNode.scale)
624624
? sourceTruckNode.scale
625625
: seededTransform.scale,
626-
visible: sourceTruckNode.visible ?? true,
626+
visible: true,
627627
}
628628
: {
629629
asset: truckAsset,

0 commit comments

Comments
 (0)