Example usage for com.badlogic.gdx.scenes.scene2d.ui Stack add

List of usage examples for com.badlogic.gdx.scenes.scene2d.ui Stack add

Introduction

In this page you can find the example usage for com.badlogic.gdx.scenes.scene2d.ui Stack add.

Prototype

public void add(Actor actor) 

Source Link

Usage

From source file:com.forerunnergames.peril.client.ui.screens.game.play.modes.classic.ClassicModePlayScreen.java

License:Open Source License

public ClassicModePlayScreen(final ClassicModePlayScreenWidgetFactory widgetFactory,
        final ScreenChanger screenChanger, final ScreenSize screenSize, final MouseInput mouseInput,
        final Batch batch, final MBassador<Event> eventBus, final DebugEventGenerator debugEventGenerator) {
    super(widgetFactory, screenChanger, screenSize, mouseInput, batch, eventBus);

    Arguments.checkIsNotNull(widgetFactory, "widgetFactory");
    Arguments.checkIsNotNull(screenSize, "screenSize");
    Arguments.checkIsNotNull(mouseInput, "mouseInput");
    Arguments.checkIsNotNull(eventBus, "eventBus");
    Arguments.checkIsNotNull(debugEventGenerator, "debugEventGenerator");

    this.widgetFactory = widgetFactory;
    this.debugEventGenerator = debugEventGenerator;

    playMapTableForegroundImage = widgetFactory.createPlayMapTableForegroundImage();
    statusBox = widgetFactory.createStatusBox();
    chatBox = widgetFactory.createChatBox(eventBus);
    personBox = widgetFactory.createPersonBox();

    intelBox = widgetFactory.createIntelBox(new ChangeListener() {
        @Override//ww  w . j  av  a 2  s.  co  m
        public void changed(final ChangeEvent event, final Actor actor) {
            // TODO Implement detailed report button.

            log.debug("Clicked detailed report button");
        }
    });

    controlRoomBox = widgetFactory.createControlRoomBox(new ChangeListener() {
        @Override
        public void changed(final ChangeEvent event, final Actor actor) {
            // TODO Implement TradeInDialog & TradeInPhaseHandler.

            log.debug("Clicked trade-in button");

            if (tradeInEvent == null)
                return; // TODO Production: Remove.

            publish(new PlayerTradeInCardsRequestEvent(tradeInEvent.getMatches().iterator().next()));
            controlRoomBox.disableButton(ControlRoomBox.Button.TRADE_IN);
            tradeInEvent = null; // TODO Production: Remove.
        }
    }, new ChangeListener() {
        @Override
        public void changed(final ChangeEvent event, final Actor actor) {
            log.debug("Clicked fortify button");

            attackingBattlePhaseHandler.onEndBattlePhase();
            controlRoomBox.disableButton(ControlRoomBox.Button.FORTIFY);
            controlRoomBox.disableButton(ControlRoomBox.Button.END_TURN);
        }
    }, new ChangeListener() {
        @Override
        public void changed(final ChangeEvent event, final Actor actor) {
            log.debug("Clicked end turn button");

            publish(new EndPlayerTurnRequestEvent());
            controlRoomBox.disableButton(ControlRoomBox.Button.FORTIFY);
            controlRoomBox.disableButton(ControlRoomBox.Button.END_TURN);
        }
    }, new ChangeListener() {
        @Override
        public void changed(final ChangeEvent event, final Actor actor) {
            log.debug("Clicked my settings button");

            // TODO Implement My Settings button.
        }
    }, new ChangeListener() {
        @Override
        public void changed(final ChangeEvent event, final Actor actor) {
            log.debug("Clicked quit button");
            final PlayScreenQuitDialog quitDialog = allDialogs.get(PlayScreenQuitDialog.class);
            quitDialog.show(isGameInProgress.get(), isSpectating.get());
        }
    });

    final Stack rootStack = new Stack();
    rootStack.setFillParent(true);
    rootStack.setDebug(DEBUG, true);

    final Stack playMapTableStack = new Stack();
    final Table playMapTable = new Table().top().left().pad(4);
    playMapCell = playMapTable.add(playMap.asActor()).expand().fill();
    playMapTableStack.add(playMapTable);
    playMapTableStack.add(playMapTableForegroundImage);
    playMapTableStack.setDebug(DEBUG, true);
    playMapTable.setDebug(DEBUG, true);

    final Table sideBarTable = new Table().top().left();
    sideBarTable.add(intelBox.asActor()).size(296, 484).spaceBottom(6).fill();
    sideBarTable.row();
    sideBarTable.add(controlRoomBox.asActor()).size(296, 318).spaceTop(6).fill();
    sideBarTable.setDebug(DEBUG, true);

    // @formatter:off

    final Table topTable = new Table().top().left();
    topTable.add(playMapTableStack).size(PlayMapSettings.ACTUAL_WIDTH + 8, PlayMapSettings.ACTUAL_HEIGHT + 8)
            .spaceRight(6).fill();
    topTable.add(sideBarTable).spaceLeft(6).size(296, PlayMapSettings.ACTUAL_HEIGHT + 8).fill();
    topTable.setDebug(DEBUG, true);

    // @formatter:on

    final Table bottomTable = new Table().top().left();
    bottomTable.add(statusBox.asActor()).size(700, 256).spaceRight(6).fill();
    bottomTable.add(chatBox.asActor()).size(700, 256).spaceLeft(6).spaceRight(6).fill();
    bottomTable.add(personBox.asActor()).size(498, 256).spaceLeft(6).fill();
    bottomTable.setDebug(DEBUG, true);

    final Table screenTable = new Table().top().left().pad(5);
    screenTable.add(topTable).height(808).left().spaceBottom(6).fill();
    screenTable.row().spaceTop(6);
    screenTable.add(bottomTable).height(256).fill();
    screenTable.setDebug(DEBUG, true);

    rootStack.add(screenTable);
    addRootActor(rootStack);

    // @formatter:off

    statusMessageGenerator = new StatusMessageGenerator(statusBox, widgetFactory);

    final BattleDialogListener attackDialogListener = new DefaultAttackDialogListener(allDialogs, playMap,
            mouseInput);
    final BattleDialogListener defendDialogListener = new DefaultDefendDialogListener(allDialogs, playMap,
            mouseInput);
    final PlayScreenDialogListener attackerBattleResultDialogListener = new AttackerBattleResultDialogListener(
            allDialogs, playMap, mouseInput);
    final PlayScreenDialogListener defenderBattleResultDialogListener = new DefenderBattleResultDialogListener(
            allDialogs, playMap, mouseInput);
    final PlayScreenDialogListener occupationDialogListener = new OccupationDialogListener(allDialogs, playMap,
            mouseInput);
    final PlayScreenCancellableDialogListener fortificationDialogListener = new FortificationDialogListener(
            allDialogs, playMap, mouseInput);
    final PlayScreenDialogListener notificationDialogListener = new DefaultPlayScreenDialogListener(allDialogs,
            mouseInput, playMap);
    final PlayScreenCancellableDialogListener quitDialogListener = new QuitDialogListener(allDialogs, playMap,
            mouseInput);
    allDialogListeners.add(attackDialogListener, defendDialogListener, attackerBattleResultDialogListener,
            defenderBattleResultDialogListener, occupationDialogListener, fortificationDialogListener,
            notificationDialogListener, quitDialogListener);

    final Dialog attackerBattleResultDialog = widgetFactory.createAttackerBattleResultDialog(getStage(),
            attackerBattleResultDialogListener);
    final Dialog defenderBattleResultDialog = widgetFactory.createDefenderBattleResultDialog(getStage(),
            defenderBattleResultDialogListener);
    final OccupationDialog occupationDialog = widgetFactory.createOccupationDialog(getStage(),
            occupationDialogListener);
    final FortificationDialog fortificationDialog = widgetFactory.createFortificationDialog(getStage(),
            fortificationDialogListener);
    final ReinforcementDialog reinforcementDialog = widgetFactory.createReinforcementDialog(getStage(),
            personBox, new ReinforcementDialogListener());
    final Dialog quitDialog = widgetFactory.createQuitDialog("", getStage(), quitDialogListener);
    notificationDialog = widgetFactory.createNotificationDialog(widgetFactory, getStage(),
            notificationDialogListener);
    allDialogs.add(attackerBattleResultDialog, defenderBattleResultDialog, occupationDialog,
            fortificationDialog, reinforcementDialog, notificationDialog, quitDialog);

    reinforcementPhaseHandler = new ReinforcementPhaseHandler(playMap, reinforcementDialog, eventBus);
    manualCountryAssignmentPhaseHandler = new ManualCountryAssignmentPhaseHandler(playMap, eventBus);
    occupationPhaseHandler = new OccupationPhaseHandler(playMap, occupationDialog, eventBus);
    fortificationPhaseHandler = new FortificationPhaseHandler(playMap, fortificationDialog, eventBus);
    gamePhaseHandlers.add(reinforcementPhaseHandler, manualCountryAssignmentPhaseHandler,
            occupationPhaseHandler, fortificationPhaseHandler);

    // @formatter:on
}

