Example usage for com.badlogic.gdx.scenes.scene2d.ui Dialog button

List of usage examples for com.badlogic.gdx.scenes.scene2d.ui Dialog button

Introduction

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

Prototype

public Dialog button(Button button) 

Source Link

Document

Adds the given button to the button table.

Usage

From source file:com.ray3k.skincomposer.dialog.DialogDrawables.java

License:Open Source License

/**
 * Show an setStatusBarError indicating a drawable that exceeds project specifications
 *///from   w  ww. j  a va 2s.  c  o m
private void showDrawableError() {
    Dialog dialog = new Dialog("Error...", getSkin(), "bg");

    dialog.getTitleTable().padLeft(5.0f);
    dialog.getContentTable().padLeft(10.0f).padRight(10.0f).padTop(5.0f);
    dialog.getButtonTable().padBottom(15.0f);

    Label label = new Label(
            "Error while adding new drawables.\nEnsure that image dimensions are\nless than maximums specified in project.\nRolling back changes...",
            getSkin());
    label.setAlignment(Align.center);
    dialog.text(label);
    dialog.button("OK");
    dialog.show(getStage());
}

From source file:com.ray3k.skincomposer.dialog.DialogFactory.java

License:Open Source License

public void showDialogError(String title, String message, Runnable runnable) {
    Dialog dialog = new Dialog(title, skin, "bg") {
        @Override//  w  w  w  .j  a  v  a 2  s  . com
        public boolean remove() {
            if (runnable != null) {
                runnable.run();
            }
            return super.remove();
        }

    };

    dialog.text(message);
    dialog.button("OK");
    dialog.getButtonTable().getCells().first().getActor().addListener(main.getHandListener());
    dialog.show(stage);
}

From source file:com.ray3k.skincomposer.dialog.DialogFonts.java

License:Open Source License

private void showAddFontSizeError(String name) {
    Dialog dialog = new Dialog("", skin, "bg");

    Label label = new Label("Error adding font...", skin, "title");
    dialog.getContentTable().add(label);

    dialog.getContentTable().row();//from ww w.ja v  a  2 s .c o  m
    dialog.text("Unable to add font \"" + name
            + "\". Ensure image dimensions\nare less than max texture dimensions ("
            + projectData.getMaxTextureWidth() + "x" + projectData.getMaxTextureHeight()
            + ").\nSee project settings.");
    dialog.button("Ok");
    dialog.show(getStage());
}

From source file:halive.shootinoutside.menu.MainMenu.java

private void showAboutDialog() {
    Dialog dialog = new Dialog("About", UIConstants.Dialogs.loadSkin());
    Table content = dialog.getContentTable();
    for (String s : UIConstants.Dialogs.About.ABOUT_DIALOG_TEXT) {
        content.add(new Label(s, UIConstants.Dialogs.loadSkin()))
                .padBottom(UIConstants.Dialogs.PADDING_BOTTOM / 3)
                .padTop(UIConstants.Dialogs.PADDING_BOTTOM / 3).row();
    }/*from  w  ww  .ja v a  2  s  .c o m*/
    dialog.button("Close");
    dialog.show(stage);
}

From source file:net.noviden.towerdefense.MapCreator.MapCreatorScreen.java

License:Open Source License

