Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion jme3-core/src/main/java/com/jme3/scene/Geometry.java
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ public int collideWith(Collidable other, CollisionResults results) {
}

@Override
public void depthFirstTraversal(SceneGraphVisitor visitor) {
public void depthFirstTraversal(SceneGraphVisitor visitor, DFSMode mode) {
visitor.visit(this);
}

Expand Down
15 changes: 11 additions & 4 deletions jme3-core/src/main/java/com/jme3/scene/Node.java
Original file line number Diff line number Diff line change
Expand Up @@ -770,11 +770,18 @@ public void updateModelBound() {
}
}
@Override
public void depthFirstTraversal(SceneGraphVisitor visitor) {
for (Spatial child : children.getArray()) {
child.depthFirstTraversal(visitor);
public void depthFirstTraversal(SceneGraphVisitor visitor, DFSMode mode) {
if (mode == DFSMode.POST_ORDER) {
for (Spatial child : children.getArray()) {
child.depthFirstTraversal(visitor);
}
visitor.visit(this);
} else { //pre order
visitor.visit(this);
for (Spatial child : children.getArray()) {
child.depthFirstTraversal(visitor);
}
}
visitor.visit(this);
}
@Override
protected void breadthFirstTraversal(SceneGraphVisitor visitor, Queue<Spatial> queue) {
Expand Down
29 changes: 27 additions & 2 deletions jme3-core/src/main/java/com/jme3/scene/Spatial.java
Original file line number Diff line number Diff line change
Expand Up @@ -1798,10 +1798,35 @@ public Matrix4f getLocalToWorldMatrix(Matrix4f store) {
}

/**
* Visit each scene graph element ordered by DFS
* Visit each scene graph element ordered by DFS with the default post order mode.
* @param visitor
* @see #depthFirstTraversal(com.jme3.scene.SceneGraphVisitor, com.jme3.scene.Spatial.DFSMode)
*/
public abstract void depthFirstTraversal(SceneGraphVisitor visitor);
public void depthFirstTraversal(SceneGraphVisitor visitor) {
depthFirstTraversal(visitor, DFSMode.POST_ORDER);
}

/**
* Specifies the mode of the depth first search.
*/
public static enum DFSMode {
/**
* Pre order: the current spatial is visited first, then its children.
*/
PRE_ORDER,
/**
* Post order: the children are visited first, then the parent.
*/
POST_ORDER;
}

/**
* Visit each scene graph element ordered by DFS.
* There are two modes: pre order and post order.
* @param visitor
* @param mode the traversal mode: pre order or post order
*/
public abstract void depthFirstTraversal(SceneGraphVisitor visitor, DFSMode mode);

/**
* Visit each scene graph element ordered by BFS
Expand Down