From source file:com.forerunnergames.peril.client.ui.screens.game.play.modes.classic.dialogs.armymovement.AbstractArmyMovementDialog.java

License:Open Source License

private void setCountryImage(final Country country, final CountryArmyText countryArmyText,
        final Stack countryStack, final Cell<Stack> countryStackCell, final float countryArrowWidth,
        final CellPadding paddingType) {
    final Image countryImage = asImage(country);

    countryStack.clear();//from   w w  w  . j av  a  2 s  . co m
    countryStack.add(countryImage);
    countryStack.add(countryArmyText.asActor());

    getContentTable().layout();

    Widgets.padCell(countryStackCell, calculateCountryImagePadding(countryImage, countryArrowWidth),
            paddingType);

    countryStackCell.getTable().invalidateHierarchy();

    getContentTable().layout();

    updateCountryArmyCircle(countryArmyText, country, countryImage);
}

From source file:com.forerunnergames.peril.client.ui.screens.game.play.modes.classic.dialogs.battle.AbstractBattleDialog.java

License:Open Source License

protected AbstractBattleDialog(final BattleDialogWidgetFactory widgetFactory, final String title,
        final Stage stage, final ScreenShaker screenShaker, final BattleDialogListener listener) {
    // @formatter:off
    super(widgetFactory,
            DialogStyle.builder().windowStyle(StyleSettings.BATTLE_DIALOG_WINDOW_STYLE).modal(false)
                    .movable(true).size(990, 432).position(405, ScreenSettings.REFERENCE_SCREEN_HEIGHT - 178)
                    .title(title).titleHeight(56).messageBox(false).border(28).buttonSpacing(16)
                    .buttonTextPaddingHorizontal(6).debug(DEBUG).build(),
            stage, listener);/*ww  w .j a v a2  s. c o  m*/
    // @formatter:on

    Arguments.checkIsNotNull(widgetFactory, "widgetFactory");
    Arguments.checkIsNotNull(stage, "stage");
    Arguments.checkIsNotNull(screenShaker, "screenShaker");
    Arguments.checkIsNotNull(listener, "listener");

    this.widgetFactory = widgetFactory;
    this.screenShaker = screenShaker;
    this.listener = listener;

    attackingPlayerNameLabel = widgetFactory.createBattleDialogPlayerNameLabel();
    defendingPlayerNameLabel = widgetFactory.createBattleDialogPlayerNameLabel();
    attackingCountryNameLabel = widgetFactory.createBattleDialogCountryNameLabel();
    defendingCountryNameLabel = widgetFactory.createBattleDialogCountryNameLabel();
    battlingArrowLabel = widgetFactory.createBattleDialogBattlingArrowLabel();
    attackerDice = widgetFactory.createAttackerDice();
    defenderDice = widgetFactory.createDefenderDice();
    diceArrows = widgetFactory.createBattleDialogDiceArrows();
    attackingCountryArmyText = widgetFactory.createCountryArmyText();
    attackingCountryArmyTextEffects = widgetFactory.createAttackingCountryArmyTextEffects();
    defendingCountryArmyText = widgetFactory.createCountryArmyText();
    defendingCountryArmyTextEffects = widgetFactory.createDefendingCountryArmyTextEffects();
    battleSingleExplosionSoundEffect = widgetFactory.createBattleSingleExplosionSoundEffect();
    battleAmbienceSoundEffect = widgetFactory.createBattleAmbienceSoundEffect();

    attackingCountryStack = new Stack();
    defendingCountryStack = new Stack();

    final Table attackingCountryTable = new Table();
    attackingCountryTable.add(attackingCountryStack);
    attackingCountryTable.setClip(true);
    attackingCountryTable.setDebug(DEBUG, true);

    final Table defendingCountryTable = new Table();
    defendingCountryTable.add(defendingCountryStack);
    defendingCountryTable.setClip(true);
    defendingCountryTable.setDebug(DEBUG, true);

    final Table diceTable = new Table().pad(2);
    diceTable.add(attackerDice.asActor()).spaceRight(22).top();
    diceTable.add(defenderDice.asActor()).spaceLeft(22).top();
    diceTable.setDebug(DEBUG, true);

    final Table diceArrowsTable = new Table().top().padTop(10);
    diceArrowsTable.add(diceArrows.asActor());
    diceArrowsTable.setDebug(DEBUG, true);

    final Stack diceTableStack = new Stack();
    diceTableStack.add(diceTable);
    diceTableStack.add(diceArrowsTable);
    diceTableStack.setDebug(DEBUG, true);

    final Table leftTable = new Table().top().pad(2);
    leftTable.add(attackingPlayerNameLabel).size(PLAYER_NAME_BOX_WIDTH, PLAYER_NAME_BOX_HEIGHT).space(2);
    leftTable.row();
    leftTable.add(attackingCountryTable).size(COUNTRY_BOX_WIDTH, COUNTRY_BOX_HEIGHT)
            .padBottom(COUNTRY_BOX_INNER_PADDING + 3).space(2);
    leftTable.row();
    leftTable.add(attackingCountryNameLabel).size(COUNTRY_NAME_BOX_WIDTH, COUNTRY_NAME_BOX_HEIGHT).space(2);
    leftTable.setDebug(DEBUG, true);

    final Table centerTable = new Table().top().padTop(2).padBottom(2);
    centerTable.add(battlingArrowLabel).padRight(8)
            .padTop(24 - BATTLING_ARROW_LABEL_TEXT_VERTICAL_INNER_PADDING)
            .padBottom(51 + BATTLING_ARROW_LABEL_TEXT_VERTICAL_INNER_PADDING);
    centerTable.row();
    centerTable.add(diceTableStack).size(94, 116);
    centerTable.setDebug(DEBUG, true);

    final Table rightTable = new Table().top().pad(2);
    rightTable.add(defendingPlayerNameLabel).size(PLAYER_NAME_BOX_WIDTH, PLAYER_NAME_BOX_HEIGHT).space(2);
    rightTable.row();
    rightTable.add(defendingCountryTable).size(COUNTRY_BOX_WIDTH, COUNTRY_BOX_HEIGHT)
            .padBottom(COUNTRY_BOX_INNER_PADDING + 3).space(2);
    rightTable.row();
    rightTable.add(defendingCountryNameLabel).size(COUNTRY_NAME_BOX_WIDTH, COUNTRY_NAME_BOX_HEIGHT).space(2);
    rightTable.setDebug(DEBUG, true);

    getContentTable().defaults().space(0).pad(0);
    getContentTable().top();
    getContentTable().add(leftTable).size(404, 264);
    getContentTable().add(centerTable).size(126, 264);
    getContentTable().add(rightTable).size(404, 264);
    getContentTable().row();
}

