diff --git a/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewer.java b/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewer.java index b12b469a3..e684c4333 100644 --- a/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewer.java +++ b/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewer.java @@ -279,6 +279,8 @@ public class SkeletonViewer extends ApplicationAdapter { entry = state.setAnimation(track, ui.animationList.getSelected(), ui.loopCheckbox.isChecked()); } entry.setMixBlend(ui.addCheckbox.isChecked() ? MixBlend.add : MixBlend.replace); + entry.setReverse(ui.reverseCheckbox.isChecked()); + entry.setHoldPrevious(ui.holdPrevCheckbox.isChecked()); entry.setAlpha(ui.alphaSlider.getValue()); } @@ -479,6 +481,9 @@ public class SkeletonViewer extends ApplicationAdapter { Label speedLabel = new Label("1.0x", skin); TextButton speedResetButton = new TextButton("Reset", skin); + CheckBox reverseCheckbox = new CheckBox("Reverse", skin); + CheckBox holdPrevCheckbox = new CheckBox("Hold previous", skin); + Slider mixSlider = new Slider(0, 4, 0.01f, false, skin); Label mixLabel = new Label("0.3s", skin); @@ -531,6 +536,7 @@ public class SkeletonViewer extends ApplicationAdapter { alphaSlider.setDisabled(true); addCheckbox.setDisabled(true); + holdPrevCheckbox.setDisabled(true); window.setMovable(false); window.setResizable(false); @@ -616,6 +622,13 @@ public class SkeletonViewer extends ApplicationAdapter { for (TextButton button : trackButtons.getButtons()) table.add(button); table.add(loopCheckbox); + root.add(table).row(); + } + root.add(); + { + Table table = table(); + table.add(reverseCheckbox); + table.add(holdPrevCheckbox); table.add(addCheckbox); root.add(table).row(); } @@ -628,6 +641,9 @@ public class SkeletonViewer extends ApplicationAdapter { } root.add("Animation:"); root.add(animationScroll).grow().minHeight(64).row(); + + root.add(new Image(skin.newDrawable("white", new Color(0x4e4e4eff)))).height(1).fillX().colspan(2).pad(1, 0, 1, 0).row(); + root.add("Speed:"); { Table table = table(); @@ -844,17 +860,15 @@ public class SkeletonViewer extends ApplicationAdapter { }); animationScroll.addListener(scrollFocusListener); - loopCheckbox.addListener(new ChangeListener() { + ChangeListener setAnimation = new ChangeListener() { public void changed (ChangeEvent event, Actor actor) { setAnimation(); } - }); - - addCheckbox.addListener(new ChangeListener() { - public void changed (ChangeEvent event, Actor actor) { - setAnimation(); - } - }); + }; + loopCheckbox.addListener(setAnimation); + reverseCheckbox.addListener(setAnimation); + holdPrevCheckbox.addListener(setAnimation); + addCheckbox.addListener(setAnimation); linearCheckbox.addListener(new ChangeListener() { public void changed (ChangeEvent event, Actor actor) { @@ -892,10 +906,13 @@ public class SkeletonViewer extends ApplicationAdapter { alphaSlider.setValue(current == null ? 1 : current.alpha); addCheckbox.setDisabled(track == 0); + holdPrevCheckbox.setDisabled(track == 0); if (current != null) { loopCheckbox.setChecked(current.getLoop()); addCheckbox.setChecked(current.getMixBlend() == MixBlend.add); + reverseCheckbox.setChecked(current.getReverse()); + holdPrevCheckbox.setChecked(current.getHoldPrevious()); } } }; @@ -954,6 +971,8 @@ public class SkeletonViewer extends ApplicationAdapter { premultipliedCheckbox.addListener(savePrefsListener); loopCheckbox.addListener(savePrefsListener); addCheckbox.addListener(savePrefsListener); + holdPrevCheckbox.addListener(savePrefsListener); + reverseCheckbox.addListener(savePrefsListener); speedSlider.addListener(savePrefsListener); speedResetButton.addListener(savePrefsListener); mixSlider.addListener(savePrefsListener); @@ -1019,6 +1038,8 @@ public class SkeletonViewer extends ApplicationAdapter { prefs.putBoolean("premultiplied", premultipliedCheckbox.isChecked()); prefs.putBoolean("loop", loopCheckbox.isChecked()); prefs.putBoolean("add", addCheckbox.isChecked()); + prefs.putBoolean("holdPrev", holdPrevCheckbox.isChecked()); + prefs.putBoolean("reverse", reverseCheckbox.isChecked()); prefs.putFloat("speed", speedSlider.getValue()); prefs.putFloat("mix", mixSlider.getValue()); prefs.putFloat("scale", loadScaleSlider.getValue()); @@ -1049,6 +1070,8 @@ public class SkeletonViewer extends ApplicationAdapter { premultipliedCheckbox.setChecked(prefs.getBoolean("premultiplied", true)); loopCheckbox.setChecked(prefs.getBoolean("loop", true)); addCheckbox.setChecked(prefs.getBoolean("add", false)); + holdPrevCheckbox.setChecked(prefs.getBoolean("holdPrev", false)); + reverseCheckbox.setChecked(prefs.getBoolean("reverse", false)); speedSlider.setValue(prefs.getFloat("speed", 0.3f)); mixSlider.setValue(prefs.getFloat("mix", 0.3f));