@@ -39,15 +39,18 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from ".
3939
4040import { Editor } from "../main" ;
4141
42+ import { isSound } from "../../tools/guards/sound" ;
4243import { Tween } from "../../tools/animation/tween" ;
44+ import { isVector3 } from "../../tools/guards/math" ;
4345import { isNodeLocked } from "../../tools/node/metadata" ;
4446import { registerUndoRedo } from "../../tools/undoredo" ;
4547import { initializeHavok } from "../../tools/physics/init" ;
48+ import { isAnyParticleSystem } from "../../tools/guards/particles" ;
4649import { onTextureAddedObservable } from "../../tools/observables" ;
4750import { waitNextAnimationFrame , waitUntil } from "../../tools/tools" ;
4851import { checkProjectCachedCompressedTextures } from "../../tools/ktx/check" ;
4952import { createSceneLink , getRootSceneLink } from "../../tools/scene/scene-link" ;
50- import { isAbstractMesh , isCamera , isCollisionInstancedMesh , isCollisionMesh , isInstancedMesh , isMesh , isTransformNode } from "../../tools/guards/nodes" ;
53+ import { isAbstractMesh , isCamera , isCollisionInstancedMesh , isCollisionMesh , isInstancedMesh , isLight , isMesh , isTransformNode } from "../../tools/guards/nodes" ;
5154import { DropdownMenu , DropdownMenuContent , DropdownMenuItem , DropdownMenuLabel , DropdownMenuSeparator , DropdownMenuTrigger } from "../../ui/shadcn/ui/dropdown-menu" ;
5255
5356import { EditorCamera } from "../nodes/camera" ;
@@ -328,9 +331,29 @@ export class EditorPreview extends Component<IEditorPreviewProps, IEditorPreview
328331 return ;
329332 }
330333
331- const position = isCamera ( selectedNode ) ? selectedNode . globalPosition : selectedNode . getAbsolutePosition ?.( ) ;
334+ let position : Vector3 | undefined ;
335+ if ( isCamera ( selectedNode ) ) {
336+ position = selectedNode . globalPosition ;
337+ } else if ( isAbstractMesh ( selectedNode ) || isLight ( selectedNode ) || isTransformNode ( selectedNode ) ) {
338+ position = selectedNode . getAbsolutePosition ( ) ;
339+ } else if ( isAnyParticleSystem ( selectedNode ) ) {
340+ if ( isAbstractMesh ( selectedNode . emitter ) ) {
341+ position = selectedNode . emitter . getAbsolutePosition ( ) ;
342+ } else if ( isVector3 ( selectedNode . emitter ) ) {
343+ position = selectedNode . emitter ;
344+ }
345+ } else if ( isSound ( selectedNode ) ) {
346+ const soundPosition = selectedNode [ "_position" ] as Vector3 ;
347+
348+ if ( selectedNode [ "_connectedTransformNode" ] ) {
349+ position = selectedNode [ "_connectedTransformNode" ] . getAbsolutePosition ( ) ;
350+ } else if ( ! soundPosition . equalsToFloats ( 0 , 0 , 0 ) ) {
351+ position = selectedNode [ "_position" ] ( ) ;
352+ }
353+ }
332354
333355 const camera = this . scene . activeCamera ;
356+
334357 if ( position && camera ) {
335358 Tween . create ( camera , 0.5 , {
336359 target : position ,
0 commit comments