From source file:com.forerunnergames.peril.client.ui.screens.game.play.modes.classic.dialogs.battle.AbstractBattleDialog.java

License:Open Source License

private void setCountryImage(final Country country, final CountryArmyText countryArmyText,
        final CountryArmyText countryArmyTextEffects, final Stack countryStack) {
    final Image countryImage = asImage(country);

    countryStack.clear();/*from  w ww.  j  a va 2  s  .  com*/
    countryStack.add(countryImage);
    countryStack.add(countryArmyText.asActor());
    countryStack.add(countryArmyTextEffects.asActor());

    getContentTable().layout();

    updateCountryArmyCircle(countryArmyText, country, countryImage);
    updateCountryArmyCircle(countryArmyTextEffects, country, countryImage);
}

From source file:com.forerunnergames.peril.client.ui.screens.loading.AbstractLoadingScreen.java

License:Open Source License

public AbstractLoadingScreen(final LoadingScreenWidgetFactory widgetFactory, final ScreenChanger screenChanger,
        final ScreenSize screenSize, final MouseInput mouseInput, final Batch batch,
        final MBassador<Event> eventBus, final AssetManager assetManager, final LoadingScreenStyle style) {
    super(widgetFactory, screenChanger, screenSize, mouseInput, batch, eventBus);

    Arguments.checkIsNotNull(widgetFactory, "widgetFactory");
    Arguments.checkIsNotNull(assetManager, "assetManager");
    Arguments.checkIsNotNull(style, "style");

    this.assetManager = assetManager;
    this.style = style;

    progressBar = widgetFactory.createProgressBar(style);

    final Label loadingTitleTextLabel = widgetFactory.createLoadingTitleLabel(style);
    final int loadingTitleTextLabelWidth = style.getLoadingTitleTextLabelWidth();
    final int loadingTitleTextLabelHeight = style.getLoadingTitleTextLabelHeight();

    loadingStatusTextLabel = widgetFactory.createLoadingStatusLabel(style);

    final Stack rootStack = new Stack();
    rootStack.setFillParent(true);/*  w  ww  .  j a va 2s.c  o m*/
    rootStack.add(widgetFactory.createBackground());

    // @formatter:off

    final Table foregroundTable = new Table().top();
    foregroundTable.add().height(style.getLoadingTitleTextVerticalSpacer());
    foregroundTable.row();
    foregroundTable.add(loadingTitleTextLabel).size(loadingTitleTextLabelWidth, loadingTitleTextLabelHeight);
    foregroundTable.row().bottom();
    foregroundTable.add(progressBar).size(style.getProgressBarWidth(), style.getProgressBarHeight())
            .padBottom(style.getProgressBarStatusTextSpacer());
    foregroundTable.row();
    foregroundTable.add(loadingStatusTextLabel);

    // @formatter:on

    rootStack.add(foregroundTable);
    addRootActor(rootStack);

    quitDialog = createQuitDialog(style.getQuitDialogMessageText(), new QuitDialogListener());
    errorDialog = createErrorDialog(new ErrorDialogListener());
}

