@@ -177,6 +177,11 @@ public abstract class AbstractSceneFileEditor<IM extends AbstractSceneFileEditor
177177 */
178178 private boolean ignoreListeners ;
179179
180+ /**
181+ * The flag of ignoring camera moving.
182+ */
183+ private boolean ignoreCameraMove ;
184+
180185 public AbstractSceneFileEditor () {
181186 this .editorAppState = createEditorAppState ();
182187 this .operationControl = new EditorOperationControl (this );
@@ -406,6 +411,20 @@ protected void setIgnoreListeners(final boolean ignoreListeners) {
406411 this .ignoreListeners = ignoreListeners ;
407412 }
408413
414+ /**
415+ * @return true if need to ignore moving camera.
416+ */
417+ protected boolean isIgnoreCameraMove () {
418+ return ignoreCameraMove ;
419+ }
420+
421+ /**
422+ * @param ignoreCameraMove true if need to ignore moving camera.
423+ */
424+ protected void setIgnoreCameraMove (final boolean ignoreCameraMove ) {
425+ this .ignoreCameraMove = ignoreCameraMove ;
426+ }
427+
409428 /**
410429 * @param currentModel the opened model.
411430 */
@@ -518,8 +537,13 @@ public void notifySelected(@Nullable Object object) {
518537 object = ((EditorAudioNode ) object ).getAudioNode ();
519538 }
520539
521- final ModelNodeTree modelNodeTree = getModelNodeTree ();
522- modelNodeTree .select (object );
540+ setIgnoreCameraMove (true );
541+ try {
542+ final ModelNodeTree modelNodeTree = getModelNodeTree ();
543+ modelNodeTree .select (object );
544+ } finally {
545+ setIgnoreCameraMove (false );
546+ }
523547 }
524548
525549 @ NotNull
@@ -531,6 +555,8 @@ public void notifySelected(@Nullable Object object) {
531555 @ FXThread
532556 public void selectNodeFromTree (@ Nullable final Object object ) {
533557
558+ final MA editorAppState = getEditorAppState ();
559+
534560 Object parent = null ;
535561 Object element = null ;
536562
@@ -544,12 +570,12 @@ public void selectNodeFromTree(@Nullable final Object object) {
544570 Spatial spatial = null ;
545571
546572 if (element instanceof AudioNode ) {
547- spatial = getEditorAppState () .getAudioNode ((AudioNode ) element );
573+ spatial = editorAppState .getAudioNode ((AudioNode ) element );
548574 } else if (element instanceof Spatial ) {
549575 spatial = (Spatial ) element ;
550576 parent = spatial .getParent ();
551577 } else if (element instanceof Light ) {
552- spatial = getEditorAppState () .getLightNode ((Light ) element );
578+ spatial = editorAppState .getLightNode ((Light ) element );
553579 }
554580
555581 if (spatial != null && !spatial .isVisible ()) {
@@ -558,6 +584,10 @@ public void selectNodeFromTree(@Nullable final Object object) {
558584
559585 updateSelection (spatial );
560586
587+ if (spatial != null && !isIgnoreCameraMove ()) {
588+ editorAppState .moveCameraTo (spatial .getWorldTranslation ());
589+ }
590+
561591 final ModelPropertyEditor modelPropertyEditor = getModelPropertyEditor ();
562592 modelPropertyEditor .buildFor (element , parent );
563593 }
0 commit comments