spine-libgdx, added flip timelines.

This commit is contained in:
NathanSweet 2014-10-02 17:51:15 +02:00
parent 1e7eba5bcb
commit 60ab9d5fa8
3 changed files with 58 additions and 15 deletions

View File

@ -46,6 +46,8 @@ import com.esotericsoftware.spine.Animation.CurveTimeline;
import com.esotericsoftware.spine.Animation.DrawOrderTimeline;
import com.esotericsoftware.spine.Animation.EventTimeline;
import com.esotericsoftware.spine.Animation.FfdTimeline;
import com.esotericsoftware.spine.Animation.FlipXTimeline;
import com.esotericsoftware.spine.Animation.FlipYTimeline;
import com.esotericsoftware.spine.Animation.IkConstraintTimeline;
import com.esotericsoftware.spine.Animation.RotateTimeline;
import com.esotericsoftware.spine.Animation.ScaleTimeline;
@ -66,10 +68,6 @@ public class SkeletonBinary {
static public final int TIMELINE_TRANSLATE = 2;
static public final int TIMELINE_ATTACHMENT = 3;
static public final int TIMELINE_COLOR = 4;
static public final int TIMELINE_EVENT = 5;
static public final int TIMELINE_DRAWORDER = 6;
static public final int TIMELINE_FFD = 7;
static public final int TIMELINE_IK = 8;
static public final int CURVE_LINEAR = 0;
static public final int CURVE_STEPPED = 1;
@ -476,6 +474,28 @@ public class SkeletonBinary {
}
}
// Flip timelines.
int flipCount = input.readInt(true);
if (flipCount > 0) {
FlipXTimeline timeline = new FlipXTimeline(flipCount);
for (int i = 0; i < flipCount; i++) {
float time = input.readFloat();
timeline.setFrame(i, time, input.readBoolean());
}
timelines.add(timeline);
duration = Math.max(duration, timeline.getFrames()[flipCount * 2 - 2]);
}
flipCount = input.readInt(true);
if (flipCount > 0) {
FlipYTimeline timeline = new FlipYTimeline(flipCount);
for (int i = 0; i < flipCount; i++) {
float time = input.readFloat();
timeline.setFrame(i, time, input.readBoolean());
}
timelines.add(timeline);
duration = Math.max(duration, timeline.getFrames()[flipCount * 2 - 2]);
}
// Draw order timeline.
int drawOrderCount = input.readInt(true);
if (drawOrderCount > 0) {

View File

@ -30,12 +30,23 @@
package com.esotericsoftware.spine;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.FloatArray;
import com.badlogic.gdx.utils.IntArray;
import com.badlogic.gdx.utils.JsonReader;
import com.badlogic.gdx.utils.JsonValue;
import com.badlogic.gdx.utils.SerializationException;
import com.esotericsoftware.spine.Animation.AttachmentTimeline;
import com.esotericsoftware.spine.Animation.ColorTimeline;
import com.esotericsoftware.spine.Animation.CurveTimeline;
import com.esotericsoftware.spine.Animation.DrawOrderTimeline;
import com.esotericsoftware.spine.Animation.EventTimeline;
import com.esotericsoftware.spine.Animation.FfdTimeline;
import com.esotericsoftware.spine.Animation.FlipXTimeline;
import com.esotericsoftware.spine.Animation.FlipYTimeline;
import com.esotericsoftware.spine.Animation.IkConstraintTimeline;
import com.esotericsoftware.spine.Animation.RotateTimeline;
import com.esotericsoftware.spine.Animation.ScaleTimeline;
@ -49,15 +60,6 @@ import com.esotericsoftware.spine.attachments.BoundingBoxAttachment;
import com.esotericsoftware.spine.attachments.MeshAttachment;
import com.esotericsoftware.spine.attachments.RegionAttachment;
import com.esotericsoftware.spine.attachments.SkinnedMeshAttachment;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.FloatArray;
import com.badlogic.gdx.utils.IntArray;
import com.badlogic.gdx.utils.JsonReader;
import com.badlogic.gdx.utils.JsonValue;
import com.badlogic.gdx.utils.SerializationException;
public class SkeletonJson {
private final AttachmentLoader attachmentLoader;
@ -458,6 +460,26 @@ public class SkeletonJson {
}
}
// Flip timelines.
JsonValue flipMap = map.get("flipx");
if (flipMap != null) {
FlipXTimeline timeline = new FlipXTimeline(flipMap.size);
int frameIndex = 0;
for (JsonValue valueMap = flipMap.child; valueMap != null; valueMap = valueMap.next)
timeline.setFrame(frameIndex++, valueMap.getFloat("time"), valueMap.getBoolean("x", false));
timelines.add(timeline);
duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() * 2 - 2]);
}
flipMap = map.get("flipy");
if (flipMap != null) {
FlipYTimeline timeline = new FlipYTimeline(flipMap.size);
int frameIndex = 0;
for (JsonValue valueMap = flipMap.child; valueMap != null; valueMap = valueMap.next)
timeline.setFrame(frameIndex++, valueMap.getFloat("time"), valueMap.getBoolean("y", false));
timelines.add(timeline);
duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() * 2 - 2]);
}
// Draw order timeline.
JsonValue drawOrdersMap = map.get("draworder");
if (drawOrdersMap != null) {

View File

@ -202,16 +202,17 @@ public class SkeletonViewer extends ApplicationAdapter {
delta = Math.min(delta, 0.032f) * ui.speedSlider.getValue();
skeleton.update(delta);
skeleton.setFlip(ui.flipXCheckbox.isChecked(), ui.flipYCheckbox.isChecked());
if (!ui.pauseButton.isChecked()) {
state.update(delta);
state.apply(skeleton);
ui.flipXCheckbox.setChecked(skeleton.getFlipX());
ui.flipYCheckbox.setChecked(skeleton.getFlipY());
}
skeleton.setPosition(skeletonX, skeletonY);
// skeleton.setPosition(0, 0);
// skeleton.getRootBone().setX(skeletonX);
// skeleton.getRootBone().setY(skeletonY);
skeleton.setFlipX(ui.flipXCheckbox.isChecked());
skeleton.setFlipY(ui.flipYCheckbox.isChecked());
skeleton.updateWorldTransform();
batch.begin();