From source file:com.forerunnergames.peril.client.ui.screens.menus.MenuScreenWidgetFactory.java

License:Open Source License

public ImageTextButton createMenuChoice(final String choiceText, final EventListener listener) {
    Arguments.checkIsNotNullOrEmptyOrBlank(choiceText, "choiceText");
    Arguments.checkIsNotNull(listener, "listener");

    final ImageTextButton menuChoiceButton = new ImageTextButton(choiceText, createMenuChoiceStyle());

    final Stack singlePlayerButtonStack = new Stack();
    singlePlayerButtonStack.add(new Container<>(menuChoiceButton.getLabel()).left().padLeft(60));
    singlePlayerButtonStack.add(menuChoiceButton.getImage());
    menuChoiceButton.clearChildren();/*w  w  w  .j  a  v a  2s .  c om*/
    menuChoiceButton.add(singlePlayerButtonStack).fill().expand();
    menuChoiceButton.addListener(listener);

    return menuChoiceButton;
}

From source file:com.gdx.extension.screen.ScreenManager.java

License:Apache License

/**
 * Render all screens.//from   w ww.j a v a 2 s . co m
 * 
 * @param delta time from last frame
 */
public void render(float delta) {
    screenEvents.reverse();
    while (screenEvents.size > 0) {
        ScreenEvent _event = screenEvents.pop();
        Class<? extends BaseScreen> _screenType = _event.getScreen();
        BaseScreen _screen = getScreen(_screenType);
        switch (_event.getAction()) {
        case ADD:
            try {
                _screen = (BaseScreen) ClassReflection.getConstructor(_screenType, ScreenManager.class)
                        .newInstance(this);
            } catch (ReflectionException e) {
                e.printStackTrace();
                continue;
            }
            screens.add(_screen);
            _event.getFuture().done(_screen);
            _screen.create();

            for (ScreenListener _listener : _screen.listeners) {
                _listener.onCreate();
            }

            break;

        case REMOVE:
            screens.removeValue(_screen, true);
            _screen.dispose();

            for (ScreenListener _listener : _screen.listeners) {
                _listener.onRemove();
            }

            break;

        case SHOW:
            _screen.show();

            for (ScreenListener _listener : _screen.listeners) {
                _listener.onShow();
            }

            break;

        case HIDE:
            _screen.hide();

            for (ScreenListener _listener : _screen.listeners) {
                _listener.onHide();
            }

            break;

        default:
            break;
        }
        eventPool.free(_event);
    }

    // Update depth
    if (needUpdate) {
        depthList.clear();
        for (int i = 0; i < screens.size; i++) {
            BaseScreen _screen = screens.get(i);
            if (_screen.isActive) {
                depthList.add(_screen);
            }
        }
        depthList.sort();

        Stack _stageStack = MasterScreen.stageStack;
        _stageStack.clear();
        for (int i = 0; i < depthList.size; i++) {
            BaseScreen _screen = depthList.get(i);
            _stageStack.add(_screen.layout);
        }
    }

    for (int i = 0; i < depthList.size; i++) {
        BaseScreen _screen = depthList.get(i);
        _screen.render(delta);
    }

    MasterScreen.masterRender(delta);
}

