Example usage for com.badlogic.gdx.scenes.scene2d.ui Slider Slider

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

Introduction

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

Prototype

public Slider(float min, float max, float stepSize, boolean vertical, SliderStyle style) 

Source Link

Document

Creates a new slider.

Usage

From source file:Options.java

License:Apache License

public Options() {
    Sink.setBackground("title");
    Sink.transitionDownToUp();//from  w  w  w.  j  a  va2s  . c  om
    grid = new Table();
    grid.setSize(Sink.targetWidth, Sink.targetHeight);
    grid.setFillParent(true);
    grid.setPosition(0, 0);
    grid.top().left();
    grid.center();
    float yoffset = Sink.targetHeight - 80;
    float xcenter = Sink.targetWidth / 2;

    /*   ________________________
     * |_______Options__________|
     * |        |            |
     * |        |            |
     * |        |            |
     * |__________|_____________|
     * |_________Back___________|
    */
    TextButton title = new TextButton("Options", Asset.skin);
    title.setSize(200, 75);
    TextButton back = new TextButton("Back", Asset.skin);
    back.setSize(200, 75);
    back.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            super.clicked(event, x, y);
            Sink.setScene("Menu");
        }
    });

    CheckBox soundbtn = new CheckBox("  Sound ", Asset.skin);
    soundbtn.setChecked(Config.isSound);

    CheckBox musicbtn = new CheckBox("  Music ", Asset.skin);
    musicbtn.setChecked(Config.isMusic);

    CheckBox battbtn = new CheckBox("  Battle ", Asset.skin);
    battbtn.setChecked(Config.isBattleEnabled());

    CheckBox semibtn = new CheckBox(" Semi-Auto ", Asset.skin);
    semibtn.setChecked(Config.isSemiAutomatic());

    CheckBox panbtn = new CheckBox("  PanScroll ", Asset.skin);
    panbtn.setChecked(Config.usePan);

    CheckBox dragbtn = new CheckBox("  DragScroll ", Asset.skin);
    dragbtn.setChecked(Config.useDrag);

    CheckBox keybtn = new CheckBox("  UseKeyboard ", Asset.skin);
    keybtn.setChecked(Config.useKeyboard);

    Slider musicSlider = new Slider(0f, 1f, 0.1f, false, Asset.skin);
    Slider soundSlider = new Slider(0f, 1f, 0.1f, false, Asset.skin);

    Sink.addActor(title, xcenter - title.getWidth() + 30, yoffset);
    Sink.addActor(musicbtn, xcenter - musicbtn.getWidth(), yoffset - 60);
    Sink.addActor(musicSlider, xcenter + 30, yoffset - 60);
    Sink.addActor(soundbtn, xcenter - soundbtn.getWidth(), yoffset - 90);
    Sink.addActor(soundSlider, xcenter + 30, yoffset - 90);

    Sink.addActor(battbtn, xcenter - battbtn.getWidth(), yoffset - 120);
    Sink.addActor(panbtn, xcenter + 30, yoffset - 120);

    Sink.addActor(semibtn, xcenter - semibtn.getWidth(), yoffset - 150);
    Sink.addActor(dragbtn, xcenter + 30, yoffset - 150);
    Sink.addActor(dragbtn, xcenter + 30, yoffset - 180);

    Sink.addActor(back, xcenter - back.getWidth() + 30, 20);
}

From source file:awakening.view.menu.Audio.java

License:Apache License

/**
 * Constructor//from   w w w  .j  a  v a 2  s.c  o  m
 * 
 * @param game Tower Awakening's Game
 * @param sound Main menu's music
 * @param effect Button's effect
 */
