package de.venjinx.jme3.scenegraph;
import java.util.HashSet;
import de.venjinx.jme3.scenegraph.ScenegraphListener.GraphChangedEvent;
public class Scenegraph implements SceneNodeListener {
private ScenegraphNode rootNode = new ScenegraphNode("Scene root node", this);
private HashSet<ScenegraphListener> listeners = new HashSet<>();
private boolean logChanges = false;
@Override
public void onNodeChanged(NodeChangedEvent e) {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
String trace = "(" + stackTrace[4].getFileName() + ":"
+ stackTrace[4].getLineNumber() + ")";
switch (e.getType()) {
case ATTACHED:
if (logChanges)
System.out.println(e.getChild() + " attached to "
+ e.getParent() + " - " + trace);
break;
case DETACHED:
if (logChanges)
System.out.println(e.getChild() + " detached from "
+ e.getParent() + " - " + trace);
break;
}
for (ScenegraphListener sl : listeners)
sl.onGraphChanged(new GraphChangedEvent(this, e));
}
public ScenegraphNode getRootNode() {
return rootNode;
}
public void addScenegraphListener(ScenegraphListener listener) {
listeners.add(listener);
}
public void removeListener(ScenegraphListener listener) {
listeners.remove(listener);
}
public HashSet<ScenegraphListener> getListeners() {
return listeners;
}
}