From source file:com.packtpub.libgdx.canyonbunny.screens.MenuScreen.java

License:Apache License

private void rebuildStage() {
    skinCanyonBunny = new Skin(Gdx.files.internal(Constants.SKIN_CANYONBUNNY_UI),
            new TextureAtlas(Constants.TEXTURE_ATLAS_UI));
    skinLibgdx = new Skin(Gdx.files.internal(Constants.SKIN_LIBGDX_UI),
            new TextureAtlas(Constants.TEXTURE_ATLAS_LIBGDX_UI));

    // build all layers
    Table layerBackground = buildBackgroundLayer();
    Table layerObjects = buildObjectsLayer();
    Table layerLogos = buildLogosLayer();
    Table layerControls = buildControlsLayer();
    Table layerOptionsWindow = buildOptionsWindowLayer();

    // assemble stage for menu screen
    stage.clear();/*from  w w w .  ja  v  a 2  s .co  m*/
    Stack stack = new Stack();
    stage.addActor(stack);
    stack.setSize(Constants.VIEWPORT_GUI_WIDTH, Constants.VIEWPORT_GUI_HEIGHT);
    stack.add(layerBackground);
    stack.add(layerObjects);
    stack.add(layerLogos);
    stack.add(layerControls);
    stage.addActor(layerOptionsWindow);
}