public Audio(TAGame game, Music sound, Sound effect) {
    this.game = game;
    this.sound = sound;
    this.effect = effect;
    stage = new Stage();

    try {
        if (game.getLanguage().equals("ENGLISH")) {
            language = ResourceBundle.getBundle("awakening.view.menu.res_en_EN", locales[0]);
        } else if (game.getLanguage().equals("FRENCH")) {
            language = ResourceBundle.getBundle("awakening.view.menu.res_fr_FR", locales[1]);
        } else if (game.getLanguage().equals("ITALIAN")) {
            language = ResourceBundle.getBundle("awakening.view.menu.res_it_IT", locales[2]);
        } else {
            language = ResourceBundle.getBundle("awakening.view.menu.res", locales[0]);
        }
    } catch (java.util.MissingResourceException e) {
        System.out.println("yolo");
    }

    ///Viewport
    camera = new OrthographicCamera();
    view = new StretchViewport(Gdx.app.getGraphics().getWidth(), Gdx.app.getGraphics().getWidth(), camera);

    ///Background
    background = new Texture(Gdx.files.internal("img/menu/Background-2.png"));
    batch = new SpriteBatch();

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

    ///Title
    title = new Label(language.getString("button_audio"), skin);

    ///Widgets Background
    widgetsBackground = new Image(new Texture(Gdx.files.internal("img/widget/bg widgets.png")));

    ///Back Button
    btnBack = new TextButton(language.getString("button_back"), skin);

    ///Music Slider
    sliderMusic = new Slider(0, 10, 1, false, skin);

    ///Music Label
    musicLabel = new Label(language.getString("label_music_volume"), skin);

    ///Sound Slider
    sliderEffects = new Slider(0, 10, 1, false, skin);

    ///Sound Label
    soundLabel = new Label(language.getString("label_effect_volume"), skin);
}

From source file:ca.hiphiparray.amazingmaze.SettingsScreen.java

License:Open Source License

/**
 * Create a new SettingsScreen.//from ww w  .  j  ava2s .  co m
 *
 * @param game Instance of AmazingMazeGame to be used
 */
public SettingsScreen(final AmazingMazeGame game) {
    this.game = game;
    this.sourceScreen = game.menuScreen;
    settings = new Stage(new ScreenViewport(), this.game.batch);
    multiplexer = new InputMultiplexer();
    multiplexer.addProcessor(settings);
    multiplexer.addProcessor(this);
    table = new Table();
    table.top();
    table.setFillParent(true);
    controlsTable = new Table();

    settings.addActor(table);

    Skin skin = game.assets.skin;

    screenHeader = new Label("Settings", game.assets.skin, Assets.SANS_HEADER_STYLE);

    musicSlider = new Slider(0, 1, 0.1f, false, game.assets.skin);
    musicSlider.setValue(game.save.getMusicLevel());
    musicSlider.setAnimateDuration(0.25f);

    musicSlider.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            game.music.setVolume(musicSlider.getValue());
            game.save.setMusicLevel(game.music.getVolume());
        }
    });
    musicSliderLabel = new Label("Music Volume", game.assets.skin);

    controlsHeader = new Label("Controls", game.assets.skin);

    actions = new Label[] { new Label("Up", game.assets.skin), new Label("Down", game.assets.skin),
            new Label("Left", game.assets.skin), new Label("Right", game.assets.skin),
            new Label("Pause", game.assets.skin) };

    actionControls = new TextButton[] { new TextButton(Keys.toString(game.save.getUpButton()), skin),
            new TextButton(Keys.toString(game.save.getDownButton()), skin),
            new TextButton(Keys.toString(game.save.getLeftButton()), skin),
            new TextButton(Keys.toString(game.save.getRightButton()), skin),
            new TextButton(Keys.toString(game.save.getPauseButton()), skin) };

    actionControls[0].addListener(new ChangeListener() {

        @Override
        public void changed(ChangeEvent event, Actor actor) {
            if (actionControls[0].isPressed()) {
                updateControls(0);
            }
        }

    });

    actionControls[1].addListener(new ChangeListener() {

        @Override
        public void changed(ChangeEvent event, Actor actor) {
            if (actionControls[1].isPressed()) {
                updateControls(1);
            }
        }

    });

    actionControls[2].addListener(new ChangeListener() {

        @Override
        public void changed(ChangeEvent event, Actor actor) {
            if (actionControls[2].isPressed()) {
                updateControls(2);
            }
        }

    });

    actionControls[3].addListener(new ChangeListener() {

        @Override
        public void changed(ChangeEvent event, Actor actor) {
            if (actionControls[3].isPressed()) {
                updateControls(3);
            }
        }

    });

    actionControls[4].addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            if (actionControls[4].isPressed()) {
                updateControls(4);
            }
        }
    });

    // Reset settings button
    resetSettingsButton = new TextButton("Reset Settings", skin);
    resetSettingsButton.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            if (resetSettingsButton.isPressed()) {
                game.save.resetSettings();
                musicSlider.setValue(game.save.getMusicLevel());
                resetActionControlsLabels();
            }
        }
    });

    // Reset save button.
    resetSaveButton = new TextButton("Reset Save", skin);
    resetSaveButton.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            if (resetSaveButton.isPressed()) {
                game.save.resetSave();
            }
        }
    });

    backButton = new TextButton("Back", skin);

}

