public MockupController() {
    AbstractScreen.mockupController = this;
    AbstractScreen.am = new AssetManager();
    Gdx.input.setCatchBackKey(true);

    loading = new Loading();
    loading.create();
    // { loading.create(); }
    // Must be done before we create the other screens so if we
    // use variables like stagew, stageh... in their constructor (or final)
    // we make sure those attributes are properly setted.

    this.states = new IdentityMap<Screens, AbstractScreen>();
    /* MENUS */
    this.states.put(Screens.MAIN_MENU, new MainMenu());
    this.states.put(Screens.PROJECT_MENU, new ProjectMenu());
    /* GALLERIES */
    this.states.put(Screens.GALLERY, new Gallery());
    this.states.put(Screens.PROJECT_GALLERY, new ProjectGallery());
    this.states.put(Screens.SCENE_GALLERY, new SceneGallery());
    this.states.put(Screens.ELEMENT_GALLERY, new ElementGallery());
    /* CAMARA */
    this.states.put(Screens.RECORDING, new Recording());
    this.states.put(Screens.PICTURE, new Picture());
    /* EDITION */
    this.states.put(Screens.SCENE_EDITION, new SceneEdition());
    this.states.put(Screens.ELEMENT_EDITION, new ElementEdition());

    this.screenCtr = new ScreenController();

    actualScreen = Screens.LOADING;
    this.screenCtr.setCurrentScreen(loading);
  }
  public void dispose() {
    for (AbstractScreen _screen : this.states.values()) {
      _screen.dispose();
    }

    loading.dispose();

    AbstractScreen.stage.dispose();
    AbstractScreen.stage = null;

    AbstractScreen.am.dispose();
    AbstractScreen.am = null;

    /* TODO Dispose Engine here */

    System.exit(0);
  }