From source file:com.vlaaad.dice.ui.windows.CreatureQueueWindow.java

License:Open Source License

@Override
protected void initialize() {
    creaturesList.defaults().pad(2);/*  ww  w .  j a v a2  s. com*/
    creaturesList.padTop(12);

    Image left = new Image(Config.skin, "ui-creature-queue-gradient-left");
    left.setScaling(Scaling.stretchY);
    left.setAlign(Align.left);
    left.setTouchable(Touchable.disabled);

    Image right = new Image(Config.skin, "ui-creature-queue-gradient-right");
    right.setScaling(Scaling.stretchY);
    right.setAlign(Align.right);
    right.setTouchable(Touchable.disabled);

    Stack stack = new Stack();
    stack.add(new ScrollPane(creaturesList, new ScrollPane.ScrollPaneStyle()));
    stack.add(left);
    stack.add(right);

    Table content = new Table(Config.skin);
    content.setTouchable(Touchable.enabled);
    content.setBackground("ui-inventory-ability-window-background");
    content.defaults().pad(2);
    content.add(new LocLabel("ui-turns-order")).row();
    content.add(new Image(Config.skin, "ui-creature-info-line")).width(100).row();
    content.add(stack).maxWidth(table.getStage().getWidth() - 45).padRight(4).padLeft(4).row();

    table.add(content);
}