public MapCreatorScreen(final TowerDefense towerDefense) {
    this.towerDefense = towerDefense;

    camera = new OrthographicCamera();
    camera.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    camera.update();//  w w w. j  a  v  a  2s  .c  o  m

    stage = new Stage();

    final Skin skin = new Skin(Gdx.files.internal("assets/uiskin.json"));

    table = new Table();
    table.setFillParent(true);

    name = UUID.randomUUID().toString().substring(0, 5);

    Label nameLabel = new Label("Name:", skin);
    final TextField nameField = new TextField(name, skin);
    TextButton addPathButton = new TextButton("Add New Path", skin);
    TextButton undoButton = new TextButton("Remove Last Point", skin);
    TextButton finishButton = new TextButton("Save Map", skin);
    TextButton exitButton = new TextButton("Exit", skin);

    final TextButton displayOptionsButton = new TextButton("Options", skin);

    // set up options table
    final Table optionsTable = new Table();
    optionsTable.setVisible(false);

    Label initialPlayerHealthLabel = new Label("Initial Player Health:", skin);
    final TextField initialPlayerHealthText = new TextField("" + MapSettings.DEFAULT_INITIAL_PLAYER_HEALTH,
            skin);
    Label initialPlayerResourcesLabel = new Label("Initial Player Resources:", skin);
    final TextField initialPlayerResourcesText = new TextField(
            "" + MapSettings.DEFAULT_INITIAL_PLAYER_RESOURCES, skin);
    Label initialUnitHealthLabel = new Label("Initial Unit Health:", skin);
    final TextField initialUnitHealthText = new TextField("" + MapSettings.DEFAULT_INITIAL_UNIT_HEALTH, skin);
    Label initialUnitMovementSpeedLabel = new Label("Initial Unit Movement Speed:", skin);
    final TextField initialUnitMovementSpeedText = new TextField("" + MapSettings.DEFAULT_INITIAL_UNIT_SPEED,
            skin);
    Label initialUnitDamageLabel = new Label("Initial Unit Damage:", skin);
    final TextField initialUnitDamageText = new TextField("" + MapSettings.DEFAULT_INITIAL_UNIT_DAMAGE, skin);
    Label defaultUnitSpawnRateLabel = new Label("Unit Spawn Rate:", skin);
    final TextField defaultUnitSpawnRateText = new TextField("" + MapSettings.DEFAULT_UNIT_SPAWN_RATE, skin);

    TextButton displayWavesCreatorButton = new TextButton("Waves Creator", skin);
    TextButton displayTurretsButton = new TextButton("Disable Turrets", skin);

    optionsTable.add(initialPlayerHealthLabel, initialPlayerHealthText);
    optionsTable.row();
    optionsTable.add(initialPlayerResourcesLabel, initialPlayerResourcesText);
    optionsTable.row();
    optionsTable.add(initialUnitHealthLabel, initialUnitHealthText);
    optionsTable.row();
    optionsTable.add(initialUnitMovementSpeedLabel, initialUnitMovementSpeedText);
    optionsTable.row();
    optionsTable.add(initialUnitDamageLabel, initialUnitDamageText);
    optionsTable.row();
    optionsTable.add(defaultUnitSpawnRateLabel, defaultUnitSpawnRateText);
    optionsTable.row();
    optionsTable.add(displayTurretsButton);

    final Table disableTurretsTable = new Table();
    disableTurretsTable.setVisible(false);

    final CheckBox disableChaingunTurretCheckbox = new CheckBox("Disable Chaingun", skin);
    final CheckBox disableBasicTurretCheckbox = new CheckBox("Disable Basic", skin);
    final CheckBox disableBuffTurretCheckbox = new CheckBox("Disable Buff", skin);
    final CheckBox disableHomingTurretCheckbox = new CheckBox("Disable Homing", skin);
    final CheckBox disableRocketTurretCheckbox = new CheckBox("Disable Rocket", skin);
    final CheckBox disableShotgunTurretCheckbox = new CheckBox("Disable Shotgun", skin);

    disableTurretsTable.add(disableChaingunTurretCheckbox);
    disableTurretsTable.row();
    disableTurretsTable.add(disableBasicTurretCheckbox);
    disableTurretsTable.row();
    disableTurretsTable.add(disableBuffTurretCheckbox);
    disableTurretsTable.row();
    disableTurretsTable.add(disableHomingTurretCheckbox);
    disableTurretsTable.row();
    disableTurretsTable.add(disableRocketTurretCheckbox);
    disableTurretsTable.row();
    disableTurretsTable.add(disableShotgunTurretCheckbox);

    optionsTable.row();
    optionsTable.add(disableTurretsTable);

    table.add(addPathButton);
    table.add(undoButton);
    table.add(finishButton);
    table.add(exitButton);
    table.row();
    table.add(nameLabel, nameField);
    table.add(displayOptionsButton);
    table.row();
    table.add(optionsTable);

    table.top();
    table.right();

    stage.addActor(table);

    inputMultiplexer = new InputMultiplexer();
    inputMultiplexer.addProcessor(stage);
    inputMultiplexer.addProcessor(new GestureDetector(new MyGestureListener()));

    Gdx.input.setInputProcessor(inputMultiplexer);

    addPathButton.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            // remove last point in set
            if (pointSet.size() > 1) {
                // valid to create a new path
                paths.push(new Path(pointSet, 5.0f));
                System.out.println("Added a path to paths Stack");
                pointSet = new ArrayList<Point>();
            } else {
                Dialog errorDialog = new Dialog("Error!", skin);
                errorDialog.text("Error! Must finish one path before starting another!");
                errorDialog.button("Ok");
                errorDialog.show(stage);
            }
        }
    });

    undoButton.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            // remove last point in set
            if (pointSet.size() > 0) {
                pointSet.remove(pointSet.size() - 1);
            } else {
                if (paths.size() > 0) {
                    Path path = paths.pop();
                    pointSet = (ArrayList<Point>) path.set.clone();
                    System.out.println("Popped from paths");
                }
            }
        }
    });

    exitButton.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            towerDefense.setScreen(new MapEditorSelectorScreen(towerDefense));
            dispose();
        }
    });

    finishButton.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {

            if (paths.size() == 0 && pointSet.size() < 2) {
                displayErrorMessage("Error! Each path must have at least an entrance and exit", skin);
                return;
            }

            // create settings for map
            int playerHealth = Integer.parseInt(initialPlayerHealthText.getText()),
                    playerResources = Integer.parseInt(initialPlayerResourcesText.getText()),
                    unitDamage = Integer.parseInt(initialUnitDamageText.getText());
            float unitHealth = Float.parseFloat(initialUnitHealthText.getText()),
                    unitSpeed = Float.parseFloat(initialUnitMovementSpeedText.getText()),
                    unitSpawnRate = Float.parseFloat(defaultUnitSpawnRateText.getText());

            // validation
            if (playerHealth <= 0.0f) {
                displayErrorMessage("Error! Player cannot start with 0.0 health", skin);
                return;
            } else if (unitHealth <= 0.0f) {
                displayErrorMessage("Error! Units cannot start with 0.0 health", skin);
                return;
            } else if (unitDamage <= 0.0f) {
                displayErrorMessage("Error! Units cannot start with 0.0 damage", skin);
                return;
            } else if (unitSpeed <= 0.0f) {
                displayErrorMessage("Error! Units cannot start with 0.0 speed", skin);
                return;
            } else if (unitSpawnRate <= 0.0f) {
                displayErrorMessage("Error! Spawn rate cannot be 0.0", skin);
                return;
            }

            ArrayList<BaseTurret.Type> disabledTypes = new ArrayList<BaseTurret.Type>();

            if (disableBasicTurretCheckbox.isChecked()) {
                disabledTypes.add(BaseTurret.Type.NORMAL);
            }
            if (disableBuffTurretCheckbox.isChecked()) {
                disabledTypes.add(BaseTurret.Type.BUFF);
            }
            if (disableChaingunTurretCheckbox.isChecked()) {
                disabledTypes.add(BaseTurret.Type.CHAINGUN);
            }
            if (disableHomingTurretCheckbox.isChecked()) {
                disabledTypes.add(BaseTurret.Type.HOMING);
            }
            if (disableRocketTurretCheckbox.isChecked()) {
                disabledTypes.add(BaseTurret.Type.ROCKET);
            }
            if (disableShotgunTurretCheckbox.isChecked()) {
                disabledTypes.add(BaseTurret.Type.SHOTGUN);
            }

            if (disabledTypes.size() == BaseTurret.Type.values().length) {
                displayErrorMessage("Error! Cannot disable all turrets", skin);
                return;
            }

            MapSettings mapSettings = new MapSettings();

            BaseTurret.Type[] disabledTypesArr = new BaseTurret.Type[disabledTypes.size()];
            disabledTypesArr = disabledTypes.toArray(disabledTypesArr);

            mapSettings.setDisabledTurretTypes(disabledTypesArr);

            String[] keys = { MapSettings.PLAYER_INITIAL_HEALTH_KEY, MapSettings.PLAYER_INITIAL_RESOURCES_KEY,
                    MapSettings.UNIT_INITIAL_DAMAGE_KEY, MapSettings.UNIT_INITIAL_HEALTH_KEY,
                    MapSettings.UNIT_INITIAL_SPEED_KEY, MapSettings.UNIT_SPAWN_RATE_KEY };

            float[] values = { playerHealth, playerResources, unitDamage, unitHealth, unitSpeed,
                    unitSpawnRate };

            mapSettings.putValues(keys, values);

            // make sure current pointSet is included in new map
            if (pointSet.size() > 1) {
                paths.push(new Path(pointSet, 5.0f));
            }

            // convert stack to array
            Path[] pathsForMap = new Path[paths.size()];
            int i = 0;
            while (!paths.empty()) {
                pathsForMap[i++] = paths.pop();
            }

            // finally create the map
            Map map = new Map(new Map.Dimensions(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()),
                    pathsForMap, nameField.getText(), mapSettings);

            towerDefense.maps.add(map);

            // return to main menu
            towerDefense.setScreen(new MapEditorSelectorScreen(towerDefense));
            dispose();
        }
    });

    displayOptionsButton.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            if (optionsTable.isVisible()) {
                optionsTable.setVisible(false);
                //                    disableTurretsTable.setVisible(false);
            } else {
                optionsTable.setVisible(true);
            }
        }
    });

    displayTurretsButton.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            if (disableTurretsTable.isVisible()) {
                disableTurretsTable.setVisible(false);
            } else {
                disableTurretsTable.setVisible(true);
            }
        }
    });

    pointSet = new ArrayList<Point>();
    paths = new Stack<Path>();

    batch = new SpriteBatch();
    shapeRenderer = new ShapeRenderer();
}

