From b0aa2f74474670c8e7f46db7144c4324a0164bbe Mon Sep 17 00:00:00 2001 From: Nathan Sweet Date: Tue, 21 Apr 2020 10:04:23 +0200 Subject: [PATCH 1/2] [libgdx] Skeleton hash is now a long in the binary format. --- .../src/com/esotericsoftware/spine/SkeletonBinary.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java index 5b72b13da..691a9611f 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java @@ -137,8 +137,8 @@ public class SkeletonBinary { SkeletonInput input = new SkeletonInput(file); try { - skeletonData.hash = input.readString(); - if (skeletonData.hash.isEmpty()) skeletonData.hash = null; + long hash = input.readLong(); + skeletonData.hash = hash == 0 ? null : Long.toString(hash); skeletonData.version = input.readString(); if (skeletonData.version.isEmpty()) skeletonData.version = null; if ("3.8.75".equals(skeletonData.version)) From 45767d0e3d4ed07ed8393e90f43ca75f6c98b2cb Mon Sep 17 00:00:00 2001 From: Nathan Sweet Date: Tue, 21 Apr 2020 10:04:36 +0200 Subject: [PATCH 2/2] [libgdx] Cleaned up simple tests. --- .../esotericsoftware/spine/SimpleTest1.java | 18 ++++++++++++------ .../esotericsoftware/spine/SimpleTest2.java | 12 +++++++++--- .../esotericsoftware/spine/SimpleTest3.java | 14 ++++++++++---- .../esotericsoftware/spine/SimpleTest4.java | 12 +++++------- 4 files changed, 36 insertions(+), 20 deletions(-) diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest1.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest1.java index e62343918..b8d5ecd4d 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest1.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest1.java @@ -34,12 +34,12 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.backends.lwjgl.LwjglApplication; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.OrthographicCamera; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureAtlas; public class SimpleTest1 extends ApplicationAdapter { OrthographicCamera camera; - SpriteBatch batch; + PolygonSpriteBatch batch; SkeletonRenderer renderer; SkeletonRendererDebug debugRenderer; @@ -49,7 +49,7 @@ public class SimpleTest1 extends ApplicationAdapter { public void create () { camera = new OrthographicCamera(); - batch = new SpriteBatch(); + batch = new PolygonSpriteBatch(); renderer = new SkeletonRenderer(); renderer.setPremultipliedAlpha(true); // PMA results in correct blending without outlines. debugRenderer = new SkeletonRendererDebug(); @@ -57,9 +57,15 @@ public class SimpleTest1 extends ApplicationAdapter { debugRenderer.setRegionAttachments(false); atlas = new TextureAtlas(Gdx.files.internal("spineboy/spineboy-pma.atlas")); - SkeletonBinary json = new SkeletonBinary(atlas); // This loads skeleton JSON data, which is stateless. - json.setScale(0.6f); // Load the skeleton at 60% the size it was in Spine. - SkeletonData skeletonData = json.readSkeletonData(Gdx.files.internal("spineboy/spineboy-pro.skel")); + + SkeletonJson loader = new SkeletonJson(atlas); // This loads skeleton JSON data, which is stateless. + loader.setScale(0.6f); // Load the skeleton at 60% the size it was in Spine. + SkeletonData skeletonData = loader.readSkeletonData(Gdx.files.internal("spineboy/spineboy-pro.json")); + + // Binary would be loaded similarly: + // SkeletonBinary loader = new SkeletonBinary(atlas); + // loader.setScale(0.6f); + // SkeletonData skeletonData = loader.readSkeletonData(Gdx.files.internal("spineboy/spineboy-pro.skel")); skeleton = new Skeleton(skeletonData); // Skeleton holds skeleton state (bone positions, slot attachments, etc). skeleton.setPosition(250, 20); diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest2.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest2.java index 8b17c426b..3e385a7b8 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest2.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest2.java @@ -63,9 +63,15 @@ public class SimpleTest2 extends ApplicationAdapter { debugRenderer = new SkeletonRendererDebug(); atlas = new TextureAtlas(Gdx.files.internal("spineboy/spineboy-pma.atlas")); - SkeletonJson json = new SkeletonJson(atlas); // This loads skeleton JSON data, which is stateless. - json.setScale(0.6f); // Load the skeleton at 60% the size it was in Spine. - SkeletonData skeletonData = json.readSkeletonData(Gdx.files.internal("spineboy/spineboy-ess.json")); + + SkeletonJson loader = new SkeletonJson(atlas); // This loads skeleton JSON data, which is stateless. + loader.setScale(0.6f); // Load the skeleton at 60% the size it was in Spine. + SkeletonData skeletonData = loader.readSkeletonData(Gdx.files.internal("spineboy/spineboy-ess.json")); + + // Binary would be loaded similarly: + // SkeletonBinary loader = new SkeletonBinary(atlas); + // loader.setScale(0.6f); + // SkeletonData skeletonData = loader.readSkeletonData(Gdx.files.internal("spineboy/spineboy-ess.skel")); skeleton = new Skeleton(skeletonData); // Skeleton holds skeleton state (bone positions, slot attachments, etc). skeleton.setPosition(250, 20); diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest3.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest3.java index 10a5d9d7f..14480f986 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest3.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest3.java @@ -58,9 +58,15 @@ public class SimpleTest3 extends ApplicationAdapter { debugRenderer.setMeshHull(false); atlas = new TextureAtlas(Gdx.files.internal("raptor/raptor-pma.atlas")); - SkeletonJson json = new SkeletonJson(atlas); // This loads skeleton JSON data, which is stateless. - json.setScale(0.5f); // Load the skeleton at 50% the size it was in Spine. - SkeletonData skeletonData = json.readSkeletonData(Gdx.files.internal("raptor/raptor-pro.json")); + + SkeletonJson loader = new SkeletonJson(atlas); // This loads skeleton JSON data, which is stateless. + loader.setScale(0.5f); // Load the skeleton at 50% the size it was in Spine. + SkeletonData skeletonData = loader.readSkeletonData(Gdx.files.internal("raptor/raptor-pro.json")); + + // Binary would be loaded similarly: + // SkeletonBinary loader = new SkeletonBinary(atlas); + // loader.setScale(0.5f); + // SkeletonData skeletonData = loader.readSkeletonData(Gdx.files.internal("raptor/raptor-pro.skel")); skeleton = new Skeleton(skeletonData); // Skeleton holds skeleton state (bone positions, slot attachments, etc). skeleton.setPosition(250, 20); @@ -71,7 +77,7 @@ public class SimpleTest3 extends ApplicationAdapter { state.setTimeScale(0.6f); // Slow all animations down to 60% speed. // Queue animations on tracks 0 and 1. - state.setAnimation(0, "walk", true); + state.setAnimation(0, "walk", true); state.addAnimation(1, "gun-grab", false, 2); // Keys in higher tracks override the pose from lower tracks. } diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest4.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest4.java index 86bf30b3f..689dbe150 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest4.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest4.java @@ -57,25 +57,23 @@ public class SimpleTest4 extends ApplicationAdapter { debugRenderer.setRegionAttachments(false); atlas = new TextureAtlas(Gdx.files.internal("goblins/goblins-pma.atlas")); - SkeletonJson json = new SkeletonJson(atlas); // This loads skeleton JSON data, which is stateless. - json.setScale(0.6f); // Load the skeleton at 60% the size it was in Spine. - SkeletonData skeletonData = json.readSkeletonData(Gdx.files.internal("goblins/goblins-pro.json")); + + SkeletonJson loader = new SkeletonJson(atlas); // This loads skeleton JSON data, which is stateless. + loader.setScale(0.6f); // Load the skeleton at 60% the size it was in Spine. + SkeletonData skeletonData = loader.readSkeletonData(Gdx.files.internal("goblins/goblins-pro.json")); skeleton = new Skeleton(skeletonData); // Skeleton holds skeleton state (bone positions, slot attachments, etc). skeleton.setPosition(250, 20); AnimationStateData stateData = new AnimationStateData(skeletonData); // Defines mixing (crossfading) between animations. -// stateData.setMix("run", "jump", 0.2f); -// stateData.setMix("jump", "run", 0.2f); state = new AnimationState(stateData); // Holds the animation state for a skeleton (current animation, time, etc). state.setTimeScale(0.5f); // Slow all animations down to 50% speed. // Queue animations on track 0. state.setAnimation(0, "walk", true); -// state.addAnimation(0, "jump", false, 2); // Jump after 2 seconds. -// state.addAnimation(0, "run", true, 0); // Run after the jump. + // Create an empty skin and copy the goblingirl skin into it. Skin skin = new Skin("test"); skin.copySkin(skeletonData.findSkin("goblingirl")); skeleton.setSkin(skin);