mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-06 15:24:55 +08:00
spine-libgdx, added flip timelines.
This commit is contained in:
parent
1e7eba5bcb
commit
60ab9d5fa8
@ -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) {
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user