/**
   * Visit each scene graph element ordered by BFS
   *
   * @param visitor
   */
  public void breadthFirstTraversal(SceneGraphVisitor visitor) {
    Queue<Spatial> queue = new LinkedList<Spatial>();
    queue.add(this);

    while (!queue.isEmpty()) {
      Spatial s = queue.poll();
      visitor.visit(s);
      s.breadthFirstTraversal(visitor, queue);
    }
  }
  public static <T extends Control> T findFirstControl(Spatial sp, final Class<T> aClass) {
    controlResult = null;
    sp.breadthFirstTraversal(
        new SceneGraphVisitor() {
          @Override
          public void visit(Spatial spatial) {
            if (spatial.getControl(aClass) != null) {
              controlResult = spatial.getControl(aClass);
            }
          }
        });

    return (T) controlResult;
  }