From source file:com.badlogic.gdx.ai.tests.BehaviorTreeViewer.java

License:Apache License

@Override
public void create() {
    step = 0;//from  w w w. j ava  2s  . c  o m
    taskNodes = new ObjectMap<Task<Dog>, TaskNode>();
    BehaviorTreeParser<Dog> parser = new BehaviorTreeParser<Dog>(BehaviorTreeParser.DEBUG_NONE);
    BehaviorTree<Dog> tree = parser.parse(Gdx.files.internal("data/dog.tree"), null);
    dog = new Dog("Dog 1", tree);
    tree.addListener(new BehaviorTree.Listener<Dog>() {
        @Override
        public void statusUpdated(Task<Dog> task, Task.Status previousStatus) {
            TaskNode tn = taskNodes.get(task);
            tn.updateStatus(previousStatus, step);
        }

        @Override
        public void childAdded(Task<Dog> task, int index) {
            TaskNode parentNode = taskNodes.get(task);
            Task<Dog> child = task.getChild(index);
            addToTree(displayTree, parentNode, child, null, 0);
            displayTree.expandAll();
        }
    });
    KryoUtils.initKryo();
    skin = new Skin(Gdx.files.internal("data/uiskin.json"));

    treeStatus = SUSPENDED;

    runDelaySlider = new Slider(0, 5, 0.01f, false, skin);
    runDelaySlider.setValue(.5f);

    runButton = new TextButton("Run", skin);

    stepButton = new TextButton("Step", skin);

    loadButton = new TextButton("Load", skin);
    loadButton.setDisabled(true);

    saveButton = new TextButton("Save", skin);

    stepLabel = new Label(new StringBuilder(LABEL_STEP + step), skin);

    stage = new Stage(new ScreenViewport());

    Table table = new Table();
    table.row().height(20).fillX();
    table.add(runDelaySlider);
    table.add(runButton);
    table.add(stepButton);
    table.add(saveButton);
    table.add(loadButton);
    table.add(stepLabel);
    table.row();
    displayTree = new Tree(skin);

    redrawTree();

    table.add(displayTree).colspan(3).fillX().fillY().expand(true, true);

    stage.addActor(table);
    table.setFillParent(true);

    saveButton.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            save();
            saved = true;
            loadButton.setDisabled(false);
        }
    });

    loadButton.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            load();
        }
    });

    stepButton.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            treeStatus = STEP; // step();
        }
    });

    runButton.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            if (treeStatus == SUSPENDED) {
                treeStatus = RUNNING;
                delay = runDelaySlider.getValue(); // this makes it start immediately
                runButton.setText("Suspend");
                stepButton.setDisabled(true);
                saveButton.setDisabled(true);
                loadButton.setDisabled(true);
            } else {
                treeStatus = SUSPENDED;
                runButton.setText("Run");
                stepButton.setDisabled(false);
                saveButton.setDisabled(false);
                loadButton.setDisabled(!saved);
            }
        }
    });

    Gdx.input.setInputProcessor(stage);

    setScreen(this);
}

