Remember all settings.

This commit is contained in:
NathanSweet 2016-08-29 19:44:26 +02:00
parent 7292b7d720
commit 6bb3e49627

View File

@ -95,6 +95,7 @@ public class SkeletonViewer extends ApplicationAdapter {
FileHandle skeletonFile;
long lastModified;
float lastModifiedCheck, reloadTimer;
Preferences prefs;
public void create () {
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@ -104,16 +105,20 @@ public class SkeletonViewer extends ApplicationAdapter {
}
});
prefs = Gdx.app.getPreferences("spine-skeletonviewer");
ui = new UI();
batch = new PolygonSpriteBatch();
renderer = new SkeletonMeshRenderer();
debugRenderer = new SkeletonRendererDebug();
skeletonX = (int)(ui.window.getWidth() + (Gdx.graphics.getWidth() - ui.window.getWidth()) / 2);
skeletonY = Gdx.graphics.getHeight() / 4;
ui.loadPrefs();
loadSkeleton(
Gdx.files.internal(Gdx.app.getPreferences("spine-skeletonviewer").getString("lastFile", "spineboy/spineboy.json")),
false);
ui.loadPrefs();
}
void loadSkeleton (final FileHandle skeletonFile, boolean reload) {
@ -180,7 +185,6 @@ public class SkeletonViewer extends ApplicationAdapter {
});
this.skeletonFile = skeletonFile;
Preferences prefs = Gdx.app.getPreferences("spine-skeletonviewer");
prefs.putString("lastFile", skeletonFile.path());
prefs.flush();
lastModified = skeletonFile.lastModified();
@ -205,12 +209,13 @@ public class SkeletonViewer extends ApplicationAdapter {
// Configure skeleton from UI.
if (ui.skinList.getSelected() != null) skeleton.setSkin(ui.skinList.getSelected());
if (ui.animationList.getSelected() != null) setAnimation();
setAnimation();
if (reload) ui.toast("Reloaded.");
}
void setAnimation () {
if (ui.animationList.getSelected() == null) return;
TrackEntry current = state.getCurrent(0);
if (current == null) {
state.setEmptyAnimation(0, 0);
@ -228,6 +233,7 @@ public class SkeletonViewer extends ApplicationAdapter {
float delta = Gdx.graphics.getDeltaTime();
// Draw skeleton origin lines.
ShapeRenderer shapes = debugRenderer.getShapeRenderer();
if (state != null) {
shapes.setColor(Color.DARK_GRAY);
@ -238,6 +244,7 @@ public class SkeletonViewer extends ApplicationAdapter {
}
if (skeleton != null) {
// Reload if skeleton file was modified.
if (reloadTimer <= 0) {
lastModifiedCheck -= delta;
if (lastModifiedCheck < 0) {
@ -250,6 +257,7 @@ public class SkeletonViewer extends ApplicationAdapter {
if (reloadTimer <= 0) loadSkeleton(skeletonFile, true);
}
// Pose and render skeleton.
state.getData().setDefaultMix(ui.mixSlider.getValue());
renderer.setPremultipliedAlpha(ui.premultipliedCheckbox.isChecked());
@ -277,6 +285,7 @@ public class SkeletonViewer extends ApplicationAdapter {
debugRenderer.draw(skeleton);
}
// Render UI.
ui.stage.act();
ui.stage.draw();
@ -340,10 +349,9 @@ public class SkeletonViewer extends ApplicationAdapter {
TextButton slotsSetupPoseButton = new TextButton("Slots", skin);
TextButton setupPoseButton = new TextButton("Both", skin);
WidgetGroup toasts = new WidgetGroup();
boolean prefsLoaded;
public UI () {
// Configure widgets.
animationList.getSelection().setRequired(false);
premultipliedCheckbox.setChecked(true);
@ -430,8 +438,6 @@ public class SkeletonViewer extends ApplicationAdapter {
table.add(toasts);
}
// Events.
window.addListener(new InputListener() {
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
event.cancel();
@ -548,7 +554,31 @@ public class SkeletonViewer extends ApplicationAdapter {
skeletonY = Gdx.graphics.getHeight() - screenY;
return false;
}
public boolean touchUp (int screenX, int screenY, int pointer, int button) {
savePrefs();
return false;
}
}));
ChangeListener savePrefsListener = new ChangeListener() {
public void changed (ChangeEvent event, Actor actor) {
if (actor instanceof Slider && ((Slider)actor).isDragging()) return;
savePrefs();
}
};
debugBonesCheckbox.addListener(savePrefsListener);
debugRegionsCheckbox.addListener(savePrefsListener);
debugMeshHullCheckbox.addListener(savePrefsListener);
debugMeshTrianglesCheckbox.addListener(savePrefsListener);
debugPathsCheckbox.addListener(savePrefsListener);
premultipliedCheckbox.addListener(savePrefsListener);
loopCheckbox.addListener(savePrefsListener);
speedSlider.addListener(savePrefsListener);
mixSlider.addListener(savePrefsListener);
scaleSlider.addListener(savePrefsListener);
animationList.addListener(savePrefsListener);
skinList.addListener(savePrefsListener);
}
private Table table (Actor... actors) {
@ -575,6 +605,43 @@ public class SkeletonViewer extends ApplicationAdapter {
toasts.addActor(table);
toasts.getParent().toFront();
}
void savePrefs () {
if (!prefsLoaded) return;
prefs.putBoolean("debugBones", debugBonesCheckbox.isChecked());
prefs.putBoolean("debugRegions", debugRegionsCheckbox.isChecked());
prefs.putBoolean("debugMeshHull", debugMeshHullCheckbox.isChecked());
prefs.putBoolean("debugMeshTriangles", debugMeshTrianglesCheckbox.isChecked());
prefs.putBoolean("debugPaths", debugPathsCheckbox.isChecked());
prefs.putBoolean("premultiplied", premultipliedCheckbox.isChecked());
prefs.putBoolean("loop", loopCheckbox.isChecked());
prefs.putFloat("speed", speedSlider.getValue());
prefs.putFloat("mix", mixSlider.getValue());
prefs.putFloat("scale", scaleSlider.getValue());
prefs.putInteger("x", skeletonX);
prefs.putInteger("y", skeletonY);
if (animationList.getSelected() != null) prefs.putString("animationName", animationList.getSelected());
if (skinList.getSelected() != null)prefs.putString("skinName", skinList.getSelected());
prefs.flush();
}
void loadPrefs () {
debugBonesCheckbox.setChecked(prefs.getBoolean("debugBones", true));
debugRegionsCheckbox.setChecked(prefs.getBoolean("debugRegions", false));
debugMeshHullCheckbox.setChecked(prefs.getBoolean("debugMeshHull", false));
debugMeshTrianglesCheckbox.setChecked(prefs.getBoolean("debugMeshTriangles", false));
debugPathsCheckbox.setChecked(prefs.getBoolean("debugPaths", true));
premultipliedCheckbox.setChecked(prefs.getBoolean("premultiplied", true));
loopCheckbox.setChecked(prefs.getBoolean("loop", false));
speedSlider.setValue(prefs.getFloat("speed", 0.3f));
mixSlider.setValue(prefs.getFloat("mix", 0.3f));
scaleSlider.setValue(prefs.getFloat("scale", 1));
skeletonX = prefs.getInteger("x", 0);
skeletonY = prefs.getInteger("y", 0);
animationList.setSelected(prefs.getString("animationName", null));
skinList.setSelected(prefs.getString("skinName", null));
prefsLoaded = true;
}
}
static public void main (String[] args) throws Exception {