Skip to content

Commit 7b57f4f

Browse files
committed
updated camera behavior when you select a node from node tree
1 parent 1e66460 commit 7b57f4f

File tree

2 files changed

+43
-4
lines changed

2 files changed

+43
-4
lines changed

src/com/ss/editor/state/editor/impl/scene/AbstractSceneEditorAppState.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1261,6 +1261,15 @@ private void addLightImpl(@NotNull final Light light) {
12611261
getLightNodes().add(lightModel);
12621262
}
12631263

1264+
/**
1265+
* Move a camera to a location.
1266+
*
1267+
* @param location the location.
1268+
*/
1269+
public void moveCameraTo(@NotNull final Vector3f location) {
1270+
EXECUTOR_MANAGER.addEditorThreadTask(() -> getNodeForCamera().setLocalTranslation(location));
1271+
}
1272+
12641273
/**
12651274
* Remove a light.
12661275
*

src/com/ss/editor/ui/component/editor/impl/scene/AbstractSceneFileEditor.java

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)