From source file:com.badlogic.gdx.ai.tests.btree.BehaviorTreeViewer.java

License:Apache License

public BehaviorTreeViewer(BehaviorTree<E> tree, boolean loadAndSave, Skin skin) {
    super(skin);/*w w w  . j a  v a 2s .  co  m*/
    this.tree = tree;
    step = 0;
    taskNodes = new ObjectMap<Task<E>, TaskNode>();
    tree.addListener(new BehaviorTree.Listener<E>() {
        @Override
        public void statusUpdated(Task<E> task, Task.Status previousStatus) {
            TaskNode tn = taskNodes.get(task);
            if (tn != null)
                tn.updateStatus(previousStatus, step);
        }

        @Override
        public void childAdded(Task<E> task, int index) {
            TaskNode parentNode = taskNodes.get(task);
            Task<E> child = task.getChild(index);
            addToTree(displayTree, parentNode, child, null, 0);
            displayTree.expandAll();
        }
    });

    treeStatus = BT_SUSPENDED;

    runDelaySlider = new Slider(0, 5, 0.01f, false, skin);
    runDelaySlider.setValue(.5f);

    runButton = new TextButton("Run", skin);
    runButton.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            if (treeStatus == BT_SUSPENDED) {
                treeStatus = BT_RUNNING;
                runDelayAccumulator = runDelaySlider.getValue(); // this makes it start immediately
                runButton.setText("Suspend");
                stepButton.setDisabled(true);
                if (saveButton != null)
                    saveButton.setDisabled(true);
                if (loadButton != null)
                    loadButton.setDisabled(true);
            } else {
                treeStatus = BT_SUSPENDED;
                runButton.setText("Run");
                stepButton.setDisabled(false);
                if (saveButton != null)
                    saveButton.setDisabled(false);
                if (loadButton != null)
                    loadButton.setDisabled(!saved);
            }
        }
    });

    stepButton = new TextButton("Step", skin);
    stepButton.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            treeStatus = BT_STEP;
        }
    });

    resetButton = new TextButton("Reset", skin);
    resetButton.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            BehaviorTreeViewer.this.tree.reset();
            rebuildDisplayTree();
        }
    });

    if (loadAndSave) {
        loadButton = new TextButton("Load", skin);
        loadButton.setDisabled(true);
        loadButton.addListener(new ChangeListener() {
            @Override
            public void changed(ChangeEvent event, Actor actor) {
                load();
            }
        });

        saveButton = new TextButton("Save", skin);
        saveButton.addListener(new ChangeListener() {
            @Override
            public void changed(ChangeEvent event, Actor actor) {
                save();
                saved = true;
                loadButton.setDisabled(false);
            }
        });
    }

    stepLabel = new Label(new StringBuilder(LABEL_STEP + step), skin);

    this.row().height(26).fillX();
    this.add(runDelaySlider);
    this.add(runButton);
    this.add(stepButton);
    this.add(resetButton);
    if (loadAndSave) {
        this.add(saveButton);
        this.add(loadButton);
    }
    this.add(stepLabel);
    this.row();
    displayTree = new Tree(skin);

    rebuildDisplayTree();

    this.add(displayTree).colspan(5 + (loadAndSave ? 2 : 0)).grow();
}

From source file:com.badlogic.gdx.ai.tests.steer.SteeringTestBase.java

License:Apache License

protected void addMaxLinearAccelerationController(Table table, final Limiter limiter, float minValue,
        float maxValue, float step) {
    final Label labelMaxLinAcc = new Label("Max.Linear Acc.[" + limiter.getMaxLinearAcceleration() + "]",
            container.skin);/*ww  w . j a  v a  2s .  c  o m*/
    table.add(labelMaxLinAcc);
    table.row();
    Slider maxLinAcc = new Slider(minValue, maxValue, step, false, container.skin);
    maxLinAcc.setValue(limiter.getMaxLinearAcceleration());
    maxLinAcc.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            Slider slider = (Slider) actor;
            limiter.setMaxLinearAcceleration(slider.getValue());
            labelMaxLinAcc.setText("Max.Linear Acc.[" + limiter.getMaxLinearAcceleration() + "]");
        }
    });
    table.add(maxLinAcc);
}

