@@ -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+
405440function 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
0 commit comments