From source file:headmade.arttag.screens.MenuScreen.java

License:Apache License

public MenuScreen(DirectedGame game) {
    super(game);/*from  w w  w  .  j a  v  a 2 s . com*/

    // FlickrService.instance.getPhotos(1, 1);
    Player.instance.init();

    jiggleAction = ActionFactory.wiggleRepeat(1f, 0.8f);

    final Table rootTable = new Table();
    rootTable.setFillParent(true);

    howTo = new HowToActor(game);
    credits = new CreditsActor();
    final Actor artTreachery = new Image(Assets.instance.skin.getRegion(AssetTextures.artTreachery));

    credits.getColor().a = 0f;

    final Stack mainContainer = new Stack();
    mainContainer.add(howTo);
    mainContainer.add(credits);

    rootTable.add(artTreachery).colspan(2).padTop(20f).row();
    rootTable.add(mainContainer).expand();// .fill(1f, 1f);
    rootTable.add(buildMenu()).expandY().center().padRight(20f);
    rootTable.row();
    // rootTable.setDebug(true);

    this.stage.addActor(rootTable);

    stage.addListener(new InputListener() {

        @Override
        public boolean keyDown(InputEvent event, int keycode) {
            if (keycode == Keys.ESCAPE) {
                Gdx.app.exit();
                return true;
            } else if (keycode == Keys.LEFT || keycode == Keys.A) {
                activatePrevButton();
                return true;
            } else if (keycode == Keys.RIGHT || keycode == Keys.D) {
                activateNextButton();
                return true;
            } else if (keycode == Keys.UP || keycode == Keys.W) {
                activatePrevButton();
                return true;
            } else if (keycode == Keys.DOWN || keycode == Keys.S) {
                activateNextButton();
                return true;
            } else if (keycode == Keys.ALT_LEFT || keycode == Keys.ALT_RIGHT || keycode == Keys.Z
                    || keycode == Keys.SPACE) {
                // action button 1
                useActiveButton();
                return true;
            } else if (keycode == Keys.CONTROL_LEFT || keycode == Keys.CONTROL_RIGHT || keycode == Keys.X
                    || keycode == Keys.SHIFT_LEFT || keycode == Keys.SHIFT_RIGHT) {
                // action button 2
                useActiveButton();
                return true;
            }
            return super.keyDown(event, keycode);
        }

        private void useActiveButton() {
            final InputEvent event = new InputEvent();
            event.setPointer(0);
            event.setType(Type.touchDown);
            buttons.get(activeButtonIndex).fire(event);
        }

        private void activatePrevButton() {
            InputEvent event = new InputEvent();
            event.setPointer(-1);
            event.setType(Type.exit);
            buttons.get(activeButtonIndex).fire(event);

            buttons.get(activeButtonIndex).removeAction(jiggleAction);
            if (activeButtonIndex == 0) {
                activeButtonIndex = buttons.size - 1;
            } else {
                activeButtonIndex--;
            }
            jiggleAction = ActionFactory.wiggleRepeat(1f, 0.8f);
            buttons.get(activeButtonIndex).addAction(jiggleAction);

            event = new InputEvent();
            event.setPointer(-1);
            event.setType(Type.enter);
            buttons.get(activeButtonIndex).fire(event);
        }

        private void activateNextButton() {
            InputEvent event = new InputEvent();
            event.setPointer(-1);
            event.setType(Type.exit);
            buttons.get(activeButtonIndex).fire(event);

            buttons.get(activeButtonIndex).removeAction(jiggleAction);
            if (activeButtonIndex == buttons.size - 1) {
                activeButtonIndex = 0;
            } else {
                activeButtonIndex++;
            }
            jiggleAction = ActionFactory.wiggleRepeat(1f, 0.8f);
            buttons.get(activeButtonIndex).addAction(jiggleAction);

            event = new InputEvent();
            event.setPointer(-1);
            event.setType(Type.enter);
            buttons.get(activeButtonIndex).fire(event);
        }

    });

    // ((OrthographicCamera) stage.getCamera()).zoom = 0.5f;
}