From source file:com.badlogic.gdx.ai.tests.steer.SteeringTestBase.java

License:Apache License

protected void addMaxLinearSpeedController(Table table, final Limiter limiter, float minValue, float maxValue,
        float step) {
    final Label labelMaxSpeed = new Label("Max.Lin.Speed [" + limiter.getMaxLinearSpeed() + "]",
            container.skin);/*from ww w.  j  av  a  2s.  co m*/
    table.add(labelMaxSpeed);
    table.row();
    Slider maxSpeed = new Slider(minValue, maxValue, step, false, container.skin);
    maxSpeed.setValue(limiter.getMaxLinearSpeed());
    maxSpeed.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            Slider slider = (Slider) actor;
            limiter.setMaxLinearSpeed(slider.getValue());
            labelMaxSpeed.setText("Max.Lin.Speed [" + limiter.getMaxLinearSpeed() + "]");
        }
    });
    table.add(maxSpeed);
}

From source file:com.badlogic.gdx.ai.tests.steer.SteeringTestBase.java

License:Apache License

protected void addMaxAngularAccelerationController(Table table, final Limiter limiter, float minValue,
        float maxValue, float step) {
    final Label labelMaxAngAcc = new Label("Max.Ang.Acc.[" + limiter.getMaxAngularAcceleration() + "]",
            container.skin);//from ww  w .  j  ava2 s  .c  om
    table.add(labelMaxAngAcc);
    table.row();
    Slider maxAngAcc = new Slider(minValue, maxValue, step, false, container.skin);
    maxAngAcc.setValue(limiter.getMaxAngularAcceleration());
    maxAngAcc.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            Slider slider = (Slider) actor;
            limiter.setMaxAngularAcceleration(slider.getValue());
            labelMaxAngAcc.setText("Max.Ang.Acc.[" + limiter.getMaxAngularAcceleration() + "]");
        }
    });
    table.add(maxAngAcc);
}

From source file:com.badlogic.gdx.ai.tests.steer.SteeringTestBase.java

License:Apache License

protected void addMaxAngularSpeedController(Table table, final Limiter limiter, float minValue, float maxValue,
        float step) {
    final Label labelMaxAngSpeed = new Label("Max.Ang.Speed [" + limiter.getMaxAngularSpeed() + "]",
            container.skin);/*from w  w w . j a v a 2 s  .c  om*/
    table.add(labelMaxAngSpeed);
    table.row();
    Slider maxAngSpeed = new Slider(minValue, maxValue, step, false, container.skin);
    maxAngSpeed.setValue(limiter.getMaxAngularSpeed());
    maxAngSpeed.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            Slider slider = (Slider) actor;
            limiter.setMaxAngularSpeed(slider.getValue());
            labelMaxAngSpeed.setText("Max.Ang.Speed [" + limiter.getMaxAngularSpeed() + "]");
        }
    });
    table.add(maxAngSpeed);
}

From source file:com.badlogic.gdx.spriter.demo.SpriterDemoApp.java