From source file:net.noviden.towerdefense.MapCreator.MapCreatorScreen.java

License:Open Source License

private void displayErrorMessage(String message, Skin skin) {
    Dialog errorDialog = new Dialog("Error!", skin);
    errorDialog.text(message);//from  w ww.j a  v a  2  s.com
    errorDialog.button("Ok");
    errorDialog.show(stage);
}

From source file:net.noviden.towerdefense.MapEditor.MapEditorScreen.java

License:Open Source License

public MapEditorScreen(final TowerDefense towerDefense, Map pMap) {
    _towerDefense = towerDefense;/*www .ja v  a  2 s  .  com*/
    _originalMapReference = pMap;
    _map = pMap.clone();

    _orthoCamera = new OrthographicCamera();
    _orthoCamera.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    _orthoCamera.update();

    _spriteBatch = new SpriteBatch();
    _shapeRenderer = new ShapeRenderer();
    _shapeRenderer.setAutoShapeType(true);

    // make use of map settings to have units travel slightly faster, for display niceties
    _mapSettings = new MapSettings();
    _mapSettings.putValue(MapSettings.UNIT_INITIAL_SPEED_KEY, 150.0f);

    // set units display to true initially
    _displayUnits = true;

    // instantiate/create unit managers for paths
    resetUnitManagers();

    // there must exist at least one path if we are EDITING an existing map
    _selectedPathIndex = 0;

    final Skin skin = new Skin(Gdx.files.internal("assets/uiskin.json"));

    stage = new Stage();

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

    Table pathAddDeleteTable = new Table();

    TextButton saveButton = new TextButton("Save", skin);
    TextButton exitButton = new TextButton("Exit Without Saving", skin);
    TextButton addPathButton = new TextButton("Add Path", skin);
    TextButton deletePathButton = new TextButton("Delete Current Path", skin);
    TextButton deleteLastNodeOnPathButton = new TextButton("Delete End Node", skin);
    TextButton displayOptionsButton = new TextButton("Options", skin);
    TextButton toggleUnitsDisplayButton = new TextButton("Toggle Units Display", skin);

    pathAddDeleteTable.add(deletePathButton);
    pathAddDeleteTable.add(addPathButton);
    pathAddDeleteTable.add(saveButton);
    pathAddDeleteTable.add(exitButton);
    pathAddDeleteTable.row();
    pathAddDeleteTable.add(deleteLastNodeOnPathButton).expandX().left();
    pathAddDeleteTable.add(displayOptionsButton);
    pathAddDeleteTable.add(toggleUnitsDisplayButton);

    Table pathSelectorTable = new Table();

    Texture leftArrowTexture = new Texture(Gdx.files.internal("leftArrow.png"));
    Image leftArrowImage = new Image(leftArrowTexture);
    Texture rightArrowTexture = new Texture(Gdx.files.internal("rightArrow.png"));
    Image rightArrowImage = new Image(rightArrowTexture);

    final Label selectedPathLabel = new Label("0", skin);

    pathSelectorTable.add(leftArrowImage).pad(8.0f);
    pathSelectorTable.add(selectedPathLabel).pad(8.0f);
    pathSelectorTable.add(rightArrowImage).pad(8.0f);

    // options table

    // set up options table
    final Table optionsTable = new Table();
    optionsTable.setVisible(false);

    MapSettings currentSettings = _map.getSettings();

    Label initialPlayerHealthLabel = new Label("Initial Player Health:", skin);
    final TextField initialPlayerHealthText = new TextField(
            "" + (int) currentSettings.getValue(MapSettings.PLAYER_INITIAL_HEALTH_KEY), skin);
    Label initialPlayerResourcesLabel = new Label("Initial Player Resources:", skin);
    final TextField initialPlayerResourcesText = new TextField(
            "" + (int) currentSettings.getValue(MapSettings.PLAYER_INITIAL_RESOURCES_KEY), skin);
    Label initialUnitHealthLabel = new Label("Initial Unit Health:", skin);
    final TextField initialUnitHealthText = new TextField(
            "" + currentSettings.getValue(MapSettings.UNIT_INITIAL_HEALTH_KEY), skin);
    Label initialUnitMovementSpeedLabel = new Label("Initial Unit Movement Speed:", skin);
    final TextField initialUnitMovementSpeedText = new TextField(
            "" + currentSettings.getValue(MapSettings.UNIT_INITIAL_SPEED_KEY), skin);
    Label initialUnitDamageLabel = new Label("Initial Unit Damage:", skin);
    final TextField initialUnitDamageText = new TextField(
            "" + (int) currentSettings.getValue(MapSettings.UNIT_INITIAL_DAMAGE_KEY), skin);
    Label defaultUnitSpawnRateLabel = new Label("Unit Spawn Rate:", skin);
    final TextField defaultUnitSpawnRateText = new TextField(
            "" + currentSettings.getValue(MapSettings.UNIT_SPAWN_RATE_KEY), skin);

    // TODO Implement this button
    TextButton displayWavesCreatorButton = new TextButton("Waves Creator", skin);
    TextButton displayTurretsButton = new TextButton("Disable Turrets", skin);

    optionsTable.add(initialPlayerHealthLabel, initialPlayerHealthText);
    optionsTable.row();
    optionsTable.add(initialPlayerResourcesLabel, initialPlayerResourcesText);
    optionsTable.row();
    optionsTable.add(initialUnitHealthLabel, initialUnitHealthText);
    optionsTable.row();
    optionsTable.add(initialUnitMovementSpeedLabel, initialUnitMovementSpeedText);
    optionsTable.row();
    optionsTable.add(initialUnitDamageLabel, initialUnitDamageText);
    optionsTable.row();
    optionsTable.add(defaultUnitSpawnRateLabel, defaultUnitSpawnRateText);
    optionsTable.row();
    optionsTable.add(displayTurretsButton);

    final Table disableTurretsTable = new Table();
    disableTurretsTable.setVisible(false);

    final CheckBox disableChaingunTurretCheckbox = new CheckBox("Disable Chaingun", skin);
    disableChaingunTurretCheckbox.setChecked(currentSettings.isTurretTypeDisabled(BaseTurret.Type.CHAINGUN));

    final CheckBox disableBasicTurretCheckbox = new CheckBox("Disable Basic", skin);
    disableBasicTurretCheckbox.setChecked(currentSettings.isTurretTypeDisabled(BaseTurret.Type.NORMAL));

    final CheckBox disableBuffTurretCheckbox = new CheckBox("Disable Buff", skin);
    disableBuffTurretCheckbox.setChecked(currentSettings.isTurretTypeDisabled(BaseTurret.Type.BUFF));

    final CheckBox disableHomingTurretCheckbox = new CheckBox("Disable Homing", skin);
    disableHomingTurretCheckbox.setChecked(currentSettings.isTurretTypeDisabled(BaseTurret.Type.HOMING));

    final CheckBox disableRocketTurretCheckbox = new CheckBox("Disable Rocket", skin);
    disableRocketTurretCheckbox.setChecked(currentSettings.isTurretTypeDisabled(BaseTurret.Type.ROCKET));

    final CheckBox disableShotgunTurretCheckbox = new CheckBox("Disable Shotgun", skin);
    disableShotgunTurretCheckbox.setChecked(currentSettings.isTurretTypeDisabled(BaseTurret.Type.SHOTGUN));

    disableTurretsTable.add(disableChaingunTurretCheckbox);
    disableTurretsTable.row();
    disableTurretsTable.add(disableBasicTurretCheckbox);
    disableTurretsTable.row();
    disableTurretsTable.add(disableBuffTurretCheckbox);
    disableTurretsTable.row();
    disableTurretsTable.add(disableHomingTurretCheckbox);
    disableTurretsTable.row();
    disableTurretsTable.add(disableRocketTurretCheckbox);
    disableTurretsTable.row();
    disableTurretsTable.add(disableShotgunTurretCheckbox);

    // transformations table
    TextButton displayTransformationsTableButton = new TextButton("Enable Transformations", skin);

    CheckBox enableRandomTransformationCheckbox = new CheckBox("Random", skin);
    CheckBox enableTurretTransformationCheckbox = new CheckBox("Turret", skin);
    CheckBox enableUnitTransformationCheckbox = new CheckBox("Unit", skin);

    final Table transformationsTable = new Table();
    transformationsTable.setVisible(false);

    transformationsTable.add(enableRandomTransformationCheckbox).row();
    transformationsTable.add(enableTurretTransformationCheckbox).row();
    transformationsTable.add(enableUnitTransformationCheckbox).row();

    optionsTable.row();
    optionsTable.add(disableTurretsTable);
    optionsTable.row();
    optionsTable.add(displayTransformationsTableButton);
    optionsTable.row();
    optionsTable.add(transformationsTable);

    // finally, add tables to root table and set input processing

    rootTable.add(pathSelectorTable).expandX().left().expandY().top();

    rootTable.add(pathAddDeleteTable).expandX().right().expandY().top();

    rootTable.row();

    rootTable.add(optionsTable).expandX().right().expandY().top();

    stage.addActor(rootTable);

    inputMultiplexer = new InputMultiplexer(stage, new GestureDetector(new MyGestureListener()));

    Gdx.input.setInputProcessor(inputMultiplexer);

    // listeners
    saveButton.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            int index = _towerDefense.maps.indexOf(_originalMapReference);
            String message = "";

            int playerHealth = Integer.parseInt(initialPlayerHealthText.getText()),
                    playerResources = Integer.parseInt(initialPlayerResourcesText.getText()),
                    unitDamage = Integer.parseInt(initialUnitDamageText.getText());
            float unitHealth = Float.parseFloat(initialUnitHealthText.getText()),
                    unitSpeed = Float.parseFloat(initialUnitMovementSpeedText.getText()),
                    unitSpawnRate = Float.parseFloat(defaultUnitSpawnRateText.getText());

            // validation
            if (playerHealth <= 0.0f) {
                displayErrorMessage("Error! Player cannot start with 0.0 health", skin);
                return;
            } else if (unitHealth <= 0.0f) {
                displayErrorMessage("Error! Units cannot start with 0.0 health", skin);
                return;
            } else if (unitDamage <= 0.0f) {
                displayErrorMessage("Error! Units cannot start with 0.0 damage", skin);
                return;
            } else if (unitSpeed <= 0.0f) {
                displayErrorMessage("Error! Units cannot start with 0.0 speed", skin);
                return;
            } else if (unitSpawnRate <= 0.0f) {
                displayErrorMessage("Error! Spawn rate cannot be 0.0", skin);
                return;
            }

            ArrayList<BaseTurret.Type> disabledTypes = new ArrayList<BaseTurret.Type>();

            if (disableBasicTurretCheckbox.isChecked()) {
                disabledTypes.add(BaseTurret.Type.NORMAL);
            }
            if (disableBuffTurretCheckbox.isChecked()) {
                disabledTypes.add(BaseTurret.Type.BUFF);
            }
            if (disableChaingunTurretCheckbox.isChecked()) {
                disabledTypes.add(BaseTurret.Type.CHAINGUN);
            }
            if (disableHomingTurretCheckbox.isChecked()) {
                disabledTypes.add(BaseTurret.Type.HOMING);
            }
            if (disableRocketTurretCheckbox.isChecked()) {
                disabledTypes.add(BaseTurret.Type.ROCKET);
            }
            if (disableShotgunTurretCheckbox.isChecked()) {
                disabledTypes.add(BaseTurret.Type.SHOTGUN);
            }

            if (disabledTypes.size() == BaseTurret.Type.values().length) {
                displayErrorMessage("Error! Cannot disable all turrets", skin);
                return;
            }

            MapSettings mapSettings = new MapSettings();

            BaseTurret.Type[] disabledTypesArr = new BaseTurret.Type[disabledTypes.size()];
            disabledTypesArr = disabledTypes.toArray(disabledTypesArr);

            mapSettings.setDisabledTurretTypes(disabledTypesArr);

            String[] keys = { MapSettings.PLAYER_INITIAL_HEALTH_KEY, MapSettings.PLAYER_INITIAL_RESOURCES_KEY,
                    MapSettings.UNIT_INITIAL_DAMAGE_KEY, MapSettings.UNIT_INITIAL_HEALTH_KEY,
                    MapSettings.UNIT_INITIAL_SPEED_KEY, MapSettings.UNIT_SPAWN_RATE_KEY };

            float[] values = { playerHealth, playerResources, unitDamage, unitHealth, unitSpeed,
                    unitSpawnRate };

            mapSettings.putValues(keys, values);

            // save settings to map
            _map.setSettings(mapSettings);

            // finally, save map
            if (index >= 0) {
                _towerDefense.maps.set(index, _map);
                message = "Saved over old map.";
            } else {
                _towerDefense.maps.add(_map);
                message = "Something weird happened, saved new copy of map.";
            }

            _originalMapReference = _map;
            _map = _map.clone();

            Dialog saveSucceeded = new Dialog("Success!", skin);
            saveSucceeded.text(message);
            saveSucceeded.button("Continue");
            saveSucceeded.show(stage);
        }
    });

    exitButton.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            _towerDefense.setScreen(new MapEditorSelectorScreen(_towerDefense));
            dispose();
        }
    });

    addPathButton.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            Path[] paths = _map.getPaths();

            // make a copy of old paths array, and add a new path to the end
            Path[] updatedPaths = new Path[paths.length + 1];

            for (int i = 0; i < paths.length; i++) {
                updatedPaths[i] = paths[i];
            }

            updatedPaths[updatedPaths.length - 1] = new Path(new ArrayList<Point>(), 5.0f); // TODO remove magic number

            _map.setPaths(updatedPaths);

            _selectedPathIndex = updatedPaths.length - 1;
            resetUnitManagers();

            selectedPathLabel.setText("" + _selectedPathIndex);
        }
    });

    deletePathButton.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            Path[] paths = _map.getPaths();

            if (paths.length < 1) {
                return;
            }

            // make a new array and set it to the map
            Path[] updatedPaths = new Path[paths.length - 1];
            int offset = 0;

            for (int i = 0; i < paths.length; i++) {
                if (i == _selectedPathIndex) {
                    offset = -1;

                    continue;
                }

                updatedPaths[i + offset] = paths[i];
            }

            _map.setPaths(updatedPaths);
            resetUnitManagers();
            if (_selectedPathIndex > 0) {
                _selectedPathIndex--;
            }

            selectedPathLabel.setText("" + _selectedPathIndex);
        }
    });

    deleteLastNodeOnPathButton.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            Path[] paths = _map.getGenericPaths();

            if (_selectedPathIndex >= paths.length) {
                return;
            }

            Path selectedPath = paths[_selectedPathIndex];
            if (selectedPath.set.size() > 0) {
                selectedPath.set.remove(selectedPath.set.size() - 1);

                resetUnitManagers();
            }
        }
    });

    leftArrowImage.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            if (_selectedPathIndex > 0) {
                _selectedPathIndex--;
                selectedPathLabel.setText("" + _selectedPathIndex);
            }
        }
    });

    rightArrowImage.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            if (_selectedPathIndex < (_map.getPaths().length - 1)) {
                _selectedPathIndex++;
                selectedPathLabel.setText("" + _selectedPathIndex);
            }
        }
    });

    displayOptionsButton.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            optionsTable.setVisible(!optionsTable.isVisible());
        }
    });

    displayTurretsButton.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            disableTurretsTable.setVisible(!disableTurretsTable.isVisible());
        }
    });

    displayTransformationsTableButton.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            transformationsTable.setVisible(!transformationsTable.isVisible());
        }
    });

    toggleUnitsDisplayButton.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            _displayUnits = !_displayUnits;
        }
    });
}