mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-10 17:18:44 +08:00
Remember all settings.
This commit is contained in:
parent
7292b7d720
commit
6bb3e49627
@ -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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user