@Override
public void create() {
    // Initialize object
    batch = new SpriteBatch();
    camera = new OrthographicCamera();

    FileHandleResolver resolver = new InternalFileHandleResolver();
    assetManager = new AssetManager(resolver);
    assetManager.setLoader(SpriterData.class, new SpriterDataLoader(resolver));

    resolver = new AbsoluteFileHandleResolver();
    externalAssetManager = new AssetManager(resolver);
    externalAssetManager.setLoader(SpriterData.class, new SpriterDataLoader(resolver));

    assetManager.load("uiskin.json", Skin.class);
    assetManager.finishLoading();/*  www.j  a  v  a  2s . c  o  m*/

    skin = assetManager.get("uiskin.json");

    // Create widgets
    stage = new Stage(new ScreenViewport(camera), batch);

    Label titleLabel = new Label("gdx-spriter", skin);
    titleLabel.setFontScale(3f);

    Label fpsLabel = new Label("FPS", skin) {
        @Override
        public void act(float delta) {
            this.setText(Gdx.graphics.getFramesPerSecond() + " FPS");
            super.act(delta);
        }
    };

    fileChooser = new SelectBox<SpriterDemoFileHandle>(skin);
    fileChooser.setName("Files");
    fileChooser.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            changeSpriterFile(fileChooser.getSelected());
            lastUsedSelectBox = fileChooser;
        }
    });

    Button fileFinder = new TextButton("Browse", skin);
    fileFinder.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            FileDialog fileDialog = new FileDialog((java.awt.Frame) null, "Choose Spriter file",
                    FileDialog.LOAD);
            fileDialog.setDirectory(lastFolderBrowsed);
            fileDialog.setResizable(true);
            fileDialog.setVisible(true);
            String file = fileDialog.getFile();
            String directory = fileDialog.getDirectory();
            if (directory != null) {
                lastFolderBrowsed = directory;
            }
            if (file != null) {
                String path = directory + file;
                addFile(Gdx.files.absolute(path), externalAssetManager);
                fileChooser.setItems(files);
                fileChooser.setSelectedIndex(fileChooser.getItems().size - 1);
            }
        }
    });

    entityChooser = new SelectBox<SpriterAnimator>(skin);
    entityChooser.setName("Entities");
    entityChooser.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            changeAnimator(entityChooser.getSelected());
            lastUsedSelectBox = entityChooser;
        }
    });

    animationChooser = new SelectBox<String>(skin);
    animationChooser.setName("Animations");
    animationChooser.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            changeAnimation(animationChooser.getSelected());
            lastUsedSelectBox = animationChooser;
        }
    });

    final CheckBox transitionCheckbox = new CheckBox("Transition", skin);
    transitionCheckbox.setChecked(transition);
    transitionCheckbox.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            transition = transitionCheckbox.isChecked();
        }
    });

    charmapChooser = new List<SpriterCharacterMap>(skin);
    ArraySelection<SpriterCharacterMap> selection = charmapChooser.getSelection();
    selection.setMultiple(true);
    selection.setRangeSelect(false);
    selection.setToggle(false);
    selection.setRequired(false);
    charmapChooser.setName("Charmaps");
    charmapChooser.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            changeCharacterMaps(charmapChooser.getSelection().items().orderedItems());
        }
    });

    angleSlider = new SpriterDemoAnimatorSlider(0, 360, 1f, skin, "%.0f") {
        @Override
        public void setValue(SpriterAnimator animator, float value) {
            spriterAnimator.setRotation(value);
        }

        @Override
        protected float getValue(SpriterAnimator animator) {
            return spriterAnimator.getRotation();
        }
    };

    pivotXSlider = new SpriterDemoAnimatorSlider(-1000f, 1000f, 1f, skin, "%.0f") {
        @Override
        public void setValue(SpriterAnimator animator, float value) {
            animator.setPivotX(value);
        }

        @Override
        protected float getValue(SpriterAnimator animator) {
            return animator.getPivotX();
        }
    };

    pivotYSlider = new SpriterDemoAnimatorSlider(-1000f, 1000f, 1f, skin, "%.0f") {
        @Override
        public void setValue(SpriterAnimator animator, float value) {
            animator.setPivotY(value);
        }

        @Override
        protected float getValue(SpriterAnimator animator) {
            return animator.getPivotY();
        }
    };

    scaleXSlider = new SpriterDemoAnimatorSlider(-10f, 10f, 0.1f, skin) {
        @Override
        public void setValue(SpriterAnimator animator, float value) {
            spriterAnimator.setScaleX(value);
        }

        @Override
        protected float getValue(SpriterAnimator animator) {
            return spriterAnimator.getScaleX();
        }
    };

    scaleYSlider = new SpriterDemoAnimatorSlider(-10f, 10f, 0.1f, skin) {
        @Override
        public void setValue(SpriterAnimator animator, float value) {
            spriterAnimator.setScaleY(value);
        }

        @Override
        protected float getValue(SpriterAnimator animator) {
            return spriterAnimator.getScaleY();
        }
    };

    alphaSlider = new SpriterDemoAnimatorSlider(0f, 1f, 0.01f, skin, "%.2f") {
        @Override
        public void setValue(SpriterAnimator animator, float value) {
            animator.setAlpha(value);
        }

        @Override
        protected float getValue(SpriterAnimator animator) {
            return animator.getAlpha();
        }
    };

    speedSlider = new SpriterDemoAnimatorSlider(0f, 10f, 0.1f, skin) {
        @Override
        public void setValue(SpriterAnimator animator, float value) {
            animator.setSpeed(value);
        }

        @Override
        protected float getValue(SpriterAnimator animator) {
            return animator.getSpeed();
        }
    };

    allAnimatorSliders = new SpriterDemoAnimatorSlider[] { scaleXSlider, scaleYSlider, pivotXSlider,
            pivotYSlider, angleSlider, alphaSlider, speedSlider };

    metaLabel = new Label("Meta: ", skin);
    metaLabel.setWrap(true);
    metaLabel.setAlignment(Align.topLeft);

    spriterPlaceholder = new Label("No animator", skin);
    spriterPlaceholder.setAlignment(Align.center);

    spriterAnimator = new SpriterAnimatorActor(animator);
    spriterAnimator.debug();

    playPauseButton = new ImageButton(skin, "play");
    playPauseButton.setChecked(true);
    playPauseButton.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            boolean playing = playPauseButton.isChecked();
            spriterAnimator.setDisabled(!playing);
        }
    });

    timeSlider = new Slider(0f, 2000f, 1, false, skin);
    timeSlider.addListener(timeSliderListener = new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            if (animator == null)
                return;
            animator.setTime(timeSlider.getValue());
            animator.update(0f);
        }
    });

    timeLabel = new Label("---", skin);

    // Put everything in place

    Table titleTable = new Table(skin);
    titleTable.add(titleLabel).pad(6f);
    titleTable.add().expandX();
    titleTable.add(fpsLabel).padRight(10f);

    Table selectionTable = new Table(skin);
    selectionTable.defaults().pad(3f);

    Table filesTable = new Table(skin);
    filesTable.row();
    filesTable.add(fileChooser).expand().fillX();
    filesTable.add(fileFinder).padLeft(2f).padRight(1f);

    Table animationsTable = new Table(skin);
    animationsTable.row();
    animationsTable.add(animationChooser).expand().fill();
    animationsTable.add(transitionCheckbox).fillX().padLeft(2f);

    ScrollPane scrollableCharmapChooser = new ScrollPane(charmapChooser);

    Table menuTable = new Table(skin);
    menuTable.defaults().pad(3f).expandX().fillX();
    menuTable.row();
    menuTable.add(titleTable).colspan(2);
    menuTable.row();
    menuTable.add("File");
    menuTable.add(filesTable).pad(4f);
    menuTable.row();
    menuTable.add("Entity");
    menuTable.add(entityChooser).pad(4f);
    menuTable.row();
    menuTable.add("Animation");
    menuTable.add(animationsTable).pad(4f);
    menuTable.row();
    menuTable.add("Maps");
    menuTable.add(scrollableCharmapChooser).pad(4f);
    menuTable.row();
    menuTable.add("Angle");
    menuTable.add(angleSlider);
    menuTable.row();
    menuTable.add("Pivot X");
    menuTable.add(pivotXSlider);
    menuTable.row();
    menuTable.add("Pivot Y");
    menuTable.add(pivotYSlider);
    menuTable.row();
    menuTable.add("Scale X");
    menuTable.add(scaleXSlider);
    menuTable.row();
    menuTable.add("Scale Y");
    menuTable.add(scaleYSlider);
    menuTable.row();
    menuTable.add("Alpha");
    menuTable.add(alphaSlider);
    menuTable.row();
    menuTable.add("Speed");
    menuTable.add(speedSlider);
    menuTable.row();
    menuTable.add().expandY();

    Table contentTable = new Table(skin);
    contentTable.row();
    contentTable.add(metaLabel).left().expandX().maxHeight(1f);
    contentTable.row();
    contentTable.stack(spriterPlaceholder, spriterAnimator).expand();

    Table timelineTable = new Table(skin);
    timelineTable.row();
    timelineTable.add("Timeline").expandX().align(Align.bottom);
    timelineTable.row();
    timelineTable.add(timeSlider).expandX().fillX();
    timelineTable.row();
    timelineTable.add(timeLabel).expandX().align(Align.top);

    Table controlTable = new Table(skin);
    controlTable.add(playPauseButton).space(5f).expandY().fillY();
    controlTable.add(timelineTable).expandX().fillX();

    rootTable = new Table(skin);
    rootTable.setFillParent(true);
    rootTable.row();
    rootTable.add(menuTable).expandY().fill();
    rootTable.add(contentTable).expand().fill();
    rootTable.row();
    rootTable.add(controlTable).colspan(2).expandX().fillX();

    stage.addActor(rootTable);

    // Bring input processing to the party

    InputProcessor globalInput = new InputProcessor() {
        @Override
        public boolean keyDown(int keycode) {
            switch (keycode) {
            case Keys.UP:
            case Keys.Z:
            case Keys.W:
                if (lastUsedSelectBox != null)
                    lastUsedSelectBox.setSelectedIndex(Math.max(lastUsedSelectBox.getSelectedIndex() - 1, 0));
                break;
            case Keys.DOWN:
            case Keys.S:
                if (lastUsedSelectBox != null)
                    lastUsedSelectBox.setSelectedIndex(Math.min(lastUsedSelectBox.getSelectedIndex() + 1,
                            lastUsedSelectBox.getItems().size - 1));
                break;

            default:
                break;
            }
            return true;
        }

        @Override
        public boolean keyUp(int keycode) {
            return false;
        }

        @Override
        public boolean keyTyped(char character) {
            return false;
        }

        @Override
        public boolean touchDown(int screenX, int screenY, int pointer, int button) {
            return false;
        }

        @Override
        public boolean touchUp(int screenX, int screenY, int pointer, int button) {
            return false;
        }

        @Override
        public boolean touchDragged(int screenX, int screenY, int pointer) {
            return false;
        }

        @Override
        public boolean mouseMoved(int screenX, int screenY) {
            return false;
        }

        @Override
        public boolean scrolled(int amount) {
            amount *= 0.05f; // Zoom coefficient
            scaleXSlider.setValue(scaleXSlider.getValue() + amount);
            scaleYSlider.setValue(scaleYSlider.getValue() + amount);
            return false;
        }
    };
    Gdx.input.setInputProcessor(new InputMultiplexer(stage, globalInput));

    // Add default test resources
    Array<String> testResources = new Array<String>(SpriterTestData.scml);
    testResources.addAll(SpriterTestData.scon);
    testResources.sort();
    for (String path : testResources)
        addFile(Gdx.files.internal(path.replaceFirst("/", "")), assetManager);

    // Also go discover some unknown exotic resources! (won't work in jar though)
    Array<FileHandle> spriterFiles = SpriterDemoUtils.findFiles(new String[] { "scml", "scon" });
    for (FileHandle f : spriterFiles)
        addFile(f, assetManager);

    fileChooser.setItems(files);

    lastUsedSelectBox = fileChooser;

    if (playPauseButton.isChecked())
        animator.play(animator.getAnimations().iterator().next());
}