public void update() {

    stage.act(Gdx.graphics.getDeltaTime());

    UIScene scene = this.getCurrentScene();

    if (scene != null) {
      Object controller = scopeService.getController(scene.getControllerName());

      if (controller instanceof SceneEventListener) {
        SceneEventListener listener = (SceneEventListener) controller;
        if (listener != null) listener.updateScene(scene, this, scopeService, assetService);
      }
    }
  }
  // this loads everything into stage.
  public void RenderScene(String startSceneName) {
    Array<XmlReader.Element> scenes;

    if (startSceneName.endsWith(".xml")) {
      try {
        startSceneName = LoadFile(startSceneName);
      } catch (Exception io) {

      }
    }

    scenes = xml_element.getChildrenByName("scene");

    int Count = 0;

    for (XmlReader.Element sceneElement : scenes) {
      String sceneName = sceneElement.getAttribute("name", "Scene_" + Count++);

      if (startSceneName.equalsIgnoreCase(sceneName)) {
        stage.clear();
        // reset controller
        scopeService.setCurrentController(null);
        scopeService.clearScopeVariables(); // clear all temporary variables

        String controllerName = sceneElement.getAttribute("controller", null);
        scopeService.setCurrentController(controllerName);

        int count = sceneElement.getChildCount();
        UIScene currentScene = new UIScene();
        currentScene.setName(sceneName);
        currentScene.setControllerName(controllerName);
        currentScene.setFillParent(true); // fixed: the table is not full-sized based on window size

        for (int i = 0; i < count; i++) {
          XmlReader.Element child = sceneElement.getChild(i);

          // use factory and dictionary
          // todo:
          // Factory factory = Dictionary.get(ElementName);
          // Actor a = Factory.CreateActor();
          // gScene.addActor(a);

          Actor a = CreateActorFromElement(child);

          if (a != null) {
            currentScene.addActor(a);
          }
        }
        Object controller = scopeService.getCurrentController();

        if (lastRenderedScene != null) {
          // ToDO: perform exitScene here
        }

        if (controller instanceof SceneEventListener) {
          ((SceneEventListener) controller).enterScene(currentScene, this);
        }

        stage.addActor(currentScene);
        lastRenderedScene = currentScene;
        break;
      }
    }
  }