, alpha: number, blend: MixBlend, direction: MixDirection) {
+ let slot = skeleton.slots[this.slotIndex];
+ if (!slot.bone.active) return;
+ let slotAttachment = slot.attachment;
+ let attachment = this.attachment as unknown as Attachment;
+ if (slotAttachment != attachment) {
+ if (!(slotAttachment instanceof VertexAttachment)
+ || (slotAttachment as VertexAttachment).timelineAttahment != attachment) return;
+ }
+
+ let frames = this.frames;
+ if (time < frames[0]) { // Time is before first frame.
+ if (blend == MixBlend.setup || blend == MixBlend.first) slot.sequenceIndex = -1;
+ return;
+ }
+
+ let i = Timeline.search(frames, time, SequenceTimeline.ENTRIES);
+ let before = frames[i];
+ let modeAndIndex = frames[i + SequenceTimeline.MODE];
+ let delay = frames[i + SequenceTimeline.DELAY];
+
+ let index = modeAndIndex >> 4, count = this.attachment.sequence.regions.length;
+ let mode = SequenceModeValues[modeAndIndex & 0xf];
+ if (mode != SequenceMode.hold) {
+ index += (((time - before) / delay + 0.00001) | 0);
+ switch (mode) {
+ case SequenceMode.once:
+ index = Math.min(count - 1, index);
+ break;
+ case SequenceMode.loop:
+ index %= count;
+ break;
+ case SequenceMode.pingpong:
+ let n = (count << 1) - 2;
+ index %= n;
+ if (index >= count) index = n - index;
+ break;
+ case SequenceMode.onceReverse:
+ index = Math.max(count - 1 - index, 0);
+ break;
+ case SequenceMode.loopReverse:
+ index = count - 1 - (index % count);
+ }
+ }
+ slot.sequenceIndex = index;
+ }
+}
\ No newline at end of file
diff --git a/spine-ts/spine-core/src/AnimationState.ts b/spine-ts/spine-core/src/AnimationState.ts
index 5f26b5981..00716fc76 100644
--- a/spine-ts/spine-core/src/AnimationState.ts
+++ b/spine-ts/spine-core/src/AnimationState.ts
@@ -1095,24 +1095,24 @@ export enum EventType {
* {@link AnimationState#addListener()}. */
export interface AnimationStateListener {
/** Invoked when this entry has been set as the current entry. */
- start? (entry: TrackEntry): void;
+ start?(entry: TrackEntry): void;
/** Invoked when another entry has replaced this entry as the current entry. This entry may continue being applied for
* mixing. */
- interrupt? (entry: TrackEntry): void;
+ interrupt?(entry: TrackEntry): void;
/** Invoked when this entry is no longer the current entry and will never be applied again. */
- end? (entry: TrackEntry): void;
+ end?(entry: TrackEntry): void;
/** Invoked when this entry will be disposed. This may occur without the entry ever being set as the current entry.
* References to the entry should not be kept after dispose is called, as it may be destroyed or reused. */
- dispose? (entry: TrackEntry): void;
+ dispose?(entry: TrackEntry): void;
/** Invoked every time this entry's animation completes a loop. */
- complete? (entry: TrackEntry): void;
+ complete?(entry: TrackEntry): void;
/** Invoked when this entry's animation triggers an event. */
- event? (entry: TrackEntry, event: Event): void;
+ event?(entry: TrackEntry, event: Event): void;
}
export abstract class AnimationStateAdapter implements AnimationStateListener {
diff --git a/spine-ts/spine-core/src/AtlasAttachmentLoader.ts b/spine-ts/spine-core/src/AtlasAttachmentLoader.ts
index 5c1018438..30973056a 100644
--- a/spine-ts/spine-core/src/AtlasAttachmentLoader.ts
+++ b/spine-ts/spine-core/src/AtlasAttachmentLoader.ts
@@ -36,6 +36,7 @@ import { PointAttachment } from "./attachments/PointAttachment";
import { RegionAttachment } from "./attachments/RegionAttachment";
import { Skin } from "./Skin";
import { TextureAtlas } from "./TextureAtlas";
+import { Sequence } from "./attachments/Sequence"
/** An {@link AttachmentLoader} that configures attachments using texture regions from an {@link TextureAtlas}.
*
@@ -48,21 +49,39 @@ export class AtlasAttachmentLoader implements AttachmentLoader {
this.atlas = atlas;
}
- newRegionAttachment (skin: Skin, name: string, path: string): RegionAttachment {
- let region = this.atlas.findRegion(path);
- if (!region) throw new Error("Region not found in atlas: " + path + " (region attachment: " + name + ")");
- region.renderObject = region;
+ loadSequence (name: string, basePath: string, sequence: Sequence) {
+ let regions = sequence.regions;
+ for (let i = 0, n = regions.length; i < n; i++) {
+ let path = sequence.getPath(basePath, i);
+ regions[i] = this.atlas.findRegion(path);
+ regions[i].renderObject = regions[i];
+ if (regions[i] == null) throw new Error("Region not found in atlas: " + path + " (sequence: " + name + ")");
+ }
+ }
+
+ newRegionAttachment (skin: Skin, name: string, path: string, sequence: Sequence): RegionAttachment {
let attachment = new RegionAttachment(name);
- attachment.setRegion(region);
+ if (sequence != null) {
+ this.loadSequence(name, path, sequence);
+ } else {
+ let region = this.atlas.findRegion(path);
+ if (!region) throw new Error("Region not found in atlas: " + path + " (region attachment: " + name + ")");
+ region.renderObject = region;
+ attachment.region = region;
+ }
return attachment;
}
- newMeshAttachment (skin: Skin, name: string, path: string): MeshAttachment {
- let region = this.atlas.findRegion(path);
- if (!region) throw new Error("Region not found in atlas: " + path + " (mesh attachment: " + name + ")");
- region.renderObject = region;
+ newMeshAttachment (skin: Skin, name: string, path: string, sequence: Sequence): MeshAttachment {
let attachment = new MeshAttachment(name);
- attachment.region = region;
+ if (sequence != null) {
+ this.loadSequence(name, path, sequence);
+ } else {
+ let region = this.atlas.findRegion(path);
+ if (!region) throw new Error("Region not found in atlas: " + path + " (mesh attachment: " + name + ")");
+ region.renderObject = region;
+ attachment.region = region;
+ }
return attachment;
}
diff --git a/spine-ts/spine-core/src/Skeleton.ts b/spine-ts/spine-core/src/Skeleton.ts
index 442063b8a..35ff4589c 100644
--- a/spine-ts/spine-core/src/Skeleton.ts
+++ b/spine-ts/spine-core/src/Skeleton.ts
@@ -75,11 +75,6 @@ export class Skeleton {
/** The color to tint all the skeleton's attachments. */
color: Color;
- /** Returns the skeleton's time. This can be used for tracking, such as with Slot {@link Slot#attachmentTime}.
- *
- * See {@link #update()}. */
- time = 0;
-
/** Scales the entire skeleton on the X axis. This affects all bones, even if the bone's transform mode disallows scale
* inheritance. */
scaleX = 1;
@@ -603,7 +598,7 @@ export class Skeleton {
if (attachment instanceof RegionAttachment) {
verticesLength = 8;
vertices = Utils.setArraySize(temp, verticesLength, 0);
- (attachment).computeWorldVertices(slot.bone, vertices, 0, 2);
+ (attachment).computeWorldVertices(slot, vertices, 0, 2);
} else if (attachment instanceof MeshAttachment) {
let mesh = (attachment);
verticesLength = mesh.worldVerticesLength;
@@ -623,9 +618,4 @@ export class Skeleton {
offset.set(minX, minY);
size.set(maxX - minX, maxY - minY);
}
-
- /** Increments the skeleton's {@link #time}. */
- update (delta: number) {
- this.time += delta;
- }
}
diff --git a/spine-ts/spine-core/src/SkeletonBinary.ts b/spine-ts/spine-core/src/SkeletonBinary.ts
index 392068990..804dfe702 100644
--- a/spine-ts/spine-core/src/SkeletonBinary.ts
+++ b/spine-ts/spine-core/src/SkeletonBinary.ts
@@ -27,10 +27,12 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
-import { Animation, Timeline, AttachmentTimeline, RGBATimeline, RGBTimeline, RGBA2Timeline, RGB2Timeline, AlphaTimeline, RotateTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, IkConstraintTimeline, TransformConstraintTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, PathConstraintMixTimeline, DeformTimeline, DrawOrderTimeline, EventTimeline, CurveTimeline1, CurveTimeline2, CurveTimeline } from "./Animation";
+import { Animation, Timeline, AttachmentTimeline, RGBATimeline, RGBTimeline, RGBA2Timeline, RGB2Timeline, AlphaTimeline, RotateTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, IkConstraintTimeline, TransformConstraintTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, PathConstraintMixTimeline, DeformTimeline, DrawOrderTimeline, EventTimeline, CurveTimeline1, CurveTimeline2, CurveTimeline, SequenceTimeline } from "./Animation";
import { VertexAttachment, Attachment } from "./attachments/Attachment";
import { AttachmentLoader } from "./attachments/AttachmentLoader";
+import { HasTextureRegion } from "./attachments/HasTextureRegion";
import { MeshAttachment } from "./attachments/MeshAttachment";
+import { Sequence, SequenceModeValues } from "./attachments/Sequence";
import { BoneData } from "./BoneData";
import { Event } from "./Event";
import { EventData } from "./EventData";
@@ -219,9 +221,9 @@ export class SkeletonBinary {
let linkedMesh = this.linkedMeshes[i];
let skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);
let parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);
- linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent as VertexAttachment : linkedMesh.mesh;
+ linkedMesh.mesh.timelineAttahment = linkedMesh.inheritTimeline ? parent as VertexAttachment : linkedMesh.mesh;
linkedMesh.mesh.setParentMesh(parent as MeshAttachment);
- linkedMesh.mesh.updateUVs();
+ if (linkedMesh.mesh.region != null) linkedMesh.mesh.updateRegion();
}
this.linkedMeshes.length = 0;
@@ -299,9 +301,10 @@ export class SkeletonBinary {
let width = input.readFloat();
let height = input.readFloat();
let color = input.readInt32();
+ let sequence = this.readSequence(input);
if (!path) path = name;
- let region = this.attachmentLoader.newRegionAttachment(skin, name, path);
+ let region = this.attachmentLoader.newRegionAttachment(skin, name, path, sequence);
if (!region) return null;
region.path = path;
region.x = x * scale;
@@ -312,7 +315,8 @@ export class SkeletonBinary {
region.width = width * scale;
region.height = height * scale;
Color.rgba8888ToColor(region.color, color);
- region.updateOffset();
+ region.sequence = sequence;
+ if (sequence == null) region.updateRegion();
return region;
}
case AttachmentType.BoundingBox: {
@@ -336,6 +340,7 @@ export class SkeletonBinary {
let triangles = this.readShortArray(input);
let vertices = this.readVertices(input, vertexCount);
let hullLength = input.readInt(true);
+ let sequence = this.readSequence(input);
let edges = null;
let width = 0, height = 0;
if (nonessential) {
@@ -345,7 +350,7 @@ export class SkeletonBinary {
}
if (!path) path = name;
- let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);
+ let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path, sequence);
if (!mesh) return null;
mesh.path = path;
Color.rgba8888ToColor(mesh.color, color);
@@ -354,8 +359,9 @@ export class SkeletonBinary {
mesh.worldVerticesLength = vertexCount << 1;
mesh.triangles = triangles;
mesh.regionUVs = uvs;
- mesh.updateUVs();
+ if (sequence == null) mesh.updateRegion();
mesh.hullLength = hullLength << 1;
+ mesh.sequence = sequence;
if (nonessential) {
mesh.edges = edges;
mesh.width = width * scale;
@@ -368,7 +374,8 @@ export class SkeletonBinary {
let color = input.readInt32();
let skinName = input.readStringRef();
let parent = input.readStringRef();
- let inheritDeform = input.readBoolean();
+ let inheritTimelines = input.readBoolean();
+ let sequence = this.readSequence(input);
let width = 0, height = 0;
if (nonessential) {
width = input.readFloat();
@@ -376,15 +383,16 @@ export class SkeletonBinary {
}
if (!path) path = name;
- let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);
+ let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path, sequence);
if (!mesh) return null;
mesh.path = path;
Color.rgba8888ToColor(mesh.color, color);
+ mesh.sequence = sequence;
if (nonessential) {
mesh.width = width * scale;
mesh.height = height * scale;
}
- this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent, inheritDeform));
+ this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent, inheritTimelines));
return mesh;
}
case AttachmentType.Path: {
@@ -441,6 +449,15 @@ export class SkeletonBinary {
return null;
}
+ private readSequence (input: BinaryInput) {
+ if (!input.readBoolean()) return null;
+ let sequence = new Sequence(input.readInt(true));
+ sequence.start = input.readInt(true);
+ sequence.digits = input.readInt(true);
+ sequence.setupIndex = input.readInt(true);
+ return sequence;
+ }
+
private readVertices (input: BinaryInput, vertexCount: number): Vertices {
let scale = this.scale;
let verticesLength = vertexCount << 1;
@@ -697,7 +714,6 @@ export class SkeletonBinary {
a = a2;
}
timelines.push(timeline);
- break;
}
}
}
@@ -850,52 +866,72 @@ export class SkeletonBinary {
let slotIndex = input.readInt(true);
for (let iii = 0, nnn = input.readInt(true); iii < nnn; iii++) {
let attachmentName = input.readStringRef();
- let attachment = skin.getAttachment(slotIndex, attachmentName) as VertexAttachment;
- let weighted = attachment.bones;
- let vertices = attachment.vertices;
- let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;
-
+ let attachment = skin.getAttachment(slotIndex, attachmentName);
+ let timelineType = input.readByte();
let frameCount = input.readInt(true);
let frameLast = frameCount - 1;
- let bezierCount = input.readInt(true);
- let timeline = new DeformTimeline(frameCount, bezierCount, slotIndex, attachment);
- let time = input.readFloat();
- for (let frame = 0, bezier = 0; ; frame++) {
- let deform;
- let end = input.readInt(true);
- if (end == 0)
- deform = weighted ? Utils.newFloatArray(deformLength) : vertices;
- else {
- deform = Utils.newFloatArray(deformLength);
- let start = input.readInt(true);
- end += start;
- if (scale == 1) {
- for (let v = start; v < end; v++)
- deform[v] = input.readFloat();
- } else {
- for (let v = start; v < end; v++)
- deform[v] = input.readFloat() * scale;
- }
- if (!weighted) {
- for (let v = 0, vn = deform.length; v < vn; v++)
- deform[v] += vertices[v];
- }
- }
+ switch (timelineType) {
+ case ATTACHMENT_DEFORM: {
+ let vertexAttachment = attachment as VertexAttachment;
+ let weighted = vertexAttachment.bones;
+ let vertices = vertexAttachment.vertices;
+ let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;
- timeline.setFrame(frame, time, deform);
- if (frame == frameLast) break;
- let time2 = input.readFloat();
- switch (input.readByte()) {
- case CURVE_STEPPED:
- timeline.setStepped(frame);
- break;
- case CURVE_BEZIER:
- setBezier(input, timeline, bezier++, frame, 0, time, time2, 0, 1, 1);
+
+ let bezierCount = input.readInt(true);
+ let timeline = new DeformTimeline(frameCount, bezierCount, slotIndex, vertexAttachment);
+
+ let time = input.readFloat();
+ for (let frame = 0, bezier = 0; ; frame++) {
+ let deform;
+ let end = input.readInt(true);
+ if (end == 0)
+ deform = weighted ? Utils.newFloatArray(deformLength) : vertices;
+ else {
+ deform = Utils.newFloatArray(deformLength);
+ let start = input.readInt(true);
+ end += start;
+ if (scale == 1) {
+ for (let v = start; v < end; v++)
+ deform[v] = input.readFloat();
+ } else {
+ for (let v = start; v < end; v++)
+ deform[v] = input.readFloat() * scale;
+ }
+ if (!weighted) {
+ for (let v = 0, vn = deform.length; v < vn; v++)
+ deform[v] += vertices[v];
+ }
+ }
+
+ timeline.setFrame(frame, time, deform);
+ if (frame == frameLast) break;
+ let time2 = input.readFloat();
+ switch (input.readByte()) {
+ case CURVE_STEPPED:
+ timeline.setStepped(frame);
+ break;
+ case CURVE_BEZIER:
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, 0, 1, 1);
+ }
+ time = time2;
+ }
+ timelines.push(timeline);
+ break;
+ }
+ case ATTACHMENT_SEQUENCE: {
+ let timeline = new SequenceTimeline(frameCount, slotIndex, attachment as unknown as HasTextureRegion);
+ for (let frame = 0; frame < frameCount; frame++) {
+ let time = input.readFloat();
+ let modeAndIndex = input.readInt32();
+ timeline.setFrame(frame, time, SequenceModeValues[modeAndIndex & 0xf], modeAndIndex >> 4,
+ input.readFloat());
+ }
+ timelines.push(timeline);
+ break;
}
- time = time2;
}
- timelines.push(timeline);
}
}
}
@@ -1056,14 +1092,14 @@ class LinkedMesh {
parent: string; skin: string;
slotIndex: number;
mesh: MeshAttachment;
- inheritDeform: boolean;
+ inheritTimeline: boolean;
constructor (mesh: MeshAttachment, skin: string, slotIndex: number, parent: string, inheritDeform: boolean) {
this.mesh = mesh;
this.skin = skin;
this.slotIndex = slotIndex;
this.parent = parent;
- this.inheritDeform = inheritDeform;
+ this.inheritTimeline = inheritDeform;
}
}
@@ -1136,6 +1172,9 @@ const SLOT_RGBA2 = 3;
const SLOT_RGB2 = 4;
const SLOT_ALPHA = 5;
+const ATTACHMENT_DEFORM = 0;
+const ATTACHMENT_SEQUENCE = 1;
+
const PATH_POSITION = 0;
const PATH_SPACING = 1;
const PATH_MIX = 2;
diff --git a/spine-ts/spine-core/src/SkeletonJson.ts b/spine-ts/spine-core/src/SkeletonJson.ts
index 33c4943ba..05e30faa1 100644
--- a/spine-ts/spine-core/src/SkeletonJson.ts
+++ b/spine-ts/spine-core/src/SkeletonJson.ts
@@ -41,6 +41,9 @@ import { Skin } from "./Skin";
import { SlotData, BlendMode } from "./SlotData";
import { TransformConstraintData } from "./TransformConstraintData";
import { Utils, Color, NumberArrayLike } from "./Utils";
+import { Sequence, SequenceMode } from "./attachments/Sequence";
+import { SequenceTimeline } from "src";
+import { HasTextureRegion } from "./attachments/HasTextureRegion";
/** Loads skeleton data in the Spine JSON format.
*
@@ -257,9 +260,9 @@ export class SkeletonJson {
let linkedMesh = this.linkedMeshes[i];
let skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);
let parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);
- linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent : linkedMesh.mesh;
+ linkedMesh.mesh.timelineAttahment = linkedMesh.inheritTimeline ? parent : linkedMesh.mesh;
linkedMesh.mesh.setParentMesh(parent);
- linkedMesh.mesh.updateUVs();
+ if (linkedMesh.mesh.region != null) linkedMesh.mesh.updateRegion();
}
this.linkedMeshes.length = 0;
@@ -298,7 +301,8 @@ export class SkeletonJson {
switch (getValue(map, "type", "region")) {
case "region": {
let path = getValue(map, "path", name);
- let region = this.attachmentLoader.newRegionAttachment(skin, name, path);
+ let sequence = this.readSequence(getValue(map, "sequence", null));
+ let region = this.attachmentLoader.newRegionAttachment(skin, name, path, sequence);
if (!region) return null;
region.path = path;
region.x = getValue(map, "x", 0) * scale;
@@ -308,11 +312,12 @@ export class SkeletonJson {
region.rotation = getValue(map, "rotation", 0);
region.width = map.width * scale;
region.height = map.height * scale;
+ region.sequence = sequence;
let color: string = getValue(map, "color", null);
if (color) region.color.setFromString(color);
- region.updateOffset();
+ if (region.region != null) region.updateRegion();
return region;
}
case "boundingbox": {
@@ -326,7 +331,8 @@ export class SkeletonJson {
case "mesh":
case "linkedmesh": {
let path = getValue(map, "path", name);
- let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);
+ let sequence = this.readSequence(getValue(map, "sequence", null));
+ let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path, sequence);
if (!mesh) return null;
mesh.path = path;
@@ -335,10 +341,11 @@ export class SkeletonJson {
mesh.width = getValue(map, "width", 0) * scale;
mesh.height = getValue(map, "height", 0) * scale;
+ mesh.sequence = sequence;
let parent: string = getValue(map, "parent", null);
if (parent) {
- this.linkedMeshes.push(new LinkedMesh(mesh, getValue(map, "skin", null), slotIndex, parent, getValue(map, "deform", true)));
+ this.linkedMeshes.push(new LinkedMesh(mesh, getValue(map, "skin", null), slotIndex, parent, getValue(map, "timelines", true)));
return mesh;
}
@@ -346,7 +353,7 @@ export class SkeletonJson {
this.readVertices(map, mesh, uvs.length);
mesh.triangles = map.triangles;
mesh.regionUVs = uvs;
- mesh.updateUVs();
+ if (mesh.region != null) mesh.updateRegion();
mesh.edges = getValue(map, "edges", null);
mesh.hullLength = getValue(map, "hull", 0) * 2;
@@ -399,6 +406,15 @@ export class SkeletonJson {
return null;
}
+ readSequence (map: any) {
+ if (map == null) return null;
+ let sequence = new Sequence(getValue(map, "count", 0));
+ sequence.start = getValue(map, "start", 1);
+ sequence.digits = getValue(map, "digits", 0);
+ sequence.setupIndex = getValue(map, "setup", 0);
+ return sequence;
+ }
+
readVertices (map: any, attachment: VertexAttachment, verticesLength: number) {
let scale = this.scale;
attachment.worldVerticesLength = verticesLength;
@@ -445,7 +461,7 @@ export class SkeletonJson {
let timeline = new AttachmentTimeline(frames, slotIndex);
for (let frame = 0; frame < frames; frame++) {
let keyMap = timelineMap[frame];
- timeline.setFrame(frame, getValue(keyMap, "time", 0), keyMap.name);
+ timeline.setFrame(frame, getValue(keyMap, "time", 0), getValue(keyMap, "name", null));
}
timelines.push(timeline);
@@ -778,58 +794,77 @@ export class SkeletonJson {
}
}
- // Deform timelines.
- if (map.deform) {
- for (let deformName in map.deform) {
- let deformMap = map.deform[deformName];
- let skin = skeletonData.findSkin(deformName);
- for (let slotName in deformMap) {
- let slotMap = deformMap[slotName];
- let slotIndex = skeletonData.findSlot(slotName).index;
- for (let timelineName in slotMap) {
- let timelineMap = slotMap[timelineName];
- let keyMap = timelineMap[0];
- if (!keyMap) continue;
+ // Attachment timelines.
+ if (map.attachments) {
+ for (let attachmentsName in map.attachments) {
+ let attachmentsMap = map.attachments[attachmentsName];
+ let skin = skeletonData.findSkin(attachmentsName);
+ for (let slotMapName in attachmentsMap) {
+ let slotMap = attachmentsMap[slotMapName];
+ let slotIndex = skeletonData.findSlot(slotMapName).index;
+ for (let attachmentMapName in slotMap) {
+ let attachmentMap = slotMap[attachmentMapName];
+ let attachment = skin.getAttachment(slotIndex, attachmentMapName);
- let attachment = skin.getAttachment(slotIndex, timelineName);
- let weighted = attachment.bones;
- let vertices = attachment.vertices;
- let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;
+ for (let timelineMapName in attachmentMap) {
+ let timelineMap = attachmentMap[timelineMapName];
+ let keyMap = timelineMap[0];
+ if (!keyMap) continue;
- let timeline = new DeformTimeline(timelineMap.length, timelineMap.length, slotIndex, attachment);
- let time = getValue(keyMap, "time", 0);
- for (let frame = 0, bezier = 0; ; frame++) {
- let deform: NumberArrayLike;
- let verticesValue: Array = getValue(keyMap, "vertices", null);
- if (!verticesValue)
- deform = weighted ? Utils.newFloatArray(deformLength) : vertices;
- else {
- deform = Utils.newFloatArray(deformLength);
- let start = getValue(keyMap, "offset", 0);
- Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length);
- if (scale != 1) {
- for (let i = start, n = i + verticesValue.length; i < n; i++)
- deform[i] *= scale;
+ if (timelineMapName == "deform") {
+ let weighted = attachment.bones;
+ let vertices = attachment.vertices;
+ let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;
+
+ let timeline = new DeformTimeline(timelineMap.length, timelineMap.length, slotIndex, attachment);
+ let time = getValue(keyMap, "time", 0);
+ for (let frame = 0, bezier = 0; ; frame++) {
+ let deform: NumberArrayLike;
+ let verticesValue: Array = getValue(keyMap, "vertices", null);
+ if (!verticesValue)
+ deform = weighted ? Utils.newFloatArray(deformLength) : vertices;
+ else {
+ deform = Utils.newFloatArray(deformLength);
+ let start = getValue(keyMap, "offset", 0);
+ Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length);
+ if (scale != 1) {
+ for (let i = start, n = i + verticesValue.length; i < n; i++)
+ deform[i] *= scale;
+ }
+ if (!weighted) {
+ for (let i = 0; i < deformLength; i++)
+ deform[i] += vertices[i];
+ }
+ }
+
+ timeline.setFrame(frame, time, deform);
+ let nextMap = timelineMap[frame + 1];
+ if (!nextMap) {
+ timeline.shrink(bezier);
+ break;
+ }
+ let time2 = getValue(nextMap, "time", 0);
+ let curve = keyMap.curve;
+ if (curve) bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, 0, 1, 1);
+ time = time2;
+ keyMap = nextMap;
}
- if (!weighted) {
- for (let i = 0; i < deformLength; i++)
- deform[i] += vertices[i];
+ timelines.push(timeline);
+ } else if (timelineMapName == "sequence") {
+ let timeline = new SequenceTimeline(timelineMap.length, slotIndex, attachment as unknown as HasTextureRegion);
+ let lastDelay = 0;
+ for (let frame = 0; frame < timelineMap.length; frame++) {
+ let delay = getValue(keyMap, "delay", lastDelay);
+ let time = getValue(keyMap, "time", 0);
+ let mode = SequenceMode[getValue(keyMap, "mode", "hold")] as unknown as number;
+ let index = getValue(keyMap, "index", 0);
+ timeline.setFrame(frame, time, mode, index, delay);
+ lastDelay = delay;
+ keyMap = timelineMap[frame + 1];
}
+ timelines.push(timeline);
}
-
- timeline.setFrame(frame, time, deform);
- let nextMap = timelineMap[frame + 1];
- if (!nextMap) {
- timeline.shrink(bezier);
- break;
- }
- let time2 = getValue(nextMap, "time", 0);
- let curve = keyMap.curve;
- if (curve) bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, 0, 1, 1);
- time = time2;
- keyMap = nextMap;
}
- timelines.push(timeline);
}
}
}
@@ -900,14 +935,14 @@ class LinkedMesh {
parent: string; skin: string;
slotIndex: number;
mesh: MeshAttachment;
- inheritDeform: boolean;
+ inheritTimeline: boolean;
constructor (mesh: MeshAttachment, skin: string, slotIndex: number, parent: string, inheritDeform: boolean) {
this.mesh = mesh;
this.skin = skin;
this.slotIndex = slotIndex;
this.parent = parent;
- this.inheritDeform = inheritDeform;
+ this.inheritTimeline = inheritDeform;
}
}
diff --git a/spine-ts/spine-core/src/Slot.ts b/spine-ts/spine-core/src/Slot.ts
index 32391728c..f36e95d39 100644
--- a/spine-ts/spine-core/src/Slot.ts
+++ b/spine-ts/spine-core/src/Slot.ts
@@ -53,10 +53,12 @@ export class Slot {
attachment: Attachment;
- private attachmentTime: number;
-
attachmentState: number;
+ /** The index of the texture region to display when the slot's attachment has a {@link Sequence}. -1 represents the
+ * {@link Sequence#getSetupIndex()}. */
+ sequenceIndex: number;
+
/** Values to deform the slot's attachment. For an unweighted mesh, the entries are local positions for each vertex. For a
* weighted mesh, the entries are an offset for each vertex which will be added to the mesh's local vertex positions.
*
@@ -83,28 +85,17 @@ export class Slot {
return this.attachment;
}
- /** Sets the slot's attachment and, if the attachment changed, resets {@link #attachmentTime} and clears the {@link #deform}.
- * The deform is not cleared if the old attachment has the same {@link VertexAttachment#getDeformAttachment()} as the specified
- * attachment.
- * @param attachment May be null. */
+ /** Sets the slot's attachment and, if the attachment changed, resets {@link #sequenceIndex} and clears the {@link #deform}.
+ * The deform is not cleared if the old attachment has the same {@link VertexAttachment#getTimelineAttachment()} as the
+ * specified attachment. */
setAttachment (attachment: Attachment) {
if (this.attachment == attachment) return;
if (!(attachment instanceof VertexAttachment) || !(this.attachment instanceof VertexAttachment)
- || (attachment).deformAttachment != (this.attachment).deformAttachment) {
+ || (attachment).timelineAttahment != (this.attachment).timelineAttahment) {
this.deform.length = 0;
}
this.attachment = attachment;
- this.attachmentTime = this.bone.skeleton.time;
- }
-
- setAttachmentTime (time: number) {
- this.attachmentTime = this.bone.skeleton.time - time;
- }
-
- /** The time that has elapsed since the last time the attachment was set or cleared. Relies on Skeleton
- * {@link Skeleton#time}. */
- getAttachmentTime (): number {
- return this.bone.skeleton.time - this.attachmentTime;
+ this.sequenceIndex = -1;
}
/** Sets this slot to the setup pose. */
diff --git a/spine-ts/spine-core/src/attachments/Attachment.ts b/spine-ts/spine-core/src/attachments/Attachment.ts
index 23ff93ce4..eb69c09b5 100644
--- a/spine-ts/spine-core/src/attachments/Attachment.ts
+++ b/spine-ts/spine-core/src/attachments/Attachment.ts
@@ -64,8 +64,9 @@ export abstract class VertexAttachment extends Attachment {
* {@link #computeWorldVertices()} using the `count` parameter. */
worldVerticesLength = 0;
- /** Deform keys for the deform attachment are also applied to this attachment. May be null if no deform keys should be applied. */
- deformAttachment: VertexAttachment = this;
+ /** Timelines for the timeline attachment are also applied to this attachment.
+ * May be null if no attachment-specific timelines should be applied. */
+ timelineAttahment: Attachment = this;
constructor (name: string) {
super(name);
@@ -155,6 +156,6 @@ export abstract class VertexAttachment extends Attachment {
attachment.vertices = null;
attachment.worldVerticesLength = this.worldVerticesLength;
- attachment.deformAttachment = this.deformAttachment;
+ attachment.timelineAttahment = this.timelineAttahment;
}
}
diff --git a/spine-ts/spine-core/src/attachments/AttachmentLoader.ts b/spine-ts/spine-core/src/attachments/AttachmentLoader.ts
index b92bc82e2..8166d807f 100644
--- a/spine-ts/spine-core/src/attachments/AttachmentLoader.ts
+++ b/spine-ts/spine-core/src/attachments/AttachmentLoader.ts
@@ -34,6 +34,7 @@ import { MeshAttachment } from "./MeshAttachment";
import { PathAttachment } from "./PathAttachment";
import { PointAttachment } from "./PointAttachment";
import { RegionAttachment } from "./RegionAttachment";
+import { Sequence } from "./Sequence";
/** The interface which can be implemented to customize creating and populating attachments.
*
@@ -41,10 +42,10 @@ import { RegionAttachment } from "./RegionAttachment";
* Runtimes Guide. */
export interface AttachmentLoader {
/** @return May be null to not load an attachment. */
- newRegionAttachment (skin: Skin, name: string, path: string): RegionAttachment;
+ newRegionAttachment (skin: Skin, name: string, path: string, sequence: Sequence): RegionAttachment;
/** @return May be null to not load an attachment. */
- newMeshAttachment (skin: Skin, name: string, path: string): MeshAttachment;
+ newMeshAttachment (skin: Skin, name: string, path: string, sequence: Sequence): MeshAttachment;
/** @return May be null to not load an attachment. */
newBoundingBoxAttachment (skin: Skin, name: string): BoundingBoxAttachment;
diff --git a/spine-ts/spine-core/src/attachments/HasTextureRegion.ts b/spine-ts/spine-core/src/attachments/HasTextureRegion.ts
new file mode 100644
index 000000000..b8ca7d42a
--- /dev/null
+++ b/spine-ts/spine-core/src/attachments/HasTextureRegion.ts
@@ -0,0 +1,50 @@
+/******************************************************************************
+ * Spine Runtimes License Agreement
+ * Last updated September 24, 2021. Replaces all prior versions.
+ *
+ * Copyright (c) 2013-2021, Esoteric Software LLC
+ *
+ * Integration of the Spine Runtimes into software or otherwise creating
+ * derivative works of the Spine Runtimes is permitted under the terms and
+ * conditions of Section 2 of the Spine Editor License Agreement:
+ * http://esotericsoftware.com/spine-editor-license
+ *
+ * Otherwise, it is permitted to integrate the Spine Runtimes into software
+ * or otherwise create derivative works of the Spine Runtimes (collectively,
+ * "Products"), provided that each user of the Products must obtain their own
+ * Spine Editor license and redistribution of the Products in any form must
+ * include this license and copyright notice.
+ *
+ * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
+ * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *****************************************************************************/
+
+import { TextureRegion } from "../Texture"
+import { Color } from "../Utils"
+import { Sequence } from "./Sequence"
+
+export interface HasTextureRegion {
+ /** The name used to find the {@link #region()}. */
+ path: string;
+
+ /** The region used to draw the attachment. After setting the region or if the region's properties are changed,
+ * {@link #updateRegion()} must be called. */
+ region: TextureRegion;
+
+ /** Updates any values the attachment calculates using the {@link #getRegion()}. Must be called after setting the
+ * {@link #getRegion()} or if the region's properties are changed. */
+ updateRegion (): void;
+
+ /** The color to tint the attachment. */
+ color: Color;
+
+ sequence: Sequence;
+}
\ No newline at end of file
diff --git a/spine-ts/spine-core/src/attachments/MeshAttachment.ts b/spine-ts/spine-core/src/attachments/MeshAttachment.ts
index b67325766..0da79f8f5 100644
--- a/spine-ts/spine-core/src/attachments/MeshAttachment.ts
+++ b/spine-ts/spine-core/src/attachments/MeshAttachment.ts
@@ -31,12 +31,15 @@ import { TextureRegion } from "../Texture";
import { TextureAtlasRegion } from "../TextureAtlas";
import { Color, NumberArrayLike, Utils } from "../Utils";
import { VertexAttachment, Attachment } from "./Attachment";
+import { HasTextureRegion } from "./HasTextureRegion";
+import { Sequence } from "./Sequence";
+import { Slot } from "../Slot";
/** An attachment that displays a textured mesh. A mesh has hull vertices and internal vertices within the hull. Holes are not
* supported. Each vertex has UVs (texture coordinates) and triangles are used to map an image on to the mesh.
*
* See [Mesh attachments](http://esotericsoftware.com/spine-meshes) in the Spine User Guide. */
-export class MeshAttachment extends VertexAttachment {
+export class MeshAttachment extends VertexAttachment implements HasTextureRegion {
region: TextureRegion;
/** The name of the texture region for this attachment. */
@@ -70,15 +73,18 @@ export class MeshAttachment extends VertexAttachment {
edges: Array;
private parentMesh: MeshAttachment;
+
+ sequence: Sequence;
+
tempColor = new Color(0, 0, 0, 0);
constructor (name: string) {
super(name);
}
- /** Calculates {@link #uvs} using {@link #regionUVs} and the {@link #region}. Must be called after changing the region UVs or
- * region. */
- updateUVs () {
+ /** Calculates {@link #uvs} using the {@link #regionUVs} and region. Must be called if the region, the region's properties, or
+ * the {@link #regionUVs} are changed. */
+ updateRegion () {
let regionUVs = this.regionUVs;
if (!this.uvs || this.uvs.length != regionUVs.length) this.uvs = Utils.newFloatArray(regionUVs.length);
let uvs = this.uvs;
@@ -175,6 +181,8 @@ export class MeshAttachment extends VertexAttachment {
Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length);
copy.hullLength = this.hullLength;
+ copy.sequence = this.sequence.copy();
+
// Nonessential.
if (this.edges) {
copy.edges = new Array(this.edges.length);
@@ -186,15 +194,20 @@ export class MeshAttachment extends VertexAttachment {
return copy;
}
+ computeWorldVertices (slot: Slot, start: number, count: number, worldVertices: NumberArrayLike, offset: number, stride: number) {
+ if (this.sequence != null) this.sequence.apply(slot, this);
+ super.computeWorldVertices(slot, start, count, worldVertices, offset, stride);
+ }
+
/** Returns a new mesh with the {@link #parentMesh} set to this mesh's parent mesh, if any, else to this mesh. **/
newLinkedMesh (): MeshAttachment {
let copy = new MeshAttachment(this.name);
copy.region = this.region;
copy.path = this.path;
copy.color.setFromColor(this.color);
- copy.deformAttachment = this.deformAttachment;
+ copy.timelineAttahment = this.timelineAttahment;
copy.setParentMesh(this.parentMesh ? this.parentMesh : this);
- copy.updateUVs();
+ if (copy.region != null) copy.updateRegion();
return copy;
}
}
diff --git a/spine-ts/spine-core/src/attachments/RegionAttachment.ts b/spine-ts/spine-core/src/attachments/RegionAttachment.ts
index 715f5f038..70d9598a1 100644
--- a/spine-ts/spine-core/src/attachments/RegionAttachment.ts
+++ b/spine-ts/spine-core/src/attachments/RegionAttachment.ts
@@ -31,11 +31,14 @@ import { Bone } from "../Bone";
import { TextureRegion } from "../Texture";
import { Color, NumberArrayLike, Utils } from "../Utils";
import { Attachment } from "./Attachment";
+import { HasTextureRegion } from "./HasTextureRegion";
+import { Sequence } from "./Sequence";
+import { Slot } from "../Slot";
/** An attachment that displays a textured quadrilateral.
*
* See [Region attachments](http://esotericsoftware.com/spine-regions) in the Spine User Guide. */
-export class RegionAttachment extends Attachment {
+export class RegionAttachment extends Attachment implements HasTextureRegion {
/** The local x translation. */
x = 0;
@@ -63,8 +66,9 @@ export class RegionAttachment extends Attachment {
/** The name of the texture region for this attachment. */
path: string;
- rendererObject: any;
+ private rendererObject: any;
region: TextureRegion;
+ sequence: Sequence;
/** For each of the 4 vertices, a pair of x,y values that is the local position of the vertex.
*
@@ -80,7 +84,7 @@ export class RegionAttachment extends Attachment {
}
/** Calculates the {@link #offset} using the region settings. Must be called after changing region settings. */
- updateOffset (): void {
+ updateRegion (): void {
let region = this.region;
let regionScaleX = this.width / this.region.originalWidth * this.scaleX;
let regionScaleY = this.height / this.region.originalHeight * this.scaleY;
@@ -109,10 +113,7 @@ export class RegionAttachment extends Attachment {
offset[5] = localY2Cos + localX2Sin;
offset[6] = localX2Cos - localYSin;
offset[7] = localYCos + localX2Sin;
- }
- setRegion (region: TextureRegion): void {
- this.region = region;
let uvs = this.uvs;
if (region.degrees == 90) {
uvs[2] = region.u;
@@ -135,14 +136,19 @@ export class RegionAttachment extends Attachment {
}
}
- /** Transforms the attachment's four vertices to world coordinates.
- *
- * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine
+ /** Transforms the attachment's four vertices to world coordinates. If the attachment has a {@link #sequence}, the region may
+ * be changed.
+ *
+ * See World transforms in the Spine
* Runtimes Guide.
- * @param worldVertices The output world vertices. Must have a length >= `offset` + 8.
- * @param offset The `worldVertices` index to begin writing values.
- * @param stride The number of `worldVertices` entries between the value pairs written. */
- computeWorldVertices (bone: Bone, worldVertices: NumberArrayLike, offset: number, stride: number) {
+ * @param worldVertices The output world vertices. Must have a length >= offset + 8.
+ * @param offset The worldVertices index to begin writing values.
+ * @param stride The number of worldVertices entries between the value pairs written. */
+ computeWorldVertices (slot: Slot, worldVertices: NumberArrayLike, offset: number, stride: number) {
+ if (this.sequence != null)
+ this.sequence.apply(slot, this);
+
+ let bone = slot.bone;
let vertexOffset = this.offset;
let x = bone.worldX, y = bone.worldY;
let a = bone.a, b = bone.b, c = bone.c, d = bone.d;
@@ -187,6 +193,7 @@ export class RegionAttachment extends Attachment {
Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8);
Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8);
copy.color.setFromColor(this.color);
+ copy.sequence = this.sequence.copy();
return copy;
}
diff --git a/spine-ts/spine-core/src/attachments/Sequence.ts b/spine-ts/spine-core/src/attachments/Sequence.ts
new file mode 100644
index 000000000..33e359b9b
--- /dev/null
+++ b/spine-ts/spine-core/src/attachments/Sequence.ts
@@ -0,0 +1,102 @@
+/******************************************************************************
+ * Spine Runtimes License Agreement
+ * Last updated September 24, 2021. Replaces all prior versions.
+ *
+ * Copyright (c) 2013-2021, Esoteric Software LLC
+ *
+ * Integration of the Spine Runtimes into software or otherwise creating
+ * derivative works of the Spine Runtimes is permitted under the terms and
+ * conditions of Section 2 of the Spine Editor License Agreement:
+ * http://esotericsoftware.com/spine-editor-license
+ *
+ * Otherwise, it is permitted to integrate the Spine Runtimes into software
+ * or otherwise create derivative works of the Spine Runtimes (collectively,
+ * "Products"), provided that each user of the Products must obtain their own
+ * Spine Editor license and redistribution of the Products in any form must
+ * include this license and copyright notice.
+ *
+ * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
+ * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *****************************************************************************/
+
+import { TextureRegion } from "../Texture";
+import { Slot } from "../Slot";
+import { HasTextureRegion } from "./HasTextureRegion";
+import { Utils } from "src";
+
+
+export class Sequence {
+ private static _nextID = 0;
+
+ id = Sequence.nextID();
+ regions: TextureRegion[];
+ start = 0;
+ digits = 0;
+ /** The index of the region to show for the setup pose. */
+ setupIndex = 0;
+
+ constructor (count: number) {
+ this.regions = new Array(count);
+ }
+
+ copy (): Sequence {
+ let copy = new Sequence(this.regions.length);
+ Utils.arrayCopy(this.regions, 0, copy.regions, 0, this.regions.length);
+ copy.start = this.start;
+ copy.digits = this.digits;
+ copy.setupIndex = this.setupIndex;
+ return copy;
+ }
+
+ apply (slot: Slot, attachment: HasTextureRegion) {
+ let index = slot.sequenceIndex;
+ if (index == -1) index = this.setupIndex;
+ if (index >= this.regions.length) index = this.regions.length - 1;
+ let region = this.regions[index];
+ if (attachment.region != region) {
+ attachment.region = region;
+ attachment.updateRegion();
+ }
+ }
+
+ getPath (basePath: string, index: number): string {
+ let result = basePath;
+ let frame = (this.start + index).toString();
+ for (let i = this.digits - frame.length; i > 0; i--)
+ result += "0";
+ result += frame;
+ return result;
+ }
+
+ private static nextID (): number {
+ return Sequence._nextID++;
+ }
+}
+
+export enum SequenceMode {
+ hold = 0,
+ once = 1,
+ loop = 2,
+ pingpong = 3,
+ onceReverse = 4,
+ loopReverse = 5,
+ pingpongReverse = 6
+}
+
+export const SequenceModeValues = [
+ SequenceMode.hold,
+ SequenceMode.once,
+ SequenceMode.loop,
+ SequenceMode.pingpong,
+ SequenceMode.onceReverse,
+ SequenceMode.loopReverse,
+ SequenceMode.pingpongReverse
+];
\ No newline at end of file
diff --git a/spine-ts/spine-player/example/assets/raptor-pma.png b/spine-ts/spine-player/example/assets/raptor-pma.png
index 409c293f7..6d0349772 100644
Binary files a/spine-ts/spine-player/example/assets/raptor-pma.png and b/spine-ts/spine-player/example/assets/raptor-pma.png differ
diff --git a/spine-ts/spine-player/example/assets/raptor-pro.json b/spine-ts/spine-player/example/assets/raptor-pro.json
index 10edfa6ff..d57e6965e 100644
--- a/spine-ts/spine-player/example/assets/raptor-pro.json
+++ b/spine-ts/spine-player/example/assets/raptor-pro.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "c1+xCfJH+TE",
- "spine": "4.0.31",
+ "hash": "cDRfwRDrCkA",
+ "spine": "4.1.04-beta",
"x": -809.16,
"y": -73.54,
"width": 1287.65,
@@ -879,7 +879,7 @@
},
"gun": {
"attachment": [
- { "time": 0.2333, "name": null }
+ { "time": 0.2333 }
]
}
},
@@ -1006,7 +1006,7 @@
},
"gun": {
"attachment": [
- { "name": null },
+ {},
{ "time": 0.3, "name": "gun-nohand" }
]
}
diff --git a/spine-ts/spine-player/example/assets/spineboy-pma.png b/spine-ts/spine-player/example/assets/spineboy-pma.png
index 88efd9876..b78b76f45 100644
Binary files a/spine-ts/spine-player/example/assets/spineboy-pma.png and b/spine-ts/spine-player/example/assets/spineboy-pma.png differ
diff --git a/spine-ts/spine-player/example/assets/spineboy-pro.skel b/spine-ts/spine-player/example/assets/spineboy-pro.skel
index 6f4f53ff6..45d5d9460 100644
Binary files a/spine-ts/spine-player/example/assets/spineboy-pro.skel and b/spine-ts/spine-player/example/assets/spineboy-pro.skel differ
diff --git a/spine-ts/spine-player/package.json b/spine-ts/spine-player/package.json
index 6ea467f76..d56ce08f6 100644
--- a/spine-ts/spine-player/package.json
+++ b/spine-ts/spine-player/package.json
@@ -1,6 +1,6 @@
{
"name": "@esotericsoftware/spine-player",
- "version": "4.0.14",
+ "version": "4.1.0",
"description": "The official Spine Runtimes for the web.",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@@ -30,6 +30,6 @@
},
"homepage": "https://github.com/esotericsoftware/spine-runtimes#readme",
"dependencies": {
- "@esotericsoftware/spine-webgl": "^4.0.13"
+ "@esotericsoftware/spine-webgl": "^4.1.0"
}
-}
+}
\ No newline at end of file
diff --git a/spine-ts/spine-threejs/example/assets/raptor-pro.json b/spine-ts/spine-threejs/example/assets/raptor-pro.json
index 10edfa6ff..d57e6965e 100644
--- a/spine-ts/spine-threejs/example/assets/raptor-pro.json
+++ b/spine-ts/spine-threejs/example/assets/raptor-pro.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "c1+xCfJH+TE",
- "spine": "4.0.31",
+ "hash": "cDRfwRDrCkA",
+ "spine": "4.1.04-beta",
"x": -809.16,
"y": -73.54,
"width": 1287.65,
@@ -879,7 +879,7 @@
},
"gun": {
"attachment": [
- { "time": 0.2333, "name": null }
+ { "time": 0.2333 }
]
}
},
@@ -1006,7 +1006,7 @@
},
"gun": {
"attachment": [
- { "name": null },
+ {},
{ "time": 0.3, "name": "gun-nohand" }
]
}
diff --git a/spine-ts/spine-threejs/example/assets/raptor.png b/spine-ts/spine-threejs/example/assets/raptor.png
index 9140cfc79..474f6316b 100644
Binary files a/spine-ts/spine-threejs/example/assets/raptor.png and b/spine-ts/spine-threejs/example/assets/raptor.png differ
diff --git a/spine-ts/spine-threejs/package.json b/spine-ts/spine-threejs/package.json
index 4b7de0e11..4b74fe5d1 100644
--- a/spine-ts/spine-threejs/package.json
+++ b/spine-ts/spine-threejs/package.json
@@ -1,6 +1,6 @@
{
"name": "@esotericsoftware/spine-threejs",
- "version": "4.0.14",
+ "version": "4.1.0",
"description": "The official Spine Runtimes for the web.",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@@ -32,6 +32,6 @@
"dependencies": {
"@types/three": "^0.131.0",
"three": "^0.132.0",
- "@esotericsoftware/spine-core": "^4.0.13"
+ "@esotericsoftware/spine-core": "^4.1.0"
}
-}
+}
\ No newline at end of file
diff --git a/spine-ts/spine-threejs/src/SkeletonMesh.ts b/spine-ts/spine-threejs/src/SkeletonMesh.ts
index 3135001f4..1716e83cf 100644
--- a/spine-ts/spine-threejs/src/SkeletonMesh.ts
+++ b/spine-ts/spine-threejs/src/SkeletonMesh.ts
@@ -176,7 +176,7 @@ export class SkeletonMesh extends THREE.Object3D {
attachmentColor = region.color;
vertices = this.vertices;
numFloats = vertexSize * 4;
- region.computeWorldVertices(slot.bone, vertices, 0, vertexSize);
+ region.computeWorldVertices(slot, vertices, 0, vertexSize);
triangles = SkeletonMesh.QUAD_TRIANGLES;
uvs = region.uvs;
texture = (region.region.renderObject).page.texture;
diff --git a/spine-ts/spine-webgl/example/assets/coin-pro.json b/spine-ts/spine-webgl/example/assets/coin-pro.json
index e0e3518a0..3b5cb6d61 100644
--- a/spine-ts/spine-webgl/example/assets/coin-pro.json
+++ b/spine-ts/spine-webgl/example/assets/coin-pro.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "svidebPqqeg",
- "spine": "4.0.31",
+ "hash": "5q2VQysgSd0",
+ "spine": "4.1.04-beta",
"x": -152.5,
"y": -151,
"width": 305,
diff --git a/spine-ts/spine-webgl/example/assets/coin-pro.skel b/spine-ts/spine-webgl/example/assets/coin-pro.skel
index fef208f02..5823f044b 100644
Binary files a/spine-ts/spine-webgl/example/assets/coin-pro.skel and b/spine-ts/spine-webgl/example/assets/coin-pro.skel differ
diff --git a/spine-ts/spine-webgl/example/assets/dragon-ess.json b/spine-ts/spine-webgl/example/assets/dragon-ess.json
new file mode 100644
index 000000000..a05d25168
--- /dev/null
+++ b/spine-ts/spine-webgl/example/assets/dragon-ess.json
@@ -0,0 +1,1079 @@
+{
+"skeleton": {
+ "hash": "aPoA1GjXkVI",
+ "spine": "4.1.04-beta",
+ "x": -366.31,
+ "y": -327.81,
+ "width": 660.39,
+ "height": 643,
+ "images": "./images/",
+ "audio": "././"
+},
+"bones": [
+ { "name": "root", "y": -176.12 },
+ { "name": "center", "parent": "root", "y": 176.12, "color": "ffe300ff" },
+ {
+ "name": "back",
+ "parent": "center",
+ "length": 115.38,
+ "rotation": 151.83,
+ "x": 16.04,
+ "y": 27.94,
+ "color": "ffe400ff"
+ },
+ {
+ "name": "chest",
+ "parent": "center",
+ "length": 31.24,
+ "rotation": 161.7,
+ "x": 52.53,
+ "y": 15.35,
+ "color": "ffe400ff"
+ },
+ {
+ "name": "neck",
+ "parent": "center",
+ "length": 41.37,
+ "rotation": 39.06,
+ "x": 64.76,
+ "y": 11.98,
+ "color": "ffe400ff"
+ },
+ {
+ "name": "chin",
+ "parent": "neck",
+ "length": 153.16,
+ "rotation": -69.07,
+ "x": 64.63,
+ "y": -6.99,
+ "color": "ffe400ff"
+ },
+ {
+ "name": "head",
+ "parent": "neck",
+ "length": 188.84,
+ "rotation": 8.07,
+ "x": 69.96,
+ "y": 2.5,
+ "color": "ffe400ff"
+ },
+ {
+ "name": "left-front-thigh",
+ "parent": "chest",
+ "length": 67.42,
+ "rotation": 138.94,
+ "x": -45.59,
+ "y": 7.93,
+ "color": "ff0000ff"
+ },
+ {
+ "name": "left-front-leg",
+ "parent": "left-front-thigh",
+ "length": 51.58,
+ "rotation": 43.36,
+ "x": 67.42,
+ "y": 0.03,
+ "color": "ff0000ff"
+ },
+ {
+ "name": "left-front-toe1",
+ "parent": "left-front-leg",
+ "length": 51.45,
+ "rotation": -98.01,
+ "x": 45.54,
+ "y": 2.43,
+ "color": "ff0000ff"
+ },
+ {
+ "name": "left-front-toe2",
+ "parent": "left-front-leg",
+ "length": 61.98,
+ "rotation": -55.26,
+ "x": 51.58,
+ "y": -0.13,
+ "color": "ff0000ff"
+ },
+ {
+ "name": "left-front-toe3",
+ "parent": "left-front-leg",
+ "length": 45.65,
+ "rotation": -11.14,
+ "x": 54.19,
+ "y": 0.6,
+ "scaleX": 1.135,
+ "color": "ff0000ff"
+ },
+ {
+ "name": "left-front-toe4",
+ "parent": "left-front-leg",
+ "length": 53.47,
+ "rotation": 19.43,
+ "x": 50.61,
+ "y": 7.09,
+ "scaleX": 1.135,
+ "color": "ff0000ff"
+ },
+ {
+ "name": "right-rear-thigh",
+ "parent": "back",
+ "length": 123.47,
+ "rotation": 104.88,
+ "x": 65.31,
+ "y": 59.89,
+ "color": "29ff00ff"
+ },
+ {
+ "name": "left-rear-thigh",
+ "parent": "right-rear-thigh",
+ "length": 88.06,
+ "rotation": 28.35,
+ "x": -8.59,
+ "y": 30.19,
+ "color": "ff0000ff"
+ },
+ {
+ "name": "left-rear-leg",
+ "parent": "left-rear-thigh",
+ "length": 103.74,
+ "rotation": -122.41,
+ "x": 96.04,
+ "y": -0.97,
+ "color": "ff0000ff"
+ },
+ {
+ "name": "left-wing",
+ "parent": "chest",
+ "length": 301.12,
+ "rotation": -75.51,
+ "x": -7.25,
+ "y": -24.66,
+ "color": "ff0000ff"
+ },
+ {
+ "name": "right-front-thigh",
+ "parent": "chest",
+ "length": 81.64,
+ "rotation": 67.97,
+ "x": -10.89,
+ "y": 28.25,
+ "color": "29ff00ff"
+ },
+ {
+ "name": "right-front-leg",
+ "parent": "right-front-thigh",
+ "length": 66.53,
+ "rotation": 92.7,
+ "x": 83.05,
+ "y": -0.31,
+ "color": "29ff00ff"
+ },
+ {
+ "name": "right-front-toe1",
+ "parent": "right-front-leg",
+ "length": 46.66,
+ "rotation": 8.59,
+ "x": 70.03,
+ "y": 5.31,
+ "color": "29ff00ff"
+ },
+ {
+ "name": "right-front-toe2",
+ "parent": "right-front-leg",
+ "length": 53.67,
+ "rotation": -35.02,
+ "x": 66.53,
+ "y": 0.34,
+ "color": "29ff00ff"
+ },
+ {
+ "name": "right-front-toe3",
+ "parent": "right-front-leg",
+ "length": 58.39,
+ "rotation": -74.67,
+ "x": 62.1,
+ "y": -0.79,
+ "color": "29ff00ff"
+ },
+ {
+ "name": "right-rear-leg",
+ "parent": "right-rear-thigh",
+ "length": 91.06,
+ "rotation": -129.04,
+ "x": 123.47,
+ "y": -0.27,
+ "color": "29ff00ff"
+ },
+ {
+ "name": "right-rear-toe1",
+ "parent": "right-rear-leg",
+ "length": 95,
+ "rotation": 141.98,
+ "x": 90.07,
+ "y": 2.12,
+ "color": "29ff00ff"
+ },
+ {
+ "name": "right-rear-toe2",
+ "parent": "right-rear-leg",
+ "length": 99.29,
+ "rotation": 125.32,
+ "x": 89.6,
+ "y": 1.52,
+ "color": "29ff00ff"
+ },
+ {
+ "name": "right-rear-toe3",
+ "parent": "right-rear-leg",
+ "length": 103.46,
+ "rotation": 112.27,
+ "x": 91.06,
+ "y": -0.35,
+ "color": "29ff00ff"
+ },
+ {
+ "name": "right-wing",
+ "parent": "head",
+ "length": 359.5,
+ "rotation": 83.21,
+ "x": -74.68,
+ "y": 20.91,
+ "color": "29ff00ff"
+ },
+ {
+ "name": "tail1",
+ "parent": "back",
+ "length": 65.65,
+ "rotation": 44.32,
+ "x": 115.38,
+ "y": -0.2,
+ "color": "ffe400ff"
+ },
+ {
+ "name": "tail2",
+ "parent": "tail1",
+ "length": 54.5,
+ "rotation": 12,
+ "x": 65.65,
+ "y": 0.23,
+ "color": "ffe400ff"
+ },
+ {
+ "name": "tail3",
+ "parent": "tail2",
+ "length": 41.78,
+ "rotation": 1.8,
+ "x": 54.5,
+ "y": 0.37,
+ "color": "ffe400ff"
+ },
+ {
+ "name": "tail4",
+ "parent": "tail3",
+ "length": 34.19,
+ "rotation": -1.8,
+ "x": 41.78,
+ "y": 0.16,
+ "color": "ffe400ff"
+ },
+ {
+ "name": "tail5",
+ "parent": "tail4",
+ "length": 32.33,
+ "rotation": -3.15,
+ "x": 34.19,
+ "y": -0.19,
+ "color": "ffe400ff"
+ },
+ {
+ "name": "tail6",
+ "parent": "tail5",
+ "length": 80.08,
+ "rotation": -29.55,
+ "x": 32.33,
+ "y": -0.23,
+ "color": "ffe400ff"
+ }
+],
+"slots": [
+ { "name": "left-rear-leg", "bone": "left-rear-leg", "attachment": "left-rear-leg" },
+ { "name": "left-rear-thigh", "bone": "left-rear-thigh", "attachment": "left-rear-thigh" },
+ { "name": "left-wing", "bone": "left-wing", "attachment": "left-wing" },
+ { "name": "tail6", "bone": "tail6", "attachment": "tail06" },
+ { "name": "tail5", "bone": "tail5", "attachment": "tail05" },
+ { "name": "tail4", "bone": "tail4", "attachment": "tail04" },
+ { "name": "tail3", "bone": "tail3", "attachment": "tail03" },
+ { "name": "tail2", "bone": "tail2", "attachment": "tail02" },
+ { "name": "tail1", "bone": "tail1", "attachment": "tail01" },
+ { "name": "back", "bone": "back", "attachment": "back" },
+ { "name": "left-front-thigh", "bone": "left-front-thigh", "attachment": "left-front-thigh" },
+ { "name": "left-front-leg", "bone": "left-front-leg", "attachment": "left-front-leg" },
+ { "name": "left-front-toe1", "bone": "left-front-toe1", "attachment": "front-toe-a" },
+ { "name": "left-front-toe4", "bone": "left-front-toe4", "attachment": "front-toe-b" },
+ { "name": "left-front-toe3", "bone": "left-front-toe3", "attachment": "front-toe-b" },
+ { "name": "left-front-toe2", "bone": "left-front-toe2", "attachment": "front-toe-b" },
+ { "name": "chest", "bone": "chest", "attachment": "chest" },
+ { "name": "right-rear-toe1", "bone": "right-rear-toe1", "attachment": "right-rear-toe" },
+ { "name": "right-rear-toe2", "bone": "right-rear-toe2", "attachment": "right-rear-toe" },
+ { "name": "right-rear-toe3", "bone": "right-rear-toe3", "attachment": "right-rear-toe" },
+ { "name": "right-rear-leg", "bone": "right-rear-leg", "attachment": "right-rear-leg" },
+ { "name": "right-rear-thigh", "bone": "right-rear-thigh", "attachment": "right-rear-thigh" },
+ { "name": "right-front-toe1", "bone": "right-front-toe1", "attachment": "front-toe-b" },
+ { "name": "right-front-thigh", "bone": "right-front-thigh", "attachment": "right-front-thigh" },
+ { "name": "right-front-leg", "bone": "right-front-leg", "attachment": "right-front-leg" },
+ { "name": "right-front-toe2", "bone": "right-front-toe2", "attachment": "front-toe-b" },
+ { "name": "right-front-toe3", "bone": "right-front-toe3", "attachment": "front-toe-b" },
+ { "name": "chin", "bone": "chin", "attachment": "chin" },
+ { "name": "right-wing", "bone": "right-wing", "attachment": "right-wing" },
+ { "name": "head", "bone": "head", "attachment": "head" },
+ { "name": "thiagobrayner", "bone": "root", "attachment": "thiagobrayner" }
+],
+"skins": [
+ {
+ "name": "default",
+ "attachments": {
+ "back": {
+ "back": { "x": 35.85, "y": 19.99, "rotation": -151.83, "width": 190, "height": 185 }
+ },
+ "chest": {
+ "chest": { "x": -14.6, "y": 24.79, "rotation": -161.7, "width": 136, "height": 122 }
+ },
+ "chin": {
+ "chin": { "x": 66.55, "y": 7.32, "rotation": 30.01, "width": 214, "height": 146 }
+ },
+ "head": {
+ "head": { "x": 76.69, "y": 32.21, "rotation": -47.13, "width": 296, "height": 260 }
+ },
+ "left-front-leg": {
+ "left-front-leg": { "x": 14.69, "y": 0.49, "rotation": 16, "width": 84, "height": 57 }
+ },
+ "left-front-thigh": {
+ "left-front-thigh": { "x": 27.66, "y": -11.59, "rotation": 58.66, "width": 84, "height": 72 }
+ },
+ "left-front-toe1": {
+ "front-toe-a": { "x": 31.93, "y": 0.61, "rotation": 109.56, "width": 29, "height": 50 }
+ },
+ "left-front-toe2": {
+ "front-toe-b": { "x": 26.84, "y": -4.95, "rotation": 109.51, "width": 56, "height": 57 }
+ },
+ "left-front-toe3": {
+ "front-toe-b": {
+ "x": 18.22,
+ "y": -7.22,
+ "scaleX": 0.8811,
+ "scaleY": 0.9409,
+ "rotation": 99.71,
+ "width": 56,
+ "height": 57
+ }
+ },
+ "left-front-toe4": {
+ "front-toe-b": { "x": 23.21, "y": -11.69, "scaleX": 0.8811, "rotation": 79.89, "width": 56, "height": 57 }
+ },
+ "left-rear-leg": {
+ "left-rear-leg": { "x": 67.29, "y": 12.63, "rotation": -162.65, "width": 206, "height": 177 }
+ },
+ "left-rear-thigh": {
+ "left-rear-thigh": { "x": 56.03, "y": 27.39, "rotation": 74.94, "width": 91, "height": 149 }
+ },
+ "left-wing": {
+ "left-wing": {
+ "x": -36.32,
+ "y": -44.53,
+ "rotation": -83.7,
+ "width": 264,
+ "height": 589,
+ "sequence": { "count": 9, "digits": 2 }
+ }
+ },
+ "right-front-leg": {
+ "right-front-leg": { "x": 17.8, "y": 4.23, "rotation": 37.63, "width": 101, "height": 89 }
+ },
+ "right-front-thigh": {
+ "right-front-thigh": { "x": 35.29, "y": 2.11, "rotation": 130.33, "width": 108, "height": 108 }
+ },
+ "right-front-toe1": {
+ "front-toe-b": { "x": 24.5, "y": -2.61, "rotation": 104.18, "width": 56, "height": 57 }
+ },
+ "right-front-toe2": {
+ "front-toe-b": { "x": 26.39, "y": 1.17, "rotation": 104.58, "width": 56, "height": 57 }
+ },
+ "right-front-toe3": {
+ "front-toe-b": { "x": 30.67, "y": -0.07, "rotation": 112.3, "width": 56, "height": 57 }
+ },
+ "right-rear-leg": {
+ "right-rear-leg": { "x": 60.88, "y": -5.73, "rotation": -127.67, "width": 116, "height": 100 }
+ },
+ "right-rear-thigh": {
+ "right-rear-thigh": { "x": 53.25, "y": 12.58, "rotation": 103.29, "width": 91, "height": 149 }
+ },
+ "right-rear-toe1": {
+ "right-rear-toe": { "x": 54.76, "y": -5.72, "rotation": 134.79, "width": 109, "height": 77 }
+ },
+ "right-rear-toe2": {
+ "right-rear-toe": { "x": 57.03, "y": -7.23, "rotation": 134.43, "width": 109, "height": 77 }
+ },
+ "right-rear-toe3": {
+ "right-rear-toe": { "x": 47.46, "y": -7.64, "rotation": 134.34, "width": 109, "height": 77 }
+ },
+ "right-wing": {
+ "right-wing": {
+ "x": 35.09,
+ "y": 78.11,
+ "rotation": -130.34,
+ "width": 365,
+ "height": 643,
+ "sequence": { "count": 9, "digits": 2 }
+ }
+ },
+ "tail1": {
+ "tail01": { "x": 22.6, "y": -4.5, "rotation": 163.85, "width": 120, "height": 153 }
+ },
+ "tail2": {
+ "tail02": { "x": 18.12, "y": -1.75, "rotation": 151.85, "width": 95, "height": 120 }
+ },
+ "tail3": {
+ "tail03": { "x": 16.94, "y": -2.01, "rotation": 150.04, "width": 73, "height": 92 }
+ },
+ "tail4": {
+ "tail04": { "x": 15.35, "y": -2.18, "rotation": 151.85, "width": 56, "height": 71 }
+ },
+ "tail5": {
+ "tail05": { "x": 15.06, "y": -3.57, "rotation": 155, "width": 52, "height": 59 }
+ },
+ "tail6": {
+ "tail06": { "x": 28.02, "y": -16.83, "rotation": -175.45, "width": 95, "height": 68 }
+ },
+ "thiagobrayner": {
+ "thiagobrayner": { "y": -95, "width": 350, "height": 31 }
+ }
+ }
+ }
+],
+"animations": {
+ "flying": {
+ "bones": {
+ "back": {
+ "rotate": [
+ {
+ "curve": [ 0.042, 2.86, 0.143, 10.41 ]
+ },
+ {
+ "time": 0.1667,
+ "value": 11.59,
+ "curve": [ 0.245, 15.58, 0.383, 22.41 ]
+ },
+ {
+ "time": 0.5,
+ "value": 22.4,
+ "curve": [ 0.593, 22.39, 0.75, -3.18 ]
+ },
+ {
+ "time": 0.8333,
+ "value": -3.18,
+ "curve": [ 0.875, -3.18, 0.942, -2.19 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "neck": {
+ "rotate": [
+ {
+ "curve": [ 0.092, -0.1, 0.304, -21.22 ]
+ },
+ {
+ "time": 0.3333,
+ "value": -23.16,
+ "curve": [ 0.386, -26.7, 0.442, -31.89 ]
+ },
+ {
+ "time": 0.5333,
+ "value": -31.93,
+ "curve": [ 0.644, -31.97, 0.888, -0.1 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "right-rear-leg": {
+ "rotate": [
+ {
+ "curve": [ 0.054, -7.16, 0.227, -10.75 ]
+ },
+ {
+ "time": 0.3333,
+ "value": -10.75,
+ "curve": [ 0.417, -10.75, 0.583, 23.32 ]
+ },
+ {
+ "time": 0.6667,
+ "value": 23.32,
+ "curve": [ 0.792, 23.32, 0.881, 13.94 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "right-rear-toe3": {
+ "rotate": [
+ {
+ "value": -7.31,
+ "curve": [ 0.051, -3.08, 0.097, 0 ]
+ },
+ {
+ "time": 0.1333,
+ "curve": [ 0.258, 0, 0.508, -36.06 ]
+ },
+ {
+ "time": 0.6333,
+ "value": -36.06,
+ "curve": [ 0.723, -36.06, 0.875, -17.83 ]
+ },
+ { "time": 1, "value": -7.31 }
+ ]
+ },
+ "right-rear-toe2": {
+ "rotate": [
+ {
+ "value": -1.41,
+ "curve": [ 0.025, -0.6, 0.047, 0 ]
+ },
+ {
+ "time": 0.0667,
+ "curve": [ 0.192, 0, 0.442, -20.32 ]
+ },
+ {
+ "time": 0.5667,
+ "value": -20.32,
+ "curve": [ 0.673, -20.32, 0.868, -5.88 ]
+ },
+ { "time": 1, "value": -1.41 }
+ ]
+ },
+ "right-rear-toe1": {
+ "rotate": [
+ {
+ "curve": [ 0.125, 0, 0.375, -18.71 ]
+ },
+ {
+ "time": 0.5,
+ "value": -18.71,
+ "curve": [ 0.625, -18.71, 0.875, 0 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "head": {
+ "rotate": [
+ {
+ "curve": [ 0.125, 0, 0.375, 1.04 ]
+ },
+ {
+ "time": 0.5,
+ "value": 1.04,
+ "curve": [ 0.625, 1.04, 0.875, 0 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "chin": {
+ "rotate": [
+ {
+ "curve": [ 0.136, -10.78, 0.217, -12.01 ]
+ },
+ {
+ "time": 0.3333,
+ "value": -11.71,
+ "curve": [ 0.443, -11.42, 0.508, 21.91 ]
+ },
+ {
+ "time": 0.6667,
+ "value": 22.01,
+ "curve": [ 0.847, 22.13, 0.95, 5.91 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "left-front-thigh": {
+ "rotate": [
+ {
+ "value": -0.02,
+ "curve": [ 0.068, -0.02, 0.348, -32.09 ]
+ },
+ {
+ "time": 0.5,
+ "value": -32.02,
+ "curve": [ 0.653, -31.95, 0.906, 0 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "right-front-thigh": {
+ "rotate": [
+ {
+ "curve": [ 0.053, -5.52, 0.125, -12.96 ]
+ },
+ {
+ "time": 0.1667,
+ "value": -12.96,
+ "curve": [ 0.25, -12.96, 0.417, 16.2 ]
+ },
+ {
+ "time": 0.5,
+ "value": 16.2,
+ "curve": [ 0.625, 16.2, 0.866, 9.48 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "left-front-leg": {
+ "rotate": [
+ {
+ "curve": [ 0.09, -12.24, 0.131, -21.37 ]
+ },
+ {
+ "time": 0.2,
+ "value": -21.49,
+ "curve": [ 0.319, -21.94, 0.5, 77.25 ]
+ },
+ {
+ "time": 0.6,
+ "value": 77.25,
+ "curve": [ 0.7, 77.25, 0.908, 12.37 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "left-front-toe1": {
+ "rotate": [
+ {
+ "curve": [ 0.071, -4.48, 0.2, -12.68 ]
+ },
+ {
+ "time": 0.2667,
+ "value": -12.68,
+ "curve": [ 0.375, -12.68, 0.592, 6.99 ]
+ },
+ {
+ "time": 0.7,
+ "value": 6.99,
+ "curve": [ 0.775, 6.99, 0.904, 3.55 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "left-front-toe2": {
+ "scale": [
+ {
+ "curve": [ 0.125, 1, 0.375, 1.331, 0.125, 1, 0.375, 1.029 ]
+ },
+ {
+ "time": 0.5,
+ "x": 1.331,
+ "y": 1.029,
+ "curve": [ 0.625, 1.331, 0.875, 1, 0.625, 1.029, 0.875, 1 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "left-front-toe4": {
+ "rotate": [
+ {
+ "curve": [ 0.125, 0, 0.375, 26.52 ]
+ },
+ {
+ "time": 0.5,
+ "value": 26.52,
+ "curve": [ 0.625, 26.52, 0.875, 0 ]
+ },
+ { "time": 1 }
+ ],
+ "scale": [
+ {
+ "curve": [ 0.125, 1, 0.375, 1.211, 0.125, 1, 0.375, 0.993 ]
+ },
+ {
+ "time": 0.5,
+ "x": 1.211,
+ "y": 0.993,
+ "curve": [ 0.625, 1.211, 0.875, 1, 0.625, 0.993, 0.875, 1 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "left-front-toe3": {
+ "rotate": [
+ {
+ "curve": [ 0.125, 0, 0.375, 16.99 ]
+ },
+ {
+ "time": 0.5,
+ "value": 16.99,
+ "curve": [ 0.625, 16.99, 0.875, 0 ]
+ },
+ { "time": 1 }
+ ],
+ "scale": [
+ {
+ "curve": [ 0.125, 1, 0.375, 1.355, 0.125, 1, 0.375, 1.008 ]
+ },
+ {
+ "time": 0.5,
+ "x": 1.355,
+ "y": 1.008,
+ "curve": [ 0.625, 1.355, 0.875, 1, 0.625, 1.008, 0.875, 1 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "right-front-leg": {
+ "rotate": [
+ {
+ "curve": [ 0.11, -8.79, 0.179, -18.3 ]
+ },
+ {
+ "time": 0.2667,
+ "value": -18.31,
+ "curve": [ 0.352, -18.33, 0.55, 15.48 ]
+ },
+ {
+ "time": 0.6333,
+ "value": 15.48,
+ "curve": [ 0.758, 15.48, 0.875, 7.9 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "right-front-toe1": {
+ "rotate": [
+ {
+ "curve": [ 0.042, 0, 0.147, 8.28 ]
+ },
+ {
+ "time": 0.1667,
+ "value": 10.52,
+ "curve": [ 0.238, 18.41, 0.406, 35.06 ]
+ },
+ {
+ "time": 0.5,
+ "value": 34.84,
+ "curve": [ 0.577, 34.84, 0.669, 29.65 ]
+ },
+ {
+ "time": 0.7667,
+ "value": 20.24,
+ "curve": [ 0.852, 11.97, 0.941, 0 ]
+ },
+ { "time": 1 }
+ ],
+ "scale": [
+ {
+ "curve": [ 0.125, 1, 0.375, 1.412, 0.125, 1, 0.375, 1 ]
+ },
+ {
+ "time": 0.5,
+ "x": 1.412,
+ "curve": [ 0.625, 1.412, 0.875, 1, 0.625, 1, 0.875, 1 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "right-front-toe2": {
+ "rotate": [
+ {
+ "curve": [ 0.042, 0, 0.125, 24.7 ]
+ },
+ {
+ "time": 0.1667,
+ "value": 24.7,
+ "curve": [ 0.25, 24.7, 0.417, 7.35 ]
+ },
+ {
+ "time": 0.5,
+ "value": 7.35,
+ "curve": [ 0.544, 7.35, 0.671, 33.55 ]
+ },
+ {
+ "time": 0.7333,
+ "value": 32.36,
+ "curve": [ 0.853, 30.19, 0.919, 0 ]
+ },
+ { "time": 1 }
+ ],
+ "scale": [
+ {
+ "curve": [ 0.125, 1, 0.375, 1.407, 0.125, 1, 0.375, 1.058 ]
+ },
+ {
+ "time": 0.5,
+ "x": 1.407,
+ "y": 1.058,
+ "curve": [ 0.625, 1.407, 0.875, 1, 0.625, 1.058, 0.875, 1 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "right-front-toe3": {
+ "rotate": [
+ {
+ "curve": [ 0.033, 0, 0.1, 11.01 ]
+ },
+ {
+ "time": 0.1333,
+ "value": 11.01,
+ "curve": [ 0.208, 11.01, 0.358, -5.41 ]
+ },
+ {
+ "time": 0.4333,
+ "value": -5.41,
+ "curve": [ 0.508, -5.41, 0.658, 20.3 ]
+ },
+ {
+ "time": 0.7333,
+ "value": 20.3,
+ "curve": [ 0.8, 20.3, 0.933, 0 ]
+ },
+ { "time": 1 }
+ ],
+ "scale": [
+ {
+ "curve": [ 0.125, 1, 0.375, 1.33, 0.125, 1, 0.375, 1.182 ]
+ },
+ {
+ "time": 0.5,
+ "x": 1.33,
+ "y": 1.182,
+ "curve": [ 0.625, 1.33, 0.875, 1, 0.625, 1.182, 0.875, 1 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "right-wing": {
+ "rotate": [
+ {
+ "value": -9.59,
+ "curve": [ 0.131, -9.59, 0.191, 22.41 ]
+ },
+ {
+ "time": 0.3333,
+ "value": 22.81,
+ "curve": [ 0.417, 23.05, 0.533, 7.5 ]
+ },
+ {
+ "time": 0.5667,
+ "value": 2.07,
+ "curve": [ 0.588, -1.48, 0.639, -8.35 ]
+ },
+ {
+ "time": 0.7,
+ "value": -8.29,
+ "curve": [ 0.743, -8.24, 0.792, 5.28 ]
+ },
+ {
+ "time": 0.8333,
+ "value": 5.02,
+ "curve": [ 0.904, 4.59, 0.957, -9.72 ]
+ },
+ { "time": 1, "value": -9.59 }
+ ]
+ },
+ "left-wing": {
+ "rotate": [
+ {
+ "curve": [ 0.039, 0, 0.084, -21.1 ]
+ },
+ {
+ "time": 0.1333,
+ "value": -21.1,
+ "curve": [ 0.292, -21.1, 0.505, 4.34 ]
+ },
+ {
+ "time": 0.6333,
+ "value": 4.48,
+ "curve": [ 0.679, 4.48, 0.699, -6.03 ]
+ },
+ {
+ "time": 0.7667,
+ "value": -5.95,
+ "curve": [ 0.857, -5.84, 0.936, 0 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "left-rear-leg": {
+ "rotate": [
+ {
+ "curve": [ 0.08, 5.97, 0.25, 15.82 ]
+ },
+ {
+ "time": 0.3333,
+ "value": 15.82,
+ "curve": [ 0.425, 15.82, 0.608, -17.33 ]
+ },
+ {
+ "time": 0.7,
+ "value": -17.33,
+ "curve": [ 0.775, -17.33, 0.871, -8.98 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "center": {
+ "rotate": [
+ {
+ "curve": [ 0.072, 6.07, 0.213, 17.69 ]
+ },
+ {
+ "time": 0.3333,
+ "value": 17.69,
+ "curve": [ 0.454, 17.68, 0.583, -15 ]
+ },
+ {
+ "time": 0.6667,
+ "value": -15,
+ "curve": [ 0.804, -15, 0.966, -3.62 ]
+ },
+ { "time": 1 }
+ ],
+ "translate": [
+ {
+ "curve": [ 0.125, 0, 0.375, -0.01, 0.162, 0, 0.288, 144.81 ]
+ },
+ {
+ "time": 0.5,
+ "x": -0.01,
+ "y": 144.61,
+ "curve": [ 0.625, -0.01, 0.875, 0, 0.718, 145.5, 0.832, 0 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "tail1": {
+ "rotate": [
+ {
+ "value": -1.88,
+ "curve": [ 0.125, -1.88, 0.375, -67.4 ]
+ },
+ {
+ "time": 0.5,
+ "value": -67.4,
+ "curve": [ 0.625, -67.4, 0.875, -1.88 ]
+ },
+ { "time": 1, "value": -1.88 }
+ ]
+ },
+ "tail2": {
+ "rotate": [
+ {
+ "value": -27.45,
+ "curve": [ 0.125, -27.45, 0.375, 2.68 ]
+ },
+ {
+ "time": 0.5,
+ "value": 2.68,
+ "curve": [ 0.625, 2.68, 0.875, -27.45 ]
+ },
+ { "time": 1, "value": -27.45 }
+ ]
+ },
+ "tail3": {
+ "rotate": [
+ {
+ "value": -7.63,
+ "curve": [ 0.125, -7.63, 0.375, 24.54 ]
+ },
+ {
+ "time": 0.5,
+ "value": 24.54,
+ "curve": [ 0.625, 24.54, 0.875, -7.63 ]
+ },
+ { "time": 1, "value": -7.63 }
+ ]
+ },
+ "tail4": {
+ "rotate": [
+ {
+ "value": -10.04,
+ "curve": [ 0.125, -10.04, 0.375, 1.03 ]
+ },
+ {
+ "time": 0.5,
+ "value": 1.03,
+ "curve": [ 0.625, 1.03, 0.875, -10.04 ]
+ },
+ { "time": 1, "value": -10.04 }
+ ]
+ },
+ "tail5": {
+ "rotate": [
+ {
+ "value": -11.26,
+ "curve": [ 0.152, -11.21, 0.334, 9.91 ]
+ },
+ {
+ "time": 0.5,
+ "value": 9.93,
+ "curve": [ 0.662, 9.95, 0.844, -11.17 ]
+ },
+ { "time": 1, "value": -11.26 }
+ ]
+ },
+ "tail6": {
+ "rotate": [
+ {
+ "value": 26.68,
+ "curve": [ 0.194, 26.72, 0.328, 35.84 ]
+ },
+ {
+ "time": 0.5,
+ "value": 35.84,
+ "curve": [ 0.678, 35.84, 0.818, 26.62 ]
+ },
+ { "time": 1, "value": 26.68 }
+ ]
+ },
+ "right-rear-thigh": {
+ "rotate": [
+ {
+ "curve": [ 0.055, -6.4, 0.166, -22.66 ]
+ },
+ {
+ "time": 0.2667,
+ "value": -22.66,
+ "curve": [ 0.384, -22.66, 0.517, 19.08 ]
+ },
+ {
+ "time": 0.6333,
+ "value": 19.32,
+ "curve": [ 0.746, 19.56, 0.91, 9.17 ]
+ },
+ { "time": 1 }
+ ]
+ }
+ },
+ "attachments": {
+ "default": {
+ "left-wing": {
+ "left-wing": {
+ "sequence": [
+ { "mode": "loop", "delay": 0.0667 },
+ { "time": 0.6 },
+ { "time": 0.7333, "mode": "loop", "index": 1 },
+ { "time": 0.8, "mode": "loop", "index": 2, "delay": 0.0333 },
+ { "time": 0.9667, "index": 7 }
+ ]
+ }
+ },
+ "right-wing": {
+ "right-wing": {
+ "sequence": [
+ { "mode": "loop", "delay": 0.0667 },
+ { "time": 0.6 },
+ { "time": 0.7333, "mode": "loop", "index": 1 },
+ { "time": 0.8, "mode": "loop", "index": 2, "delay": 0.0333 },
+ { "time": 0.9667, "index": 7 }
+ ]
+ }
+ }
+ }
+ }
+ }
+}
+}
\ No newline at end of file
diff --git a/spine-ts/spine-webgl/example/assets/dragon-ess.skel b/spine-ts/spine-webgl/example/assets/dragon-ess.skel
new file mode 100644
index 000000000..d2695272c
Binary files /dev/null and b/spine-ts/spine-webgl/example/assets/dragon-ess.skel differ
diff --git a/spine-ts/spine-webgl/example/assets/dragon-pma.atlas b/spine-ts/spine-webgl/example/assets/dragon-pma.atlas
new file mode 100644
index 000000000..10acc3e16
--- /dev/null
+++ b/spine-ts/spine-webgl/example/assets/dragon-pma.atlas
@@ -0,0 +1,129 @@
+dragon-pma.png
+ size: 1024, 1024
+ filter: Linear, Linear
+ pma: true
+back
+ bounds: 564, 534, 190, 185
+chest
+ bounds: 2, 645, 136, 122
+chin
+ bounds: 140, 619, 214, 146
+front-toe-a
+ bounds: 2, 862, 29, 50
+ rotate: 90
+front-toe-b
+ bounds: 467, 835, 56, 57
+ rotate: 90
+head
+ bounds: 756, 398, 296, 260
+ rotate: 90
+left-front-leg
+ bounds: 599, 834, 84, 57
+left-front-thigh
+ bounds: 782, 819, 84, 72
+left-rear-leg
+ bounds: 356, 558, 206, 177
+left-rear-thigh
+ bounds: 216, 767, 91, 149
+ rotate: 90
+left-wing01
+ bounds: 2, 268, 264, 589
+ rotate: 90
+left-wing02
+ bounds: 2, 2, 264, 589
+ rotate: 90
+right-front-leg
+ bounds: 113, 769, 101, 89
+right-front-thigh
+ bounds: 758, 709, 108, 108
+right-rear-leg
+ bounds: 640, 721, 116, 100
+right-rear-thigh
+ bounds: 367, 742, 91, 149
+ rotate: 90
+right-rear-toe
+ bounds: 2, 781, 109, 77
+tail01
+ bounds: 868, 696, 120, 153
+ rotate: 90
+tail02
+ bounds: 518, 737, 95, 120
+ rotate: 90
+tail03
+ bounds: 868, 818, 73, 92
+ rotate: 90
+tail04
+ bounds: 526, 835, 56, 71
+ rotate: 90
+tail05
+ bounds: 406, 839, 52, 59
+ rotate: 90
+tail06
+ bounds: 685, 823, 95, 68
+thiagobrayner
+ bounds: 54, 860, 350, 31
+
+dragon-pma_2.png
+ size: 1024, 1024
+ filter: Linear, Linear
+ pma: true
+left-wing03
+ bounds: 2, 534, 264, 589
+ rotate: 90
+left-wing04
+ bounds: 2, 268, 264, 589
+ rotate: 90
+left-wing05
+ bounds: 593, 209, 264, 589
+left-wing06
+ bounds: 2, 2, 264, 589
+ rotate: 90
+
+dragon-pma_3.png
+ size: 1024, 1024
+ filter: Linear, Linear
+ pma: true
+left-wing07
+ bounds: 2, 694, 264, 589
+ rotate: 90
+left-wing08
+ bounds: 2, 428, 264, 589
+ rotate: 90
+left-wing09
+ bounds: 593, 369, 264, 589
+right-wing01
+ bounds: 2, 2, 365, 643
+ rotate: 90
+
+dragon-pma_4.png
+ size: 1024, 1024
+ filter: Linear, Linear
+ pma: true
+right-wing02
+ bounds: 2, 369, 365, 643
+right-wing03
+ bounds: 369, 369, 365, 643
+right-wing04
+ bounds: 2, 2, 365, 643
+ rotate: 90
+
+dragon-pma_5.png
+ size: 1024, 1024
+ filter: Linear, Linear
+ pma: true
+right-wing05
+ bounds: 2, 369, 365, 643
+right-wing06
+ bounds: 369, 369, 365, 643
+right-wing07
+ bounds: 2, 2, 365, 643
+ rotate: 90
+
+dragon-pma_6.png
+ size: 1024, 1024
+ filter: Linear, Linear
+ pma: true
+right-wing08
+ bounds: 2, 2, 365, 643
+right-wing09
+ bounds: 369, 2, 365, 643
diff --git a/spine-ts/spine-webgl/example/assets/dragon-pma.png b/spine-ts/spine-webgl/example/assets/dragon-pma.png
new file mode 100644
index 000000000..bc49bf978
Binary files /dev/null and b/spine-ts/spine-webgl/example/assets/dragon-pma.png differ
diff --git a/spine-ts/spine-webgl/example/assets/dragon-pma_2.png b/spine-ts/spine-webgl/example/assets/dragon-pma_2.png
new file mode 100644
index 000000000..084bc5e93
Binary files /dev/null and b/spine-ts/spine-webgl/example/assets/dragon-pma_2.png differ
diff --git a/spine-ts/spine-webgl/example/assets/dragon-pma_3.png b/spine-ts/spine-webgl/example/assets/dragon-pma_3.png
new file mode 100644
index 000000000..17276d4e6
Binary files /dev/null and b/spine-ts/spine-webgl/example/assets/dragon-pma_3.png differ
diff --git a/spine-ts/spine-webgl/example/assets/dragon-pma_4.png b/spine-ts/spine-webgl/example/assets/dragon-pma_4.png
new file mode 100644
index 000000000..f0b9d721b
Binary files /dev/null and b/spine-ts/spine-webgl/example/assets/dragon-pma_4.png differ
diff --git a/spine-ts/spine-webgl/example/assets/dragon-pma_5.png b/spine-ts/spine-webgl/example/assets/dragon-pma_5.png
new file mode 100644
index 000000000..f98942cba
Binary files /dev/null and b/spine-ts/spine-webgl/example/assets/dragon-pma_5.png differ
diff --git a/spine-ts/spine-webgl/example/assets/dragon-pma_6.png b/spine-ts/spine-webgl/example/assets/dragon-pma_6.png
new file mode 100644
index 000000000..ebbfe9285
Binary files /dev/null and b/spine-ts/spine-webgl/example/assets/dragon-pma_6.png differ
diff --git a/spine-ts/spine-webgl/example/assets/goblins-pro.json b/spine-ts/spine-webgl/example/assets/goblins-pro.json
index c0ad3ec35..d99f95fb5 100644
--- a/spine-ts/spine-webgl/example/assets/goblins-pro.json
+++ b/spine-ts/spine-webgl/example/assets/goblins-pro.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "PtTAK+zF95I",
- "spine": "4.0.31",
+ "hash": "5+0u5UUVwqA",
+ "spine": "4.1.04-beta",
"x": -134.12,
"y": -3.28,
"width": 266.94,
@@ -571,7 +571,7 @@
"eyes": {
"attachment": [
{ "time": 0.7, "name": "eyes-closed" },
- { "time": 0.8, "name": null }
+ { "time": 0.8 }
]
}
},
@@ -899,309 +899,331 @@
]
}
},
- "deform": {
+ "attachments": {
"default": {
"right-hand-item": {
- "dagger": [
- {
- "offset": 26,
- "vertices": [ 2.34755, 0.1447 ],
- "curve": [ 0.125, 0, 0.375, 1 ]
- },
- {
- "time": 0.5,
- "offset": 8,
- "vertices": [ -1.19415, 4.31532, 0.07279, 6.41351, 1.66048, 6.18883, 1.75233, 3.59555 ],
- "curve": [ 0.625, 0, 0.875, 1 ]
- },
- {
- "time": 1,
- "offset": 26,
- "vertices": [ 2.34755, 0.1447 ]
- }
- ]
+ "dagger": {
+ "deform": [
+ {
+ "offset": 26,
+ "vertices": [ 2.34755, 0.1447 ],
+ "curve": [ 0.125, 0, 0.375, 1 ]
+ },
+ {
+ "time": 0.5,
+ "offset": 8,
+ "vertices": [ -1.19415, 4.31532, 0.07279, 6.41351, 1.66048, 6.18883, 1.75233, 3.59555 ],
+ "curve": [ 0.625, 0, 0.875, 1 ]
+ },
+ {
+ "time": 1,
+ "offset": 26,
+ "vertices": [ 2.34755, 0.1447 ]
+ }
+ ]
+ }
}
},
"goblin": {
"head": {
- "head": [
- {
- "curve": [ 0.127, 0, 0.15, 1 ]
- },
- {
- "time": 0.2,
- "vertices": [ -10.97827, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08392, -1.08534, 0.08392, -1.08534, 0.08392, 0, 0, -2.22325, 2.66465, -4.83295, 2.70085, -5.70553, -0.51941, -3.15962, -1.61502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64742, 0.81612, -11.82286, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08392 ],
- "curve": [ 0.242, 0, 0.325, 1 ]
- },
- {
- "time": 0.3667,
- "vertices": [ 10.69276, 4.05949, 3.66373, 1.85427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09018, 1.47305, 0.09018, 1.47305, 0.09018, 0, 0, 2.69653, -0.22738, 3.77135, 0.11418, 3.6893, 1.55352, 2.49595, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45881, -3.9113, 9.19594, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09018 ],
- "curve": [ 0.574, 0, 0.617, 1 ]
- },
- {
- "time": 0.7,
- "vertices": [ -10.97827, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17551, -0.17183, -1.17551, -0.17183, -1.17551, -0.17183, 0, 0, -2.22325, 2.66465, -4.83295, 2.70085, -5.70553, -0.51941, -3.15962, -1.61502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64742, 0.81612, -11.82286, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17551, -0.17183 ],
- "curve": [ 0.742, 0, 0.825, 1 ]
- },
- {
- "time": 0.8667,
- "vertices": [ 10.69276, 4.05949, 3.66373, 1.85427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446, 0.38687, 0.08446, 0.38687, 0.08446, 0, 0, 2.69653, -0.22738, 3.77135, 0.11418, 3.6893, 1.55352, 2.49595, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45881, -3.9113, 9.19594, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446 ],
- "curve": [ 0.9, 0, 0.967, 1 ]
- },
- { "time": 1 }
- ]
+ "head": {
+ "deform": [
+ {
+ "curve": [ 0.127, 0, 0.15, 1 ]
+ },
+ {
+ "time": 0.2,
+ "vertices": [ -10.97827, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08392, -1.08534, 0.08392, -1.08534, 0.08392, 0, 0, -2.22325, 2.66465, -4.83295, 2.70085, -5.70553, -0.51941, -3.15962, -1.61502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64742, 0.81612, -11.82286, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08392 ],
+ "curve": [ 0.242, 0, 0.325, 1 ]
+ },
+ {
+ "time": 0.3667,
+ "vertices": [ 10.69276, 4.05949, 3.66373, 1.85427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09018, 1.47305, 0.09018, 1.47305, 0.09018, 0, 0, 2.69653, -0.22738, 3.77135, 0.11418, 3.6893, 1.55352, 2.49595, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45881, -3.9113, 9.19594, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09018 ],
+ "curve": [ 0.574, 0, 0.617, 1 ]
+ },
+ {
+ "time": 0.7,
+ "vertices": [ -10.97827, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17551, -0.17183, -1.17551, -0.17183, -1.17551, -0.17183, 0, 0, -2.22325, 2.66465, -4.83295, 2.70085, -5.70553, -0.51941, -3.15962, -1.61502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64742, 0.81612, -11.82286, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17551, -0.17183 ],
+ "curve": [ 0.742, 0, 0.825, 1 ]
+ },
+ {
+ "time": 0.8667,
+ "vertices": [ 10.69276, 4.05949, 3.66373, 1.85427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446, 0.38687, 0.08446, 0.38687, 0.08446, 0, 0, 2.69653, -0.22738, 3.77135, 0.11418, 3.6893, 1.55352, 2.49595, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45881, -3.9113, 9.19594, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446 ],
+ "curve": [ 0.9, 0, 0.967, 1 ]
+ },
+ { "time": 1 }
+ ]
+ }
},
"left-foot": {
- "left-foot": [
- {
- "offset": 8,
- "vertices": [ 3.69298, 2.37573, -7.16969, 18.79733, -12.78162, 14.7778, -12.75776, 6.50514, -3.13476, 1.98906, -0.44402, 0.36629, 0, 0, -3.80085, 2.98474 ]
- },
- { "time": 0.1333 },
- {
- "time": 0.2333,
- "offset": 8,
- "vertices": [ -3.96073, -2.34594, -5.80446, -12.47629, -2.2313, -12.99038, 2.02942, -9.1036, 0, 0, 0, 0, 0, 0, -1.35254, -5.2883 ]
- },
- {
- "time": 0.3667,
- "offset": 8,
- "vertices": [ 0.66505, 0.33548, 0.33902, 2.69014, -0.48171, 2.54524, -1.13593, 1.38562, 0, 0, 0, 0, 0, 0, -0.11908, 0.79273 ]
- },
- { "time": 0.5, "curve": "stepped" },
- { "time": 0.6333 },
- {
- "time": 0.7333,
- "offset": 8,
- "vertices": [ -2.97738, 9.40254, -6.91661, 19.92794, -10.55287, 18.41085, -12.37161, 12.38473, -4.72607, 6.30799, 0, 0, -1.48902, 4.88944, -7.06773, 10.70102 ]
- },
- {
- "time": 0.8333,
- "offset": 6,
- "vertices": [ 1.05319, 1.56362, -2.52723, 7.9974, -5.52031, 17.14137, -8.93317, 15.79635, -10.73748, 10.22056, -4.23801, 5.36992, 0, 0, 0, 0, -5.83148, 8.55532 ]
- },
- {
- "time": 1,
- "offset": 8,
- "vertices": [ 3.69298, 2.37573, -7.16969, 18.79733, -12.78162, 14.7778, -12.75776, 6.50514, -3.13476, 1.98906, -0.44402, 0.36629, 0, 0, -3.80085, 2.98474 ]
- }
- ]
+ "left-foot": {
+ "deform": [
+ {
+ "offset": 8,
+ "vertices": [ 3.69298, 2.37573, -7.16969, 18.79733, -12.78162, 14.7778, -12.75776, 6.50514, -3.13476, 1.98906, -0.44402, 0.36629, 0, 0, -3.80085, 2.98474 ]
+ },
+ { "time": 0.1333 },
+ {
+ "time": 0.2333,
+ "offset": 8,
+ "vertices": [ -3.96073, -2.34594, -5.80446, -12.47629, -2.2313, -12.99038, 2.02942, -9.1036, 0, 0, 0, 0, 0, 0, -1.35254, -5.2883 ]
+ },
+ {
+ "time": 0.3667,
+ "offset": 8,
+ "vertices": [ 0.66505, 0.33548, 0.33902, 2.69014, -0.48171, 2.54524, -1.13593, 1.38562, 0, 0, 0, 0, 0, 0, -0.11908, 0.79273 ]
+ },
+ { "time": 0.5, "curve": "stepped" },
+ { "time": 0.6333 },
+ {
+ "time": 0.7333,
+ "offset": 8,
+ "vertices": [ -2.97738, 9.40254, -6.91661, 19.92794, -10.55287, 18.41085, -12.37161, 12.38473, -4.72607, 6.30799, 0, 0, -1.48902, 4.88944, -7.06773, 10.70102 ]
+ },
+ {
+ "time": 0.8333,
+ "offset": 6,
+ "vertices": [ 1.05319, 1.56362, -2.52723, 7.9974, -5.52031, 17.14137, -8.93317, 15.79635, -10.73748, 10.22056, -4.23801, 5.36992, 0, 0, 0, 0, -5.83148, 8.55532 ]
+ },
+ {
+ "time": 1,
+ "offset": 8,
+ "vertices": [ 3.69298, 2.37573, -7.16969, 18.79733, -12.78162, 14.7778, -12.75776, 6.50514, -3.13476, 1.98906, -0.44402, 0.36629, 0, 0, -3.80085, 2.98474 ]
+ }
+ ]
+ }
},
"pelvis": {
- "pelvis": [
- {},
- {
- "time": 0.1333,
- "offset": 6,
- "vertices": [ -0.6899, -4.13284 ]
- },
- {
- "time": 0.3333,
- "offset": 6,
- "vertices": [ -1.04945, -3.10477 ]
- },
- {
- "time": 0.7,
- "offset": 6,
- "vertices": [ -1.4245, -6.30617 ]
- },
- {
- "time": 0.8667,
- "offset": 6,
- "vertices": [ -1.13542, -1.79036 ]
- },
- { "time": 1 }
- ]
+ "pelvis": {
+ "deform": [
+ {},
+ {
+ "time": 0.1333,
+ "offset": 6,
+ "vertices": [ -0.6899, -4.13284 ]
+ },
+ {
+ "time": 0.3333,
+ "offset": 6,
+ "vertices": [ -1.04945, -3.10477 ]
+ },
+ {
+ "time": 0.7,
+ "offset": 6,
+ "vertices": [ -1.4245, -6.30617 ]
+ },
+ {
+ "time": 0.8667,
+ "offset": 6,
+ "vertices": [ -1.13542, -1.79036 ]
+ },
+ { "time": 1 }
+ ]
+ }
},
"right-foot": {
- "right-foot": [
- {},
- {
- "time": 0.1333,
- "offset": 2,
- "vertices": [ -2.81259, 2.63115, -2.35238, 3.89441, -1.99921, 4.8639, -0.93273, 5.57982, -0.48886, 5.09855, -0.34813, 3.42912, -0.17446, 1.36899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31305, 1.91372, -1.32986, 3.65703 ]
- },
- {
- "time": 0.2333,
- "offset": 2,
- "vertices": [ -6.39088, 6.41246, -7.74575, 8.27192, -7.02471, 11.35894, -4.03471, 13.93454, -2.50399, 12.62963, -1.46125, 7.58915, -0.17446, 1.36899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84766, 2.61216, -4.53956, 7.92358 ]
- },
- {
- "time": 0.3,
- "offset": 2,
- "vertices": [ -8.27185, 6.68822, -9.29764, 10.13797, -8.62231, 14.7134, -4.5863, 18.81939, -2.20304, 17.10709, -0.07795, 9.9046, 2.54452, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94625, 2.38008, -4.59399, 10.01888 ]
- },
- {
- "time": 0.3667,
- "offset": 2,
- "vertices": [ -10.47684, 9.44176, -13.36883, 12.40983, -14.32569, 16.94392, -9.24463, 23.55674, -5.51712, 21.51378, -1.19582, 11.53193, 2.54452, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14848, 2.29389, -6.63419, 11.37127 ]
- },
- {
- "time": 0.5,
- "offset": 2,
- "vertices": [ -5.42474, 4.36854, -10.59004, 7.04468, -11.64251, 11.55845, -6.19665, 20.12806, -1.45498, 18.05411, 4.8662, 6.41679, 2.81463, 0.27601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96412, 4.9483 ]
- },
- { "time": 0.6333 },
- {
- "time": 0.7333,
- "offset": 4,
- "vertices": [ 1.31462, -6.84099, -0.87905, -12.54479, -5.9851, -14.08368, -7.15892, -11.63194, -5.6792, -4.83545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06164, -6.93844 ]
- },
- {
- "time": 0.8,
- "offset": 4,
- "vertices": [ 0.65731, -3.4205, -0.43953, -6.2724, -2.99255, -7.04184, -3.57946, -5.81597, -2.8396, -2.41772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79688, -1.28021, 0, 0, 0, 0, -1.03082, -3.46922 ]
- },
- { "time": 0.8667 }
- ]
+ "right-foot": {
+ "deform": [
+ {},
+ {
+ "time": 0.1333,
+ "offset": 2,
+ "vertices": [ -2.81259, 2.63115, -2.35238, 3.89441, -1.99921, 4.8639, -0.93273, 5.57982, -0.48886, 5.09855, -0.34813, 3.42912, -0.17446, 1.36899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31305, 1.91372, -1.32986, 3.65703 ]
+ },
+ {
+ "time": 0.2333,
+ "offset": 2,
+ "vertices": [ -6.39088, 6.41246, -7.74575, 8.27192, -7.02471, 11.35894, -4.03471, 13.93454, -2.50399, 12.62963, -1.46125, 7.58915, -0.17446, 1.36899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84766, 2.61216, -4.53956, 7.92358 ]
+ },
+ {
+ "time": 0.3,
+ "offset": 2,
+ "vertices": [ -8.27185, 6.68822, -9.29764, 10.13797, -8.62231, 14.7134, -4.5863, 18.81939, -2.20304, 17.10709, -0.07795, 9.9046, 2.54452, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94625, 2.38008, -4.59399, 10.01888 ]
+ },
+ {
+ "time": 0.3667,
+ "offset": 2,
+ "vertices": [ -10.47684, 9.44176, -13.36883, 12.40983, -14.32569, 16.94392, -9.24463, 23.55674, -5.51712, 21.51378, -1.19582, 11.53193, 2.54452, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14848, 2.29389, -6.63419, 11.37127 ]
+ },
+ {
+ "time": 0.5,
+ "offset": 2,
+ "vertices": [ -5.42474, 4.36854, -10.59004, 7.04468, -11.64251, 11.55845, -6.19665, 20.12806, -1.45498, 18.05411, 4.8662, 6.41679, 2.81463, 0.27601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96412, 4.9483 ]
+ },
+ { "time": 0.6333 },
+ {
+ "time": 0.7333,
+ "offset": 4,
+ "vertices": [ 1.31462, -6.84099, -0.87905, -12.54479, -5.9851, -14.08368, -7.15892, -11.63194, -5.6792, -4.83545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06164, -6.93844 ]
+ },
+ {
+ "time": 0.8,
+ "offset": 4,
+ "vertices": [ 0.65731, -3.4205, -0.43953, -6.2724, -2.99255, -7.04184, -3.57946, -5.81597, -2.8396, -2.41772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79688, -1.28021, 0, 0, 0, 0, -1.03082, -3.46922 ]
+ },
+ { "time": 0.8667 }
+ ]
+ }
},
"right-hand": {
- "right-hand": [
- {
- "offset": 4,
- "vertices": [ -1.48417, 0.34736, 0, 0, 1.31152, 0.08085, 1.60296, 0.09882, 0.13673, 0.15471, 0, 0, 0, 0, -0.72862, -0.0449 ]
- },
- { "time": 0.5 },
- {
- "time": 1,
- "offset": 4,
- "vertices": [ -1.48417, 0.34736, 0, 0, 1.31152, 0.08085, 1.60296, 0.09882, 0.13673, 0.15471, 0, 0, 0, 0, -0.72862, -0.0449 ]
- }
- ]
+ "right-hand": {
+ "deform": [
+ {
+ "offset": 4,
+ "vertices": [ -1.48417, 0.34736, 0, 0, 1.31152, 0.08085, 1.60296, 0.09882, 0.13673, 0.15471, 0, 0, 0, 0, -0.72862, -0.0449 ]
+ },
+ { "time": 0.5 },
+ {
+ "time": 1,
+ "offset": 4,
+ "vertices": [ -1.48417, 0.34736, 0, 0, 1.31152, 0.08085, 1.60296, 0.09882, 0.13673, 0.15471, 0, 0, 0, 0, -0.72862, -0.0449 ]
+ }
+ ]
+ }
},
"right-lower-leg": {
- "right-lower-leg": [
- {},
- {
- "time": 0.6,
- "offset": 6,
- "vertices": [ 1.80396, -1.56553 ]
- },
- { "time": 1 }
- ]
+ "right-lower-leg": {
+ "deform": [
+ {},
+ {
+ "time": 0.6,
+ "offset": 6,
+ "vertices": [ 1.80396, -1.56553 ]
+ },
+ { "time": 1 }
+ ]
+ }
},
"right-upper-leg": {
- "right-upper-leg": [
- {
- "vertices": [ -6.03857, -1.46325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34685, -1.93102, -1.86047, -5.05266, -2.5014, -3.09985 ]
- },
- { "time": 0.3333 },
- {
- "time": 0.8667,
- "offset": 14,
- "vertices": [ 0.13425, -2.35378, -1.33318, -5.99573, -1.35862, -4.43324 ]
- },
- {
- "time": 1,
- "vertices": [ -6.03857, -1.46325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34685, -1.93102, -1.86047, -5.05266, -2.5014, -3.09985 ]
- }
- ]
+ "right-upper-leg": {
+ "deform": [
+ {
+ "vertices": [ -6.03857, -1.46325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34685, -1.93102, -1.86047, -5.05266, -2.5014, -3.09985 ]
+ },
+ { "time": 0.3333 },
+ {
+ "time": 0.8667,
+ "offset": 14,
+ "vertices": [ 0.13425, -2.35378, -1.33318, -5.99573, -1.35862, -4.43324 ]
+ },
+ {
+ "time": 1,
+ "vertices": [ -6.03857, -1.46325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34685, -1.93102, -1.86047, -5.05266, -2.5014, -3.09985 ]
+ }
+ ]
+ }
},
"torso": {
- "torso": [
- {
- "offset": 2,
- "vertices": [ 0.24821, 2.86673, 0.24821, 2.86673, 0.24821, 2.86673, 0.24821, 2.86673, 0.24821, 2.86673, 0.24821, 2.86673, -1.24131, 2.62652, -2.47492, 0.71183, -0.26363, -0.5308, 0.24821, 2.86673, 0.24821, 2.86673, 0, 0, 0, 0, 0, 0, 0, 0, 1.34461, 0.25215, 0.24821, 2.86673, 0.82507, 1.61798, 0.24821, 2.86673, 0, 0, -1.86431, -0.4326, 0.24821, 2.86673 ]
- },
- {
- "time": 0.1333,
- "offset": 2,
- "vertices": [ 0.35589, 4.10914, 0.35589, 4.10914, 0.35589, 4.10914, 0.35589, 4.10914, 0.35589, 4.10914, 0.35589, 4.10914, 1.66908, 3.51187, -0.62355, 2.47979, 1.1045, 3.49684, -1.09009, 6.08429, 0.35589, 4.10914, 0, 0, 0, 0, 0, 0, 0, 0, 3.01291, 0.15693, 0.35589, 4.10914, -1.11398, 3.7954, 0.35589, 4.10914, 0, 0, -2.96167, 0.55563, -2.20741, 4.40587 ]
- },
- {
- "time": 0.3,
- "offset": 2,
- "vertices": [ 0.2884, 3.32948, 0.2884, 3.32948, 0.2884, 3.32948, 0.2884, 3.32948, 0.2884, 3.32948, 0.2884, 3.32948, 6.32601, 0.19387, 7.84315, 1.94837, 7.08587, 3.64119, 4.52343, 4.46961, 0.2884, 3.32948, 0, 0, 0, 0, 0, 0, 0, 0, 4.36416, -1.83876, 0.2884, 3.32948, 4.2925, 3.60194, 0.2884, 3.32948, 0, 0, 3.72601, -0.19338, 0.2884, 3.32948 ]
- },
- {
- "time": 0.5,
- "offset": 2,
- "vertices": [ 0.3133, 3.61659, 0.3133, 3.61659, 0.3133, 3.61659, 0.3133, 3.61659, 0.3133, 3.61659, 0.3133, 3.61659, 2.57273, 2.74457, 2.88831, 3.04797, 3.48442, 3.04655, 1.80035, 4.609, 0.3133, 3.61659, 0, 0, 0, 0, 0, 0, 0, 0, 3.53782, -0.82203, 0.3133, 3.61659, 1.80022, 3.63246, 0.3133, 3.61659, 0, 0, 0.62718, 0.33564, -1.22467, 3.79463 ]
- },
- {
- "time": 0.6333,
- "offset": 2,
- "vertices": [ 0.44398, 5.125, 0.44398, 5.125, 0.44398, 5.125, 0.44398, 5.125, 0.44398, 5.125, 0.44398, 5.125, 1.19401, 3.60798, -0.53546, 3.49565, 1.1926, 4.5127, -1.002, 7.10015, 0.44398, 5.125, 0, 0, 0, 0, 0, 0, 0, 0, 3.101, 1.17278, 0.44398, 5.125, -1.02589, 4.81126, 0.44398, 5.125, 0, 0, -2.87358, 1.57149, -2.11931, 5.42173 ]
- },
- {
- "time": 0.8667,
- "offset": 2,
- "vertices": [ 0.30385, 3.50647, 0.30385, 3.50647, 0.30385, 3.50647, 0.30385, 3.50647, 0.30385, 3.50647, 0.30385, 3.50647, 0.92587, 2.24385, 0.68874, 1.29945, 3.55433, 3.00604, 2.71494, 5.89962, 0.30385, 3.50647, 0, 0, 0, 0, 0, 0, 0, 0, 1.96775, 0.40548, 0.30385, 3.50647, 2.6104, 2.3545, 0.30385, 3.50647, 0, 0, 0.22709, -0.12851, -0.62826, 3.61437 ]
- },
- {
- "time": 1,
- "offset": 2,
- "vertices": [ 0.32802, 3.78826, 0.32802, 3.78826, 0.32802, 3.78826, 0.32802, 3.78826, 0.32802, 3.78826, 0.32802, 3.78826, -1.1615, 3.54805, -2.39511, 1.63336, -0.18382, 0.39073, 0.32802, 3.78826, 0.32802, 3.78826, 0, 0, 0, 0, 0, 0, 0, 0, 1.42442, 1.17368, 0.32802, 3.78826, 0.90488, 2.53951, 0.32802, 3.78826, 0, 0, -1.7845, 0.48894, 0.32802, 3.78826 ]
- }
- ]
+ "torso": {
+ "deform": [
+ {
+ "offset": 2,
+ "vertices": [ 0.24821, 2.86673, 0.24821, 2.86673, 0.24821, 2.86673, 0.24821, 2.86673, 0.24821, 2.86673, 0.24821, 2.86673, -1.24131, 2.62652, -2.47492, 0.71183, -0.26363, -0.5308, 0.24821, 2.86673, 0.24821, 2.86673, 0, 0, 0, 0, 0, 0, 0, 0, 1.34461, 0.25215, 0.24821, 2.86673, 0.82507, 1.61798, 0.24821, 2.86673, 0, 0, -1.86431, -0.4326, 0.24821, 2.86673 ]
+ },
+ {
+ "time": 0.1333,
+ "offset": 2,
+ "vertices": [ 0.35589, 4.10914, 0.35589, 4.10914, 0.35589, 4.10914, 0.35589, 4.10914, 0.35589, 4.10914, 0.35589, 4.10914, 1.66908, 3.51187, -0.62355, 2.47979, 1.1045, 3.49684, -1.09009, 6.08429, 0.35589, 4.10914, 0, 0, 0, 0, 0, 0, 0, 0, 3.01291, 0.15693, 0.35589, 4.10914, -1.11398, 3.7954, 0.35589, 4.10914, 0, 0, -2.96167, 0.55563, -2.20741, 4.40587 ]
+ },
+ {
+ "time": 0.3,
+ "offset": 2,
+ "vertices": [ 0.2884, 3.32948, 0.2884, 3.32948, 0.2884, 3.32948, 0.2884, 3.32948, 0.2884, 3.32948, 0.2884, 3.32948, 6.32601, 0.19387, 7.84315, 1.94837, 7.08587, 3.64119, 4.52343, 4.46961, 0.2884, 3.32948, 0, 0, 0, 0, 0, 0, 0, 0, 4.36416, -1.83876, 0.2884, 3.32948, 4.2925, 3.60194, 0.2884, 3.32948, 0, 0, 3.72601, -0.19338, 0.2884, 3.32948 ]
+ },
+ {
+ "time": 0.5,
+ "offset": 2,
+ "vertices": [ 0.3133, 3.61659, 0.3133, 3.61659, 0.3133, 3.61659, 0.3133, 3.61659, 0.3133, 3.61659, 0.3133, 3.61659, 2.57273, 2.74457, 2.88831, 3.04797, 3.48442, 3.04655, 1.80035, 4.609, 0.3133, 3.61659, 0, 0, 0, 0, 0, 0, 0, 0, 3.53782, -0.82203, 0.3133, 3.61659, 1.80022, 3.63246, 0.3133, 3.61659, 0, 0, 0.62718, 0.33564, -1.22467, 3.79463 ]
+ },
+ {
+ "time": 0.6333,
+ "offset": 2,
+ "vertices": [ 0.44398, 5.125, 0.44398, 5.125, 0.44398, 5.125, 0.44398, 5.125, 0.44398, 5.125, 0.44398, 5.125, 1.19401, 3.60798, -0.53546, 3.49565, 1.1926, 4.5127, -1.002, 7.10015, 0.44398, 5.125, 0, 0, 0, 0, 0, 0, 0, 0, 3.101, 1.17278, 0.44398, 5.125, -1.02589, 4.81126, 0.44398, 5.125, 0, 0, -2.87358, 1.57149, -2.11931, 5.42173 ]
+ },
+ {
+ "time": 0.8667,
+ "offset": 2,
+ "vertices": [ 0.30385, 3.50647, 0.30385, 3.50647, 0.30385, 3.50647, 0.30385, 3.50647, 0.30385, 3.50647, 0.30385, 3.50647, 0.92587, 2.24385, 0.68874, 1.29945, 3.55433, 3.00604, 2.71494, 5.89962, 0.30385, 3.50647, 0, 0, 0, 0, 0, 0, 0, 0, 1.96775, 0.40548, 0.30385, 3.50647, 2.6104, 2.3545, 0.30385, 3.50647, 0, 0, 0.22709, -0.12851, -0.62826, 3.61437 ]
+ },
+ {
+ "time": 1,
+ "offset": 2,
+ "vertices": [ 0.32802, 3.78826, 0.32802, 3.78826, 0.32802, 3.78826, 0.32802, 3.78826, 0.32802, 3.78826, 0.32802, 3.78826, -1.1615, 3.54805, -2.39511, 1.63336, -0.18382, 0.39073, 0.32802, 3.78826, 0.32802, 3.78826, 0, 0, 0, 0, 0, 0, 0, 0, 1.42442, 1.17368, 0.32802, 3.78826, 0.90488, 2.53951, 0.32802, 3.78826, 0, 0, -1.7845, 0.48894, 0.32802, 3.78826 ]
+ }
+ ]
+ }
},
"undie-straps": {
- "undie-straps": [
- {
- "offset": 2,
- "vertices": [ -1.77697, 0.5476, -0.96145, -1.03793, -0.39148, -0.24072, -1.77697, 0.5476 ]
- },
- {
- "time": 0.1333,
- "offset": 2,
- "vertices": [ -2.25684, -1.03177, -1.49719, -4.23862, -0.7447, -2.84907, -1.90072, 0.54478 ]
- },
- {
- "time": 0.3333,
- "offset": 2,
- "vertices": [ -2.37974, -0.05432, -0.49433, 0.19437, -0.90861, 1.16519, -1.60956, 2.70799, 0.96186, 0.80615 ]
- },
- {
- "time": 0.7,
- "offset": 2,
- "vertices": [ -0.91715, -2.76567, -0.62215, -3.63489, -0.84941, -2.26772, -2.56077, 0.52971 ]
- },
- {
- "time": 0.8667,
- "offset": 2,
- "vertices": [ -2.56077, 0.52971, -1.58065, 0.32031, -1.3847, 0.32476, -2.56077, 0.52971 ]
- },
- {
- "time": 1,
- "offset": 2,
- "vertices": [ -1.77697, 0.5476, -0.80128, 0.53413, -0.80128, 0.53413, -1.77697, 0.5476 ]
- }
- ]
+ "undie-straps": {
+ "deform": [
+ {
+ "offset": 2,
+ "vertices": [ -1.77697, 0.5476, -0.96145, -1.03793, -0.39148, -0.24072, -1.77697, 0.5476 ]
+ },
+ {
+ "time": 0.1333,
+ "offset": 2,
+ "vertices": [ -2.25684, -1.03177, -1.49719, -4.23862, -0.7447, -2.84907, -1.90072, 0.54478 ]
+ },
+ {
+ "time": 0.3333,
+ "offset": 2,
+ "vertices": [ -2.37974, -0.05432, -0.49433, 0.19437, -0.90861, 1.16519, -1.60956, 2.70799, 0.96186, 0.80615 ]
+ },
+ {
+ "time": 0.7,
+ "offset": 2,
+ "vertices": [ -0.91715, -2.76567, -0.62215, -3.63489, -0.84941, -2.26772, -2.56077, 0.52971 ]
+ },
+ {
+ "time": 0.8667,
+ "offset": 2,
+ "vertices": [ -2.56077, 0.52971, -1.58065, 0.32031, -1.3847, 0.32476, -2.56077, 0.52971 ]
+ },
+ {
+ "time": 1,
+ "offset": 2,
+ "vertices": [ -1.77697, 0.5476, -0.80128, 0.53413, -0.80128, 0.53413, -1.77697, 0.5476 ]
+ }
+ ]
+ }
},
"undies": {
- "undies": [
- {
- "vertices": [ 0.43099, 0.722, 10.60295, -0.117, 2.29599, 0, 2.29599, 0, 2.29599, 0, 0.58799, 0.244, -2.40018, -0.65335, -2.2782, -0.77534, 2.29599, 0, 0.58799, -0.488, 4.98698, -0.117, 6.50797, -0.23399 ]
- },
- {
- "time": 0.1333,
- "vertices": [ 0.72659, 0.4332, 7.20417, -0.1638, 1.37759, 0, 1.37759, 0, 1.37759, 0, 1.25279, 0.0464, -0.99862, -2.95085, -1.37543, -3.07404, 1.37759, 0, 0.35279, -0.2928, 2.99219, -0.0702, 3.90478, -0.1404 ]
- },
- {
- "time": 0.3333,
- "vertices": [ 1.16999, 0, 2.10599, -0.23401, 0, 0, 0, 0, 0, 0, 2.24999, -0.24999, -0.4344, 0.60551, -1.55939, 0.48051 ]
- },
- {
- "time": 0.5333,
- "vertices": [ 1.16999, 0, -0.234, -0.936, -2.92499, 0.351, 0, 0, 0, 0, 0.5, -0.24999, -0.64079, -2.07915, -0.64079, -2.07915 ]
- },
- {
- "time": 0.7,
- "vertices": [ 1.86271, -0.11514, 4.66327, -0.091, -1.76428, 0.21171, 0, 0, -0.56833, 0.32833, -1.13833, -1.15111, -2.19996, -3.47068, -1.29719, -3.47068, 0, 0, 0, 0, 1.58785, -0.04643, 2.65942, 0.16715 ]
- },
- {
- "time": 0.8333,
- "vertices": [ 2.41688, -0.20726, 8.58108, 0.585, -0.83571, 0.10029, 0, 0, -1.02299, 0.59099, -2.449, -1.872, -1.625, 0, 0, 0, 0, 0, 0, 0, 2.85813, -0.08357, 4.78695, 0.30086 ]
- },
- {
- "time": 0.8667,
- "vertices": [ 2.0197, -0.02141, 8.98546, 0.4446, -0.20937, 0.08023, 0.4592, 0, -0.3592, 0.47279, -1.8416, -1.4488, -0.79153, 1.26421, 0.53286, 1.23981, 0.4592, 0, 0.1176, -0.0976, 3.2839, -0.09025, 5.13116, 0.19389 ]
- },
- {
- "time": 1,
- "vertices": [ 0.43099, 0.722, 10.60295, -0.117, 2.29599, 0, 2.29599, 0, 2.29599, 0, 0.58799, 0.244, -2.40018, -0.65335, -2.2782, -0.77534, 2.29599, 0, 0.58799, -0.488, 4.98698, -0.117, 6.50797, -0.23399 ]
- }
- ]
+ "undies": {
+ "deform": [
+ {
+ "vertices": [ 0.43099, 0.722, 10.60295, -0.117, 2.29599, 0, 2.29599, 0, 2.29599, 0, 0.58799, 0.244, -2.40018, -0.65335, -2.2782, -0.77534, 2.29599, 0, 0.58799, -0.488, 4.98698, -0.117, 6.50797, -0.23399 ]
+ },
+ {
+ "time": 0.1333,
+ "vertices": [ 0.72659, 0.4332, 7.20417, -0.1638, 1.37759, 0, 1.37759, 0, 1.37759, 0, 1.25279, 0.0464, -0.99862, -2.95085, -1.37543, -3.07404, 1.37759, 0, 0.35279, -0.2928, 2.99219, -0.0702, 3.90478, -0.1404 ]
+ },
+ {
+ "time": 0.3333,
+ "vertices": [ 1.16999, 0, 2.10599, -0.23401, 0, 0, 0, 0, 0, 0, 2.24999, -0.24999, -0.4344, 0.60551, -1.55939, 0.48051 ]
+ },
+ {
+ "time": 0.5333,
+ "vertices": [ 1.16999, 0, -0.234, -0.936, -2.92499, 0.351, 0, 0, 0, 0, 0.5, -0.24999, -0.64079, -2.07915, -0.64079, -2.07915 ]
+ },
+ {
+ "time": 0.7,
+ "vertices": [ 1.86271, -0.11514, 4.66327, -0.091, -1.76428, 0.21171, 0, 0, -0.56833, 0.32833, -1.13833, -1.15111, -2.19996, -3.47068, -1.29719, -3.47068, 0, 0, 0, 0, 1.58785, -0.04643, 2.65942, 0.16715 ]
+ },
+ {
+ "time": 0.8333,
+ "vertices": [ 2.41688, -0.20726, 8.58108, 0.585, -0.83571, 0.10029, 0, 0, -1.02299, 0.59099, -2.449, -1.872, -1.625, 0, 0, 0, 0, 0, 0, 0, 2.85813, -0.08357, 4.78695, 0.30086 ]
+ },
+ {
+ "time": 0.8667,
+ "vertices": [ 2.0197, -0.02141, 8.98546, 0.4446, -0.20937, 0.08023, 0.4592, 0, -0.3592, 0.47279, -1.8416, -1.4488, -0.79153, 1.26421, 0.53286, 1.23981, 0.4592, 0, 0.1176, -0.0976, 3.2839, -0.09025, 5.13116, 0.19389 ]
+ },
+ {
+ "time": 1,
+ "vertices": [ 0.43099, 0.722, 10.60295, -0.117, 2.29599, 0, 2.29599, 0, 2.29599, 0, 0.58799, 0.244, -2.40018, -0.65335, -2.2782, -0.77534, 2.29599, 0, 0.58799, -0.488, 4.98698, -0.117, 6.50797, -0.23399 ]
+ }
+ ]
+ }
}
}
}
diff --git a/spine-ts/spine-webgl/example/assets/goblins-pro.skel b/spine-ts/spine-webgl/example/assets/goblins-pro.skel
index e1f4ad6ed..e04251490 100644
Binary files a/spine-ts/spine-webgl/example/assets/goblins-pro.skel and b/spine-ts/spine-webgl/example/assets/goblins-pro.skel differ
diff --git a/spine-ts/spine-webgl/example/assets/mix-and-match-pma.png b/spine-ts/spine-webgl/example/assets/mix-and-match-pma.png
index c1721a211..1c7c748eb 100644
Binary files a/spine-ts/spine-webgl/example/assets/mix-and-match-pma.png and b/spine-ts/spine-webgl/example/assets/mix-and-match-pma.png differ
diff --git a/spine-ts/spine-webgl/example/assets/mix-and-match-pro.json b/spine-ts/spine-webgl/example/assets/mix-and-match-pro.json
index 809b2c7d1..b3398827f 100644
--- a/spine-ts/spine-webgl/example/assets/mix-and-match-pro.json
+++ b/spine-ts/spine-webgl/example/assets/mix-and-match-pro.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "bR3EmyUwO+g",
- "spine": "4.0.31",
+ "hash": "mFaJu+5zxGE",
+ "spine": "4.1.04-beta",
"x": -240.58,
"y": -3.38,
"width": 410.36,
@@ -5263,37 +5263,37 @@
"slots": {
"eye-back-iris": {
"attachment": [
- { "time": 0.0333, "name": null },
+ { "time": 0.0333 },
{ "time": 0.0732, "name": "eye-back-iris" }
]
},
"eye-back-pupil": {
"attachment": [
- { "time": 0.0333, "name": null },
+ { "time": 0.0333 },
{ "time": 0.0732, "name": "eye-back-pupil" }
]
},
"eye-back-white": {
"attachment": [
- { "time": 0.0333, "name": null },
+ { "time": 0.0333 },
{ "time": 0.0732, "name": "eye-back-white" }
]
},
"eye-front-iris": {
"attachment": [
- { "time": 0.0333, "name": null },
+ { "time": 0.0333 },
{ "time": 0.0732, "name": "eye-front-iris" }
]
},
"eye-front-pupil": {
"attachment": [
- { "time": 0.0333, "name": null },
+ { "time": 0.0333 },
{ "time": 0.0732, "name": "eye-front-pupil" }
]
},
"eye-front-white": {
"attachment": [
- { "time": 0.0333, "name": null },
+ { "time": 0.0333 },
{ "time": 0.0732, "name": "eye-front-white" }
]
}
@@ -6028,49 +6028,49 @@
"slots": {
"eye-back-iris": {
"attachment": [
- { "time": 0.1333, "name": null },
+ { "time": 0.1333 },
{ "time": 0.1732, "name": "eye-back-iris" },
- { "time": 2.2667, "name": null },
+ { "time": 2.2667 },
{ "time": 2.3, "name": "eye-back-iris" }
]
},
"eye-back-pupil": {
"attachment": [
- { "time": 0.1333, "name": null },
+ { "time": 0.1333 },
{ "time": 0.1732, "name": "eye-back-pupil" },
- { "time": 2.2667, "name": null },
+ { "time": 2.2667 },
{ "time": 2.3, "name": "eye-back-pupil" }
]
},
"eye-back-white": {
"attachment": [
- { "time": 0.1333, "name": null },
+ { "time": 0.1333 },
{ "time": 0.1732, "name": "eye-back-white" },
- { "time": 2.2667, "name": null },
+ { "time": 2.2667 },
{ "time": 2.3, "name": "eye-back-white" }
]
},
"eye-front-iris": {
"attachment": [
- { "time": 0.1333, "name": null },
+ { "time": 0.1333 },
{ "time": 0.1732, "name": "eye-front-iris" },
- { "time": 2.2667, "name": null },
+ { "time": 2.2667 },
{ "time": 2.3, "name": "eye-front-iris" }
]
},
"eye-front-pupil": {
"attachment": [
- { "time": 0.1333, "name": null },
+ { "time": 0.1333 },
{ "time": 0.1732, "name": "eye-front-pupil" },
- { "time": 2.2667, "name": null },
+ { "time": 2.2667 },
{ "time": 2.3, "name": "eye-front-pupil" }
]
},
"eye-front-white": {
"attachment": [
- { "time": 0.1333, "name": null },
+ { "time": 0.1333 },
{ "time": 0.1732, "name": "eye-front-white" },
- { "time": 2.2667, "name": null },
+ { "time": 2.2667 },
{ "time": 2.3, "name": "eye-front-white" }
]
}
diff --git a/spine-ts/spine-webgl/example/assets/mix-and-match-pro.skel b/spine-ts/spine-webgl/example/assets/mix-and-match-pro.skel
index 072705e30..679fdcf5b 100644
Binary files a/spine-ts/spine-webgl/example/assets/mix-and-match-pro.skel and b/spine-ts/spine-webgl/example/assets/mix-and-match-pro.skel differ
diff --git a/spine-ts/spine-webgl/example/assets/owl-pma.png b/spine-ts/spine-webgl/example/assets/owl-pma.png
index bf5c7e2c7..38b7f9f6b 100644
Binary files a/spine-ts/spine-webgl/example/assets/owl-pma.png and b/spine-ts/spine-webgl/example/assets/owl-pma.png differ
diff --git a/spine-ts/spine-webgl/example/assets/owl-pro.json b/spine-ts/spine-webgl/example/assets/owl-pro.json
index d35dff5e1..fdb96658f 100644
--- a/spine-ts/spine-webgl/example/assets/owl-pro.json
+++ b/spine-ts/spine-webgl/example/assets/owl-pro.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "D48YMP6TYgI",
- "spine": "4.0.31",
+ "hash": "8lXskz65X7Q",
+ "spine": "4.1.04-beta",
"x": -644,
"y": -274,
"width": 1350.84,
@@ -364,18 +364,18 @@
"L_eye-closed": {
"attachment": [
{ "time": 0.4667, "name": "L_eye-closed" },
- { "time": 0.5333, "name": null },
+ { "time": 0.5333 },
{ "time": 1.8333, "name": "L_eye-closed" },
- { "time": 1.9333, "name": null }
+ { "time": 1.9333 }
]
},
"R_eye-closed": {
"attachment": [
{ "time": 0.4667, "name": "R_eye-closed" },
- { "time": 0.5333, "name": null },
+ { "time": 0.5333 },
{ "time": 1.8333, "name": "R_eye-closed" },
- { "time": 1.9, "name": null },
- { "time": 5.2333, "name": null }
+ { "time": 1.9 },
+ { "time": 5.2333 }
]
}
}
@@ -463,43 +463,53 @@
]
}
},
- "deform": {
+ "attachments": {
"default": {
"head-base": {
- "head-base": [
- {
- "offset": 7,
- "vertices": [ 14.94373, 0, 12.65295, 0, 12.65233, -1.0E-5, 67.01102, -1.0E-5, 56.73529, 0, 56.73491, -1.0E-5, 67.71835, -1.0E-5, 57.33374, 0, 57.33344, -1.0E-5, 67.71835, 0, 57.33344, -1.0E-5, 67.34274, -1.0E-5, 57.01584, 0, 57.01547, 0, 20.78079, -1.0E-5, 17.5946, 0, 17.59413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.65256, 0, 3.94009, 0, 3.93906, 0, 8.86218, -1.0E-5, 7.50494, 0, 7.50377, 3.80679, 7.12328, 2.63647, 5.78107, 2.6363, 5.77944, 6.80575, -18.05002, 6.80558, -18.05162, 6.80575, -18.05002, 6.80558, -18.05162, 6.80575, -18.05002, 6.80558, -18.05162, 6.80575, -18.05002, 6.80558, -18.05162, 4.0068, -9.92122, 4.00659, -9.92301, 2.52487, -0.27368, 2.5247, -0.27514, 0.78302, 16.37561, 0.78287, 16.3739, 0, 20.84903, 0, 20.84752, 0, 20.84903, 0, 20.84752, 0, 20.84903, 0, 20.84752, 0, 20.84903, 0, 20.84752, 0, 20.84903, 0, 20.84752, 0, 3.59885, 0, 3.59729, 0, 0.78192, 0, 0.66266, 0, -0.8714, 0, -0.73761, 0, 14.92346, 0, 12.63475, 0, 15.32294, 0, 12.97321, 0, 20.35486, 0, 17.2334, 0.25634, 7.79885, 0.1778, 6.58624, 0, 35.55524, 0, 30.10268, 0, 42.37582, 0, 35.87729, 0, 45.64838, 0, 38.64833, 0, 21.29605, 0, 18.03027, 0, 20.06952, 0, 16.99168, 0, 27.19852, 0, 23.02756, 0, -2.28232, 0, -1.93265, 0, -4.93713, 0, -4.18004, 0, -4.41357, 0, -3.73672, 4.18564, -6.46916, 2.8986, -5.75401, 0, 12.58502, 0, 10.65575, 0, 16.75674, 0, 14.18719, 7.05116, -13.72548, 4.88302, -12.08656, 4.88288, -12.08753, 6.80575, -18.05002, 6.80558, -18.05162, 0, 20.84903, 0, 20.84752, 0, 18.38699, 0, 15.56738, 2.47823, 3.10307, 1.71634, 2.46333, 5.14171, -9.52105, 3.56069, -8.40152, 6.80575, -18.05002, 6.80558, -18.05162, 0, 20.84903, 0, 20.84752, 0, -7.3945, 0, -6.26045, 0, -2.11862, 0, -1.79346, 0, -2.90344, 0, -2.45781, 0, -7.88242, 0, -6.67371, 0, -6.67361, 0, -3.1828, 0, -2.69247, 0, -2.69414, 0, 0.65915, 0, 0.55807, 0, 1.86981, 0, 1.58313, 0.06213, -3.64604, 0.0432, -3.09045, 0.91777, -1.83724, 0.63572, -1.61568, 0, 6.82599, 0, 5.77931, 0, -21.77914, 0, -18.4391, 0, -21.9791, 0, -18.60844, 0, 5.51465, 0, 4.66925, 0, 6.16968, 0, 5.22366, 2.15704, 4.34937, 1.49408, 3.54054, 1.49391, 3.53944, 0, 6.90668, 0, 5.84891, 0, 5.84795, 0, -1.7995, 0, -1.5231, 0, -1.52324, 0, 2.10727, 0, 1.78445, 0, 14.38007, 0, 12.17538, 0, 5.34238, 0, 4.52444, 0, 4.5231, 0, -2.23868, 0, -1.89496, 0, -1.89513, 0, 7.08655, 0, 5.99965, 0, 31.15753, 0, 26.37973, 0, 42.88345, 0, 36.30704, 0, 39.49829, -1.0E-5, 33.44131, 0, 33.44121, 0, 33.70972, 0, 28.54018, 0, 20.23813, 0, 17.13489 ]
- }
- ]
+ "head-base": {
+ "deform": [
+ {
+ "offset": 7,
+ "vertices": [ 14.94373, 0, 12.65295, 0, 12.65233, -1.0E-5, 67.01102, -1.0E-5, 56.73529, 0, 56.73491, -1.0E-5, 67.71835, -1.0E-5, 57.33374, 0, 57.33344, -1.0E-5, 67.71835, 0, 57.33344, -1.0E-5, 67.34274, -1.0E-5, 57.01584, 0, 57.01547, 0, 20.78079, -1.0E-5, 17.5946, 0, 17.59413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.65256, 0, 3.94009, 0, 3.93906, 0, 8.86218, -1.0E-5, 7.50494, 0, 7.50377, 3.80679, 7.12328, 2.63647, 5.78107, 2.6363, 5.77944, 6.80575, -18.05002, 6.80558, -18.05162, 6.80575, -18.05002, 6.80558, -18.05162, 6.80575, -18.05002, 6.80558, -18.05162, 6.80575, -18.05002, 6.80558, -18.05162, 4.0068, -9.92122, 4.00659, -9.92301, 2.52487, -0.27368, 2.5247, -0.27514, 0.78302, 16.37561, 0.78287, 16.3739, 0, 20.84903, 0, 20.84752, 0, 20.84903, 0, 20.84752, 0, 20.84903, 0, 20.84752, 0, 20.84903, 0, 20.84752, 0, 20.84903, 0, 20.84752, 0, 3.59885, 0, 3.59729, 0, 0.78192, 0, 0.66266, 0, -0.8714, 0, -0.73761, 0, 14.92346, 0, 12.63475, 0, 15.32294, 0, 12.97321, 0, 20.35486, 0, 17.2334, 0.25634, 7.79885, 0.1778, 6.58624, 0, 35.55524, 0, 30.10268, 0, 42.37582, 0, 35.87729, 0, 45.64838, 0, 38.64833, 0, 21.29605, 0, 18.03027, 0, 20.06952, 0, 16.99168, 0, 27.19852, 0, 23.02756, 0, -2.28232, 0, -1.93265, 0, -4.93713, 0, -4.18004, 0, -4.41357, 0, -3.73672, 4.18564, -6.46916, 2.8986, -5.75401, 0, 12.58502, 0, 10.65575, 0, 16.75674, 0, 14.18719, 7.05116, -13.72548, 4.88302, -12.08656, 4.88288, -12.08753, 6.80575, -18.05002, 6.80558, -18.05162, 0, 20.84903, 0, 20.84752, 0, 18.38699, 0, 15.56738, 2.47823, 3.10307, 1.71634, 2.46333, 5.14171, -9.52105, 3.56069, -8.40152, 6.80575, -18.05002, 6.80558, -18.05162, 0, 20.84903, 0, 20.84752, 0, -7.3945, 0, -6.26045, 0, -2.11862, 0, -1.79346, 0, -2.90344, 0, -2.45781, 0, -7.88242, 0, -6.67371, 0, -6.67361, 0, -3.1828, 0, -2.69247, 0, -2.69414, 0, 0.65915, 0, 0.55807, 0, 1.86981, 0, 1.58313, 0.06213, -3.64604, 0.0432, -3.09045, 0.91777, -1.83724, 0.63572, -1.61568, 0, 6.82599, 0, 5.77931, 0, -21.77914, 0, -18.4391, 0, -21.9791, 0, -18.60844, 0, 5.51465, 0, 4.66925, 0, 6.16968, 0, 5.22366, 2.15704, 4.34937, 1.49408, 3.54054, 1.49391, 3.53944, 0, 6.90668, 0, 5.84891, 0, 5.84795, 0, -1.7995, 0, -1.5231, 0, -1.52324, 0, 2.10727, 0, 1.78445, 0, 14.38007, 0, 12.17538, 0, 5.34238, 0, 4.52444, 0, 4.5231, 0, -2.23868, 0, -1.89496, 0, -1.89513, 0, 7.08655, 0, 5.99965, 0, 31.15753, 0, 26.37973, 0, 42.88345, 0, 36.30704, 0, 39.49829, -1.0E-5, 33.44131, 0, 33.44121, 0, 33.70972, 0, 28.54018, 0, 20.23813, 0, 17.13489 ]
+ }
+ ]
+ }
},
"L_foot": {
- "L_foot": [
- {
- "vertices": [ 0.18475, -11.92622, 1.50322, -1.16228, 9.49197, -2.14086, 8.17357, -12.90479 ]
- }
- ]
+ "L_foot": {
+ "deform": [
+ {
+ "vertices": [ 0.18475, -11.92622, 1.50322, -1.16228, 9.49197, -2.14086, 8.17357, -12.90479 ]
+ }
+ ]
+ }
},
"L_wing": {
- "L_wing": [
- {
- "vertices": [ -72.47807, 0, 3.19443, -72.4077, -72.47807, 0, 3.19443, -72.4077, -72.47807, 0, 3.19443, -72.4077, 26.35396, -20.44797, 19.26654, 27.22954 ]
- }
- ]
+ "L_wing": {
+ "deform": [
+ {
+ "vertices": [ -72.47807, 0, 3.19443, -72.4077, -72.47807, 0, 3.19443, -72.4077, -72.47807, 0, 3.19443, -72.4077, 26.35396, -20.44797, 19.26654, 27.22954 ]
+ }
+ ]
+ }
},
"R_foot": {
- "R_foot": [
- {
- "vertices": [ 10.15533, 0.83983, 14.67896, -12.2128, 4.99141, -15.57014, 0.4679, -2.5175 ]
- }
- ]
+ "R_foot": {
+ "deform": [
+ {
+ "vertices": [ 10.15533, 0.83983, 14.67896, -12.2128, 4.99141, -15.57014, 0.4679, -2.5175 ]
+ }
+ ]
+ }
},
"R_wing": {
- "R_wing": [
- {
- "vertices": [ -72.47807, 0, 3.19443, -72.4077, -72.47807, 0, 3.19443, -72.4077, -6.02205, 15.33593, -15.05563, -6.6922, -72.47807, 0, 3.19443, -72.4077 ]
- }
- ]
+ "R_wing": {
+ "deform": [
+ {
+ "vertices": [ -72.47807, 0, 3.19443, -72.4077, -72.47807, 0, 3.19443, -72.4077, -6.02205, 15.33593, -15.05563, -6.6922, -72.47807, 0, 3.19443, -72.4077 ]
+ }
+ ]
+ }
}
}
}
@@ -805,43 +815,53 @@
]
}
},
- "deform": {
+ "attachments": {
"default": {
"head-base": {
- "head-base": [
- {
- "offset": 28,
- "vertices": [ -3.41531, 1.32523, -3.00798, 1.32536, -3.00795, 1.32538, -13.18137, 2.46658, -11.60915, 2.46693, -11.60909, 2.46701, -24.95767, 2.91684, -21.98106, 2.91736, -21.98091, 2.9175, -24.95767, 2.91684, -21.98106, 2.91736, -21.98091, 2.9175, -24.95767, 2.91684, -21.98106, 2.91736, -21.98091, 2.9175, -24.95767, 2.91684, -21.98106, 2.91736, -21.98091, 2.9175, 0, 0, 0, 0, 0, 0, -13.94728, 9.2356, -13.94693, 9.23602, -34.88094, 21.34346, -34.88048, 21.34392, -34.03203, 20.858, -34.03159, 20.85857, -15.79938, 10.16179, -15.79893, 10.1624, -3.29639, 2.12108, -3.29633, 2.12112, 0, 0, 0, 0, 0, 0, 0, 0, -2.33473, -7.05453, -2.33449, -7.05409, -6.45872, -19.51779, -6.45844, -19.51738, -6.45872, -19.51779, -6.45844, -19.51738, -2.69571, -8.14571, -2.69562, -8.14552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.96945, 0.53802, -0.85397, 0.53859, 0, 0, 0, 0, 0, 0, 0, 0, -8.70248, 4.69284, -7.66454, 4.69325, -7.66441, 4.69341, -27.66286, 17.12148, -27.66251, 17.12209, -1.01492, -3.06616, -1.01476, -3.06607, 0, 0, 0, 0, 0, 0, 0, 0, -2.82654, 1.60172, -2.4894, 1.60188, -15.98976, 10.32721, -15.98938, 10.3277, -0.64944, -1.96115, -0.64929, -1.96082, -8.67078, 1.01303, -7.6366, 1.01357, -2.97052, 0.34692, -2.61644, 0.3476, -10.75204, 1.25653, -9.46964, 1.25705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18.93701, 2.21329, -16.67841, 2.21358, -16.67833, 2.21367, -16.15625, 1.88818, -14.22923, 1.8886, -14.22917, 1.88867, -7.32959, 0.85648, -6.4554, 0.85704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.45544, 0.45947, -2.16273, 0.45963, -2.16269, 0.4597, -0.45786, 0.17761, -0.40327, 0.17772, -4.47153, 0.83658, -3.93811, 0.83688 ]
- }
- ]
+ "head-base": {
+ "deform": [
+ {
+ "offset": 28,
+ "vertices": [ -3.41531, 1.32523, -3.00798, 1.32536, -3.00795, 1.32538, -13.18137, 2.46658, -11.60915, 2.46693, -11.60909, 2.46701, -24.95767, 2.91684, -21.98106, 2.91736, -21.98091, 2.9175, -24.95767, 2.91684, -21.98106, 2.91736, -21.98091, 2.9175, -24.95767, 2.91684, -21.98106, 2.91736, -21.98091, 2.9175, -24.95767, 2.91684, -21.98106, 2.91736, -21.98091, 2.9175, 0, 0, 0, 0, 0, 0, -13.94728, 9.2356, -13.94693, 9.23602, -34.88094, 21.34346, -34.88048, 21.34392, -34.03203, 20.858, -34.03159, 20.85857, -15.79938, 10.16179, -15.79893, 10.1624, -3.29639, 2.12108, -3.29633, 2.12112, 0, 0, 0, 0, 0, 0, 0, 0, -2.33473, -7.05453, -2.33449, -7.05409, -6.45872, -19.51779, -6.45844, -19.51738, -6.45872, -19.51779, -6.45844, -19.51738, -2.69571, -8.14571, -2.69562, -8.14552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.96945, 0.53802, -0.85397, 0.53859, 0, 0, 0, 0, 0, 0, 0, 0, -8.70248, 4.69284, -7.66454, 4.69325, -7.66441, 4.69341, -27.66286, 17.12148, -27.66251, 17.12209, -1.01492, -3.06616, -1.01476, -3.06607, 0, 0, 0, 0, 0, 0, 0, 0, -2.82654, 1.60172, -2.4894, 1.60188, -15.98976, 10.32721, -15.98938, 10.3277, -0.64944, -1.96115, -0.64929, -1.96082, -8.67078, 1.01303, -7.6366, 1.01357, -2.97052, 0.34692, -2.61644, 0.3476, -10.75204, 1.25653, -9.46964, 1.25705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18.93701, 2.21329, -16.67841, 2.21358, -16.67833, 2.21367, -16.15625, 1.88818, -14.22923, 1.8886, -14.22917, 1.88867, -7.32959, 0.85648, -6.4554, 0.85704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.45544, 0.45947, -2.16273, 0.45963, -2.16269, 0.4597, -0.45786, 0.17761, -0.40327, 0.17772, -4.47153, 0.83658, -3.93811, 0.83688 ]
+ }
+ ]
+ }
},
"L_foot": {
- "L_foot": [
- {
- "vertices": [ 32.68079, -7.56046, 32.68079, -7.56046, 32.68079, -7.56046, 32.68079, -7.56046 ]
- }
- ]
+ "L_foot": {
+ "deform": [
+ {
+ "vertices": [ 32.68079, -7.56046, 32.68079, -7.56046, 32.68079, -7.56046, 32.68079, -7.56046 ]
+ }
+ ]
+ }
},
"L_wing": {
- "L_wing": [
- {
- "vertices": [ -4.27489, 26.67386, -26.45953, -5.4467, 46.59749, 18.47894, -20.51476, 45.73743, 13.95807, -43.26625, 42.60894, 15.85114, -36.91428, -35.07135, 36.66417, -35.33297 ]
- }
- ]
+ "L_wing": {
+ "deform": [
+ {
+ "vertices": [ -4.27489, 26.67386, -26.45953, -5.4467, 46.59749, 18.47894, -20.51476, 45.73743, 13.95807, -43.26625, 42.60894, 15.85114, -36.91428, -35.07135, 36.66417, -35.33297 ]
+ }
+ ]
+ }
},
"R_foot": {
- "R_foot": [
- {
- "vertices": [ -20.46537, -32.39883, -25.30428, -2.89771, -3.40881, 0.69367, 1.43011, -28.8075 ]
- }
- ]
+ "R_foot": {
+ "deform": [
+ {
+ "vertices": [ -20.46537, -32.39883, -25.30428, -2.89771, -3.40881, 0.69367, 1.43011, -28.8075 ]
+ }
+ ]
+ }
},
"R_wing": {
- "R_wing": [
- {
- "vertices": [ 18.48068, 129.83382, -130.52315, 12.7402, 96.8046, 109.6412, -113.80231, 91.87796, 38.92776, 16.92949, -18.6298, 38.14354, -39.39606, 37.12224, -35.35072, -40.99409 ]
- }
- ]
+ "R_wing": {
+ "deform": [
+ {
+ "vertices": [ 18.48068, 129.83382, -130.52315, 12.7402, 96.8046, 109.6412, -113.80231, 91.87796, 38.92776, 16.92949, -18.6298, 38.14354, -39.39606, 37.12224, -35.35072, -40.99409 ]
+ }
+ ]
+ }
}
}
}
@@ -955,42 +975,52 @@
]
}
},
- "deform": {
+ "attachments": {
"default": {
"head-base": {
- "head-base": [
- {
- "vertices": [ 11.1344, -1.06403, 13.4433, -1.51923, 11.08145, -1.51938, 12.53537, -1.19803, 15.13455, -1.71051, 12.47559, -1.71072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.56973, 0.88794, 0.60562, 0.86386, 7.85834, 12.59955, 10.15225, 12.26709, 8.36813, 12.26724, 3.38986, 7.69897, 4.49231, 7.55347, 3.70251, 7.55368, -0.97604, 5.23138, -0.92181, 5.26715, -0.76071, 5.26755, 1.32083, 22.53156, 2.72308, 22.45892, 2.24338, 22.45923, -3.96936, 19.33832, -3.84851, 19.48505, -3.17334, 19.48557, -6.3392, 31.11188, -6.13593, 31.3457, -5.05893, 31.34583, -24.94391, 28.39221, -28.82199, 29.39117, -23.75919, 29.3912, -56.22678, 14.04083, -46.34955, 14.04099, -56.22678, 14.04083, -46.34955, 14.04099, -56.22678, 14.04083, -46.34955, 14.04099, -38.34558, 15.25574, -31.60992, 15.2561, -7.34616, 3.76868, -6.05621, 3.76898, 0, 0, 0, 0, 2.16394, -6.08075, 1.78259, -6.08026, 6.83832, -19.22064, 5.63589, -19.22021, 6.83832, -19.22064, 5.63589, -19.22021, 6.83832, -19.22064, 5.63589, -19.22021, 3.1478, -8.84509, 2.59338, -8.84448, 38.20682, -13.54205, 31.49402, -13.54196, 22.70163, -2.56564, 18.71329, -2.56577, 0, 0, 0, 0, -0.43359, 3.77911, -0.27841, 3.79391, 0.11462, 0.26648, 0.12549, 0.26163, 1.81287, -0.17331, 1.80423, -0.24731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.63617, 1.49402, -3.11993, 1.60059, -2.57245, 1.6011, -23.26324, 6.68951, -19.1777, 6.68982, 1.72217, -4.84058, 1.41837, -4.8396, 0.2225, -0.6604, 0.1955, -0.66821, 0, 0, 0, 0, 0, 0, 0, 0, -17.02399, 8.7337, -14.03403, 8.73428, 3.4574, -9.71698, 2.84891, -9.71613, 1.56943, 4.6452, 1.7587, 4.57733, -0.13034, 0.7984, -0.0975, 0.80319, -0.81927, 3.48224, -0.67593, 3.51291, 11.55099, -1.10391, 13.94623, -1.57617, 11.49603, -1.57617, 7.56793, -0.7233, 9.13727, -1.03268, 7.53198, -1.03275, 1.63562, -0.15628, 1.62781, -0.22321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5.16141, 15.28809, -5.4942, 15.48712, -4.53036, 15.48749, -3.8877, 17.94763, -3.81842, 18.09192, -3.14871, 18.09222, 3.01028, 16.62122, 4.4769, 16.48401, 3.68909, 16.48447, 0.54437, 3.79083, 0.69931, 3.76553, 9.14157, -3.81387, 8.9776, -4.18481, 12.65292, -1.20917, 15.27689, -1.72641, 12.59274, -1.72662, 20.33411, -1.94312, 24.55048, -2.77457, 20.23727, -2.77475, 5.69284, -0.54407, 5.66556, -0.77692, 5.24939, -0.50168, 5.22458, -0.71631, 0, 0, 0, 0, 4.19965, 7.2785, 5.45303, 7.10022, 4.49445, 7.10037, 1.8887, 2.94391, 2.00775, 2.86407, 1.66986, 3.74084, 1.82175, 3.6698 ]
- }
- ]
+ "head-base": {
+ "deform": [
+ {
+ "vertices": [ 11.1344, -1.06403, 13.4433, -1.51923, 11.08145, -1.51938, 12.53537, -1.19803, 15.13455, -1.71051, 12.47559, -1.71072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.56973, 0.88794, 0.60562, 0.86386, 7.85834, 12.59955, 10.15225, 12.26709, 8.36813, 12.26724, 3.38986, 7.69897, 4.49231, 7.55347, 3.70251, 7.55368, -0.97604, 5.23138, -0.92181, 5.26715, -0.76071, 5.26755, 1.32083, 22.53156, 2.72308, 22.45892, 2.24338, 22.45923, -3.96936, 19.33832, -3.84851, 19.48505, -3.17334, 19.48557, -6.3392, 31.11188, -6.13593, 31.3457, -5.05893, 31.34583, -24.94391, 28.39221, -28.82199, 29.39117, -23.75919, 29.3912, -56.22678, 14.04083, -46.34955, 14.04099, -56.22678, 14.04083, -46.34955, 14.04099, -56.22678, 14.04083, -46.34955, 14.04099, -38.34558, 15.25574, -31.60992, 15.2561, -7.34616, 3.76868, -6.05621, 3.76898, 0, 0, 0, 0, 2.16394, -6.08075, 1.78259, -6.08026, 6.83832, -19.22064, 5.63589, -19.22021, 6.83832, -19.22064, 5.63589, -19.22021, 6.83832, -19.22064, 5.63589, -19.22021, 3.1478, -8.84509, 2.59338, -8.84448, 38.20682, -13.54205, 31.49402, -13.54196, 22.70163, -2.56564, 18.71329, -2.56577, 0, 0, 0, 0, -0.43359, 3.77911, -0.27841, 3.79391, 0.11462, 0.26648, 0.12549, 0.26163, 1.81287, -0.17331, 1.80423, -0.24731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.63617, 1.49402, -3.11993, 1.60059, -2.57245, 1.6011, -23.26324, 6.68951, -19.1777, 6.68982, 1.72217, -4.84058, 1.41837, -4.8396, 0.2225, -0.6604, 0.1955, -0.66821, 0, 0, 0, 0, 0, 0, 0, 0, -17.02399, 8.7337, -14.03403, 8.73428, 3.4574, -9.71698, 2.84891, -9.71613, 1.56943, 4.6452, 1.7587, 4.57733, -0.13034, 0.7984, -0.0975, 0.80319, -0.81927, 3.48224, -0.67593, 3.51291, 11.55099, -1.10391, 13.94623, -1.57617, 11.49603, -1.57617, 7.56793, -0.7233, 9.13727, -1.03268, 7.53198, -1.03275, 1.63562, -0.15628, 1.62781, -0.22321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5.16141, 15.28809, -5.4942, 15.48712, -4.53036, 15.48749, -3.8877, 17.94763, -3.81842, 18.09192, -3.14871, 18.09222, 3.01028, 16.62122, 4.4769, 16.48401, 3.68909, 16.48447, 0.54437, 3.79083, 0.69931, 3.76553, 9.14157, -3.81387, 8.9776, -4.18481, 12.65292, -1.20917, 15.27689, -1.72641, 12.59274, -1.72662, 20.33411, -1.94312, 24.55048, -2.77457, 20.23727, -2.77475, 5.69284, -0.54407, 5.66556, -0.77692, 5.24939, -0.50168, 5.22458, -0.71631, 0, 0, 0, 0, 4.19965, 7.2785, 5.45303, 7.10022, 4.49445, 7.10037, 1.8887, 2.94391, 2.00775, 2.86407, 1.66986, 3.74084, 1.82175, 3.6698 ]
+ }
+ ]
+ }
},
"L_foot": {
- "L_foot": [
- {
- "vertices": [ 39.31265, 4.41002, 41.72089, -32.44155, 14.37022, -34.22886, 11.96194, 2.62272 ]
- }
- ]
+ "L_foot": {
+ "deform": [
+ {
+ "vertices": [ 39.31265, 4.41002, 41.72089, -32.44155, 14.37022, -34.22886, 11.96194, 2.62272 ]
+ }
+ ]
+ }
},
"L_wing": {
- "L_wing": [
- {
- "vertices": [ 117.33383, -45.40262, 40.18668, 119.21864, 56.25742, -57.3571, 54.82147, 58.72855, -3.51584, 22.62314, -22.44652, -4.51169, 57.56076, 34.57768, -37.08134, 55.97851 ]
- }
- ]
+ "L_wing": {
+ "deform": [
+ {
+ "vertices": [ 117.33383, -45.40262, 40.18668, 119.21864, 56.25742, -57.3571, 54.82147, 58.72855, -3.51584, 22.62314, -22.44652, -4.51169, 57.56076, 34.57768, -37.08134, 55.97851 ]
+ }
+ ]
+ }
},
"R_foot": {
- "R_foot": [
- {
- "vertices": [ -30.70229, -18.33, -30.70229, -18.33, -30.70229, -18.33, -30.70229, -18.33 ]
- }
- ]
+ "R_foot": {
+ "deform": [
+ {
+ "vertices": [ -30.70229, -18.33, -30.70229, -18.33, -30.70229, -18.33, -30.70229, -18.33 ]
+ }
+ ]
+ }
},
"R_wing": {
- "R_wing": [
- {
- "vertices": [ 109.29965, -8.02332, 3.1934, 109.53658, -6.01328, -56.23985, 56.44511, -3.53917, -150.89093, 30.36821, -23.69317, -152.09174, -25.20395, 129.73512, -128.50223, -30.90591 ]
- }
- ]
+ "R_wing": {
+ "deform": [
+ {
+ "vertices": [ 109.29965, -8.02332, 3.1934, 109.53658, -6.01328, -56.23985, 56.44511, -3.53917, -150.89093, 30.36821, -23.69317, -152.09174, -25.20395, 129.73512, -128.50223, -30.90591 ]
+ }
+ ]
+ }
}
}
}
@@ -1075,49 +1105,61 @@
]
}
},
- "deform": {
+ "attachments": {
"default": {
"body": {
- "body": [
- {
- "vertices": [ 9.78479, 0.43167, -8.5E-4, -9.79428, -11.07703, -0.48866, -0.00134, 11.08782, -20.53809, -0.9061, -28.18424, -1.2431, -4.9E-4, 28.21165, -28.17087, -1.24221, -3.1E-4, 28.19826, 0, 24.02027, -6.0E-5, 11.5683, -1.2E-4, -13.20591, 0, -22.67455, 28.15435, 1.2429, -5.5E-4, -28.18175, 28.14419, 1.24231, -0.0011, -28.17157, 20.9281, 0.92327, 0.10129, 0.00519, -1.2E-4, -0.10139, 0.59372, 0.02641, -7.3E-4, -0.59428, 15.61523, 0.6889, 15.26075, 0.674, -2.4E-4, -15.27561, 0, -0.2351, -14.31816, -0.63171, -13.76835, -0.60672, -1.8E-4, 13.78173, -1.2E-4, 12.47625, 0, -14.37328 ]
- }
- ]
+ "body": {
+ "deform": [
+ {
+ "vertices": [ 9.78479, 0.43167, -8.5E-4, -9.79428, -11.07703, -0.48866, -0.00134, 11.08782, -20.53809, -0.9061, -28.18424, -1.2431, -4.9E-4, 28.21165, -28.17087, -1.24221, -3.1E-4, 28.19826, 0, 24.02027, -6.0E-5, 11.5683, -1.2E-4, -13.20591, 0, -22.67455, 28.15435, 1.2429, -5.5E-4, -28.18175, 28.14419, 1.24231, -0.0011, -28.17157, 20.9281, 0.92327, 0.10129, 0.00519, -1.2E-4, -0.10139, 0.59372, 0.02641, -7.3E-4, -0.59428, 15.61523, 0.6889, 15.26075, 0.674, -2.4E-4, -15.27561, 0, -0.2351, -14.31816, -0.63171, -13.76835, -0.60672, -1.8E-4, 13.78173, -1.2E-4, 12.47625, 0, -14.37328 ]
+ }
+ ]
+ }
},
"head-base": {
- "head-base": [
- {
- "vertices": [ 18.08182, 3.28656, 18.08179, 2.69717, 18.08178, 2.69556, -2.08492, 2.81512, -2.08508, 2.31323, -2.08507, 2.30927, -8.5588, 0.05725, -8.55899, 0.05139, -8.55895, 0.04797, -3.56028, 0.02087, -3.56047, 0.02148, -3.56043, 0.01813, 4.05834, -0.03473, 4.05819, -0.02759, 10.06431, -0.07898, 10.06412, -0.06018, 10.06416, -0.06366, -1.18406, 0.43097, -1.1842, 0.3598, -1.1842, 0.35504, -22.98684, 1.70819, -22.98685, 1.40356, -22.98685, 1.40192, -22.18155, 1.67535, -22.18157, 1.3768, -22.18156, 1.37482, -21.46276, 1.13605, -21.46278, 0.93509, -21.46278, 0.93274, -11.08284, 0.68683, -11.08286, 0.56689, -11.08287, 0.56433, 0.1016, -3.78925, 0.10144, -3.10156, 0.10147, -3.10522, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, -1.74113, -4.18475, -1.7411, -4.18774, 15.8009, 1.18192, 15.80089, 1.1803, -1.88757, -4.98645, -1.8877, -4.08496, 0.13537, -5.04669, 0.13525, -4.13477, -4.33013, 1.79584, -4.33031, 1.47333, 4.45505, 5.67249, 4.45488, 4.65088, 0, 0, 0, 0, 0.18132, -6.76221, 0.18118, -5.54102, 0.40078, -0.00842, 0.40061, -0.00568, -10.01764, 0.73737, -10.0178, 0.60657, 10.43705, -0.08221, 10.43689, -0.06635, 0.27294, 0.21985, 0.27294, 0.18121, 0, 0, 0, 0, 0.17916, -0.00677, 0.179, -0.00452, 0.11242, -4.19293, 0.11229, -3.43506, 0.13193, -4.92053, 0.13181, -4.03156, 0.01666, -0.62231, 0.01653, -0.50916, 0.204, -7.60742, 0.20387, -6.23346, 0.1807, -6.73987, 0.18056, -5.52264, 0.2084, -7.77295, 0.20825, -6.36969, 0.23492, -8.75995, 0.23476, -7.17548, 0.2348, -7.1781, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.22325, -8.32697, 0.22312, -6.82336, 0.23393, -8.72394, 0.2338, -7.14856, 0.22255, -8.30029, 0.22242, -6.80145, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, -3.50412, 1.55554, -3.50416, 1.27625, -5.88762, 2.62024, -5.88765, 2.1488, -0.90049, -1.34583, -0.90065, -1.10168, 10.97694, 4.55176, 10.97691, 3.73422, 10.97687, 3.73248, -4.2139, 0.11591, -4.21404, 0.10239, -4.21406, 0.09705, 4.95192, 7.71997, 4.95192, 6.32831, 0.15553, -5.79968, 0.1554, -4.75214, 0.1638, -6.10944, 0.16368, -5.00592, 0.1761, -6.56738, 0.17597, -5.38116, 0.16425, -6.12555, 0.16413, -5.01947, 2.14045, 2.33923, 2.1404, 1.91858, -1.85151, -0.18054, -1.85164, -0.14532, 0, 0, 0, 0, 0, 0, 0, 0, 0.14525, -5.41821, 0.14508, -4.43677, 0.14511, -4.43958, -1.12234, 0.20605, -1.12251, 0.17688, -1.1225, 0.17065, -10.04741, 1.59747, -10.04749, 1.31299, -10.0475, 1.31073, -9.60033, 1.93549, -9.60038, 1.58783, -1.90081, -5.94379, -1.90096, -4.87024, -0.06005, 1.354, -0.06008, 1.11313, -0.0601, 1.11108, 24.57889, 4.97925, 24.57886, 4.08423, 24.57883, 4.08252, 1.27811, 5.86395, 1.27796, 4.80841, 1.27968, 3.76697, 1.27951, 3.08911, 1.03323, 2.66321, 1.03302, 2.18518, -2.23629, 0.79535, -2.23643, 0.65601, -2.23644, 0.65265, 3.64207, 0.25793, 3.6419, 0.2124, -3.56169, 1.526, -3.56186, 1.25299 ]
- }
- ]
+ "head-base": {
+ "deform": [
+ {
+ "vertices": [ 18.08182, 3.28656, 18.08179, 2.69717, 18.08178, 2.69556, -2.08492, 2.81512, -2.08508, 2.31323, -2.08507, 2.30927, -8.5588, 0.05725, -8.55899, 0.05139, -8.55895, 0.04797, -3.56028, 0.02087, -3.56047, 0.02148, -3.56043, 0.01813, 4.05834, -0.03473, 4.05819, -0.02759, 10.06431, -0.07898, 10.06412, -0.06018, 10.06416, -0.06366, -1.18406, 0.43097, -1.1842, 0.3598, -1.1842, 0.35504, -22.98684, 1.70819, -22.98685, 1.40356, -22.98685, 1.40192, -22.18155, 1.67535, -22.18157, 1.3768, -22.18156, 1.37482, -21.46276, 1.13605, -21.46278, 0.93509, -21.46278, 0.93274, -11.08284, 0.68683, -11.08286, 0.56689, -11.08287, 0.56433, 0.1016, -3.78925, 0.10144, -3.10156, 0.10147, -3.10522, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, -1.74113, -4.18475, -1.7411, -4.18774, 15.8009, 1.18192, 15.80089, 1.1803, -1.88757, -4.98645, -1.8877, -4.08496, 0.13537, -5.04669, 0.13525, -4.13477, -4.33013, 1.79584, -4.33031, 1.47333, 4.45505, 5.67249, 4.45488, 4.65088, 0, 0, 0, 0, 0.18132, -6.76221, 0.18118, -5.54102, 0.40078, -0.00842, 0.40061, -0.00568, -10.01764, 0.73737, -10.0178, 0.60657, 10.43705, -0.08221, 10.43689, -0.06635, 0.27294, 0.21985, 0.27294, 0.18121, 0, 0, 0, 0, 0.17916, -0.00677, 0.179, -0.00452, 0.11242, -4.19293, 0.11229, -3.43506, 0.13193, -4.92053, 0.13181, -4.03156, 0.01666, -0.62231, 0.01653, -0.50916, 0.204, -7.60742, 0.20387, -6.23346, 0.1807, -6.73987, 0.18056, -5.52264, 0.2084, -7.77295, 0.20825, -6.36969, 0.23492, -8.75995, 0.23476, -7.17548, 0.2348, -7.1781, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, 0.22325, -8.32697, 0.22312, -6.82336, 0.23393, -8.72394, 0.2338, -7.14856, 0.22255, -8.30029, 0.22242, -6.80145, 0.26772, -8.18402, 0.26778, -8.18665, 0.26772, -8.18402, 0.26778, -8.18665, -3.50412, 1.55554, -3.50416, 1.27625, -5.88762, 2.62024, -5.88765, 2.1488, -0.90049, -1.34583, -0.90065, -1.10168, 10.97694, 4.55176, 10.97691, 3.73422, 10.97687, 3.73248, -4.2139, 0.11591, -4.21404, 0.10239, -4.21406, 0.09705, 4.95192, 7.71997, 4.95192, 6.32831, 0.15553, -5.79968, 0.1554, -4.75214, 0.1638, -6.10944, 0.16368, -5.00592, 0.1761, -6.56738, 0.17597, -5.38116, 0.16425, -6.12555, 0.16413, -5.01947, 2.14045, 2.33923, 2.1404, 1.91858, -1.85151, -0.18054, -1.85164, -0.14532, 0, 0, 0, 0, 0, 0, 0, 0, 0.14525, -5.41821, 0.14508, -4.43677, 0.14511, -4.43958, -1.12234, 0.20605, -1.12251, 0.17688, -1.1225, 0.17065, -10.04741, 1.59747, -10.04749, 1.31299, -10.0475, 1.31073, -9.60033, 1.93549, -9.60038, 1.58783, -1.90081, -5.94379, -1.90096, -4.87024, -0.06005, 1.354, -0.06008, 1.11313, -0.0601, 1.11108, 24.57889, 4.97925, 24.57886, 4.08423, 24.57883, 4.08252, 1.27811, 5.86395, 1.27796, 4.80841, 1.27968, 3.76697, 1.27951, 3.08911, 1.03323, 2.66321, 1.03302, 2.18518, -2.23629, 0.79535, -2.23643, 0.65601, -2.23644, 0.65265, 3.64207, 0.25793, 3.6419, 0.2124, -3.56169, 1.526, -3.56186, 1.25299 ]
+ }
+ ]
+ }
},
"L_foot": {
- "L_foot": [
- {
- "vertices": [ 5.89397, 0.69042, 5.89397, 0.69042, 5.89397, 0.69042, 5.89397, 0.69042 ]
- }
- ]
+ "L_foot": {
+ "deform": [
+ {
+ "vertices": [ 5.89397, 0.69042, 5.89397, 0.69042, 5.89397, 0.69042, 5.89397, 0.69042 ]
+ }
+ ]
+ }
},
"L_wing": {
- "L_wing": [
- {
- "vertices": [ -11.13373, 20.07786, -19.56781, -12.00009, 23.31055, 16.37385, -17.38553, 22.57391, 17.65799, -39.82292, 39.00579, 19.4036, -16.78632, -36.11907, 36.82366, -15.17023 ]
- }
- ]
+ "L_wing": {
+ "deform": [
+ {
+ "vertices": [ -11.13373, 20.07786, -19.56781, -12.00009, 23.31055, 16.37385, -17.38553, 22.57391, 17.65799, -39.82292, 39.00579, 19.4036, -16.78632, -36.11907, 36.82366, -15.17023 ]
+ }
+ ]
+ }
},
"R_foot": {
- "R_foot": [
- {
- "vertices": [ 35.48705, -0.58566, 32.90477, 10.12547, 40.85446, 12.04202, 43.43665, 1.33094 ]
- }
- ]
+ "R_foot": {
+ "deform": [
+ {
+ "vertices": [ 35.48705, -0.58566, 32.90477, 10.12547, 40.85446, 12.04202, 43.43665, 1.33094 ]
+ }
+ ]
+ }
},
"R_wing": {
- "R_wing": [
- {
- "vertices": [ 24.96088, -21.2647, 20.14355, 25.88189, 6.7001, -22.29713, 21.97984, 7.68417, 8.16104, -3.76462, 3.40096, 8.32676, 26.42206, -2.73223, 1.56473, 26.52477 ]
- }
- ]
+ "R_wing": {
+ "deform": [
+ {
+ "vertices": [ 24.96088, -21.2647, 20.14355, 25.88189, 6.7001, -22.29713, 21.97984, 7.68417, 8.16104, -3.76462, 3.40096, 8.32676, 26.42206, -2.73223, 1.56473, 26.52477 ]
+ }
+ ]
+ }
}
}
}
diff --git a/spine-ts/spine-webgl/example/assets/owl-pro.skel b/spine-ts/spine-webgl/example/assets/owl-pro.skel
index 99abf61e0..62d5df820 100644
Binary files a/spine-ts/spine-webgl/example/assets/owl-pro.skel and b/spine-ts/spine-webgl/example/assets/owl-pro.skel differ
diff --git a/spine-ts/spine-webgl/example/assets/raptor-pma.png b/spine-ts/spine-webgl/example/assets/raptor-pma.png
index 409c293f7..6d0349772 100644
Binary files a/spine-ts/spine-webgl/example/assets/raptor-pma.png and b/spine-ts/spine-webgl/example/assets/raptor-pma.png differ
diff --git a/spine-ts/spine-webgl/example/assets/raptor-pro.json b/spine-ts/spine-webgl/example/assets/raptor-pro.json
index 10edfa6ff..d57e6965e 100644
--- a/spine-ts/spine-webgl/example/assets/raptor-pro.json
+++ b/spine-ts/spine-webgl/example/assets/raptor-pro.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "c1+xCfJH+TE",
- "spine": "4.0.31",
+ "hash": "cDRfwRDrCkA",
+ "spine": "4.1.04-beta",
"x": -809.16,
"y": -73.54,
"width": 1287.65,
@@ -879,7 +879,7 @@
},
"gun": {
"attachment": [
- { "time": 0.2333, "name": null }
+ { "time": 0.2333 }
]
}
},
@@ -1006,7 +1006,7 @@
},
"gun": {
"attachment": [
- { "name": null },
+ {},
{ "time": 0.3, "name": "gun-nohand" }
]
}
diff --git a/spine-ts/spine-webgl/example/assets/raptor-pro.skel b/spine-ts/spine-webgl/example/assets/raptor-pro.skel
index b3e7dc63d..3d7bb9bb2 100644
Binary files a/spine-ts/spine-webgl/example/assets/raptor-pro.skel and b/spine-ts/spine-webgl/example/assets/raptor-pro.skel differ
diff --git a/spine-ts/spine-webgl/example/assets/spineboy-pma.png b/spine-ts/spine-webgl/example/assets/spineboy-pma.png
index 88efd9876..b78b76f45 100644
Binary files a/spine-ts/spine-webgl/example/assets/spineboy-pma.png and b/spine-ts/spine-webgl/example/assets/spineboy-pma.png differ
diff --git a/spine-ts/spine-webgl/example/assets/spineboy-pro.json b/spine-ts/spine-webgl/example/assets/spineboy-pro.json
index 4d8c7c2cf..570041b83 100644
--- a/spine-ts/spine-webgl/example/assets/spineboy-pro.json
+++ b/spine-ts/spine-webgl/example/assets/spineboy-pro.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "IQgkYFQG8ng",
- "spine": "4.0.31",
+ "hash": "ttp88nCyPm0",
+ "spine": "4.1.04-beta",
"x": -188.63,
"y": -7.94,
"width": 418.45,
@@ -2427,19 +2427,19 @@
"side-glow1": {
"attachment": [
{ "name": "hoverglow-small" },
- { "time": 0.9667, "name": null }
+ { "time": 0.9667 }
]
},
"side-glow2": {
"attachment": [
{ "time": 0.0667, "name": "hoverglow-small" },
- { "time": 1, "name": null }
+ { "time": 1 }
]
},
"side-glow3": {
"attachment": [
{ "name": "hoverglow-small" },
- { "time": 0.9667, "name": null }
+ { "time": 0.9667 }
]
}
},
@@ -3479,60 +3479,68 @@
{ "mixX": 0, "mixScaleX": 0, "mixShearY": 0 }
]
},
- "deform": {
+ "attachments": {
"default": {
"front-foot": {
- "front-foot": [
- {
- "offset": 26,
- "vertices": [ -0.02832, -5.37024, -0.02832, -5.37024, 3.8188, -3.7757, -0.02832, -5.37024, -3.82159, 3.77847 ]
- }
- ]
+ "front-foot": {
+ "deform": [
+ {
+ "offset": 26,
+ "vertices": [ -0.02832, -5.37024, -0.02832, -5.37024, 3.8188, -3.7757, -0.02832, -5.37024, -3.82159, 3.77847 ]
+ }
+ ]
+ }
},
"front-shin": {
- "front-shin": [
- {
- "offset": 14,
- "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -11.35158, -10.19225, -10.79865, -8.43765, -6.06447, -6.89757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.54892, -3.06021, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.80437, -7.01817 ]
- },
- {
- "time": 0.3667,
- "offset": 14,
- "vertices": [ 0.5298, -1.12677, -11.66571, -9.07211, -25.65866, -17.53735, -25.53217, -16.50978, -11.78232, -11.26097, 0, 0, 0.60487, -1.63589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0, 0, -2.64522, -7.35739, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0.60487, -1.63589, 0.60487, -1.63589, 0.60487, -1.63589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0, 0, -10.06873, -12.0999 ]
- },
- {
- "time": 0.5333,
- "offset": 14,
- "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -7.00775, -8.24771, -6.45482, -6.49312, -6.06447, -6.89757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.54892, -3.06021, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.80437, -7.01817 ]
- },
- {
- "time": 1,
- "offset": 14,
- "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -11.35158, -10.19225, -10.79865, -8.43765, -6.06447, -6.89757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.54892, -3.06021, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.80437, -7.01817 ]
- }
- ]
+ "front-shin": {
+ "deform": [
+ {
+ "offset": 14,
+ "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -11.35158, -10.19225, -10.79865, -8.43765, -6.06447, -6.89757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.54892, -3.06021, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.80437, -7.01817 ]
+ },
+ {
+ "time": 0.3667,
+ "offset": 14,
+ "vertices": [ 0.5298, -1.12677, -11.66571, -9.07211, -25.65866, -17.53735, -25.53217, -16.50978, -11.78232, -11.26097, 0, 0, 0.60487, -1.63589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0, 0, -2.64522, -7.35739, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0.60487, -1.63589, 0.60487, -1.63589, 0.60487, -1.63589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0, 0, -10.06873, -12.0999 ]
+ },
+ {
+ "time": 0.5333,
+ "offset": 14,
+ "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -7.00775, -8.24771, -6.45482, -6.49312, -6.06447, -6.89757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.54892, -3.06021, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.80437, -7.01817 ]
+ },
+ {
+ "time": 1,
+ "offset": 14,
+ "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -11.35158, -10.19225, -10.79865, -8.43765, -6.06447, -6.89757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.54892, -3.06021, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.80437, -7.01817 ]
+ }
+ ]
+ }
},
"hoverboard-board": {
- "hoverboard-board": [
- {
- "curve": [ 0.067, 0, 0.2, 1 ]
- },
- {
- "time": 0.2667,
- "offset": 1,
- "vertices": [ 2.45856, 0, 0, 0, 0, 0, 0, 0, 0, 3.55673, -3.0E-4, 3.55673, -3.0E-4, 0, 0, 0, 0, 0, 0, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, 0, 0, 0, 0, 0, 0, 0, 0, -4.90558, 0.11214, -9.40706, 6.2E-4, -6.34871, 4.3E-4, -6.34925, -6.57018, -6.34925, -6.57018, -6.34871, 4.3E-4, -2.3308, 1.7E-4, -2.33133, -6.57045, -2.33133, -6.57045, -2.3308, 1.7E-4, 0, 0, 1.2E-4, 2.45856, 1.2E-4, 2.45856, 1.2E-4, 2.45856, 1.2E-4, 2.45856, 3.3297, 4.44005, 3.3297, 4.44005, 3.3297, 4.44005, 1.2E-4, 2.45856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.46227, 1.7E-4, -2.46227, 1.7E-4, -2.52316, 1.1313, -2.52316, 1.1313, -2.52316, 1.1313, 1.2E-4, 2.45856, 1.2E-4, 2.45856, -9.40694, 2.45918, 1.88063, 0.44197, -2.9E-4, -3.54808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.52316, 1.1313, -2.52316, 1.1313, -2.52316, 1.1313, -2.46227, 1.7E-4, -2.46227, 1.7E-4, -2.46227, 1.7E-4, 0, 0, 0, 0, 1.2E-4, 2.45856 ],
- "curve": [ 0.45, 0, 0.817, 1 ]
- },
- { "time": 1 }
- ]
+ "hoverboard-board": {
+ "deform": [
+ {
+ "curve": [ 0.067, 0, 0.2, 1 ]
+ },
+ {
+ "time": 0.2667,
+ "offset": 1,
+ "vertices": [ 2.45856, 0, 0, 0, 0, 0, 0, 0, 0, 3.55673, -3.0E-4, 3.55673, -3.0E-4, 0, 0, 0, 0, 0, 0, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, 0, 0, 0, 0, 0, 0, 0, 0, -4.90558, 0.11214, -9.40706, 6.2E-4, -6.34871, 4.3E-4, -6.34925, -6.57018, -6.34925, -6.57018, -6.34871, 4.3E-4, -2.3308, 1.7E-4, -2.33133, -6.57045, -2.33133, -6.57045, -2.3308, 1.7E-4, 0, 0, 1.2E-4, 2.45856, 1.2E-4, 2.45856, 1.2E-4, 2.45856, 1.2E-4, 2.45856, 3.3297, 4.44005, 3.3297, 4.44005, 3.3297, 4.44005, 1.2E-4, 2.45856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.46227, 1.7E-4, -2.46227, 1.7E-4, -2.52316, 1.1313, -2.52316, 1.1313, -2.52316, 1.1313, 1.2E-4, 2.45856, 1.2E-4, 2.45856, -9.40694, 2.45918, 1.88063, 0.44197, -2.9E-4, -3.54808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.52316, 1.1313, -2.52316, 1.1313, -2.52316, 1.1313, -2.46227, 1.7E-4, -2.46227, 1.7E-4, -2.46227, 1.7E-4, 0, 0, 0, 0, 1.2E-4, 2.45856 ],
+ "curve": [ 0.45, 0, 0.817, 1 ]
+ },
+ { "time": 1 }
+ ]
+ }
},
"rear-foot": {
- "rear-foot": [
- {
- "offset": 28,
- "vertices": [ -1.93078, 1.34782, -0.31417, 2.33363, 3.05122, 0.33946, 2.31472, -2.01678, 2.17583, -2.05795, -0.04277, -2.99459, 1.15429, 0.26328, 0.97501, -0.67169 ]
- }
- ]
+ "rear-foot": {
+ "deform": [
+ {
+ "offset": 28,
+ "vertices": [ -1.93078, 1.34782, -0.31417, 2.33363, 3.05122, 0.33946, 2.31472, -2.01678, 2.17583, -2.05795, -0.04277, -2.99459, 1.15429, 0.26328, 0.97501, -0.67169 ]
+ }
+ ]
+ }
}
}
}
@@ -5203,7 +5211,7 @@
"portal-bg": {
"attachment": [
{ "name": "portal-bg" },
- { "time": 3, "name": null }
+ { "time": 3 }
]
},
"portal-flare1": {
@@ -5214,7 +5222,7 @@
{ "time": 1.2, "name": "portal-flare1" },
{ "time": 1.2333, "name": "portal-flare2" },
{ "time": 1.2667, "name": "portal-flare1" },
- { "time": 1.3333, "name": null }
+ { "time": 1.3333 }
]
},
"portal-flare2": {
@@ -5224,14 +5232,14 @@
{ "time": 1.1667, "name": "portal-flare1" },
{ "time": 1.2, "name": "portal-flare2" },
{ "time": 1.2333, "name": "portal-flare3" },
- { "time": 1.2667, "name": null }
+ { "time": 1.2667 }
]
},
"portal-flare3": {
"attachment": [
{ "time": 1.2, "name": "portal-flare3" },
{ "time": 1.2333, "name": "portal-flare2" },
- { "time": 1.2667, "name": null }
+ { "time": 1.2667 }
]
},
"portal-flare4": {
@@ -5239,33 +5247,33 @@
{ "time": 1.2, "name": "portal-flare2" },
{ "time": 1.2333, "name": "portal-flare1" },
{ "time": 1.2667, "name": "portal-flare2" },
- { "time": 1.3333, "name": null }
+ { "time": 1.3333 }
]
},
"portal-flare5": {
"attachment": [
{ "time": 1.2333, "name": "portal-flare3" },
{ "time": 1.2667, "name": "portal-flare1" },
- { "time": 1.3333, "name": null }
+ { "time": 1.3333 }
]
},
"portal-flare6": {
"attachment": [
{ "time": 1.2667, "name": "portal-flare3" },
- { "time": 1.3333, "name": null }
+ { "time": 1.3333 }
]
},
"portal-flare7": {
"attachment": [
{ "time": 1.1333, "name": "portal-flare2" },
- { "time": 1.1667, "name": null }
+ { "time": 1.1667 }
]
},
"portal-flare8": {
"attachment": [
{ "time": 1.2, "name": "portal-flare3" },
{ "time": 1.2333, "name": "portal-flare2" },
- { "time": 1.2667, "name": null }
+ { "time": 1.2667 }
]
},
"portal-flare9": {
@@ -5273,7 +5281,7 @@
{ "time": 1.2, "name": "portal-flare2" },
{ "time": 1.2333, "name": "portal-flare3" },
{ "time": 1.2667, "name": "portal-flare1" },
- { "time": 1.3, "name": null }
+ { "time": 1.3 }
]
},
"portal-flare10": {
@@ -5281,25 +5289,25 @@
{ "time": 1.2, "name": "portal-flare2" },
{ "time": 1.2333, "name": "portal-flare1" },
{ "time": 1.2667, "name": "portal-flare3" },
- { "time": 1.3, "name": null }
+ { "time": 1.3 }
]
},
"portal-shade": {
"attachment": [
{ "name": "portal-shade" },
- { "time": 3, "name": null }
+ { "time": 3 }
]
},
"portal-streaks1": {
"attachment": [
{ "name": "portal-streaks1" },
- { "time": 3, "name": null }
+ { "time": 3 }
]
},
"portal-streaks2": {
"attachment": [
{ "name": "portal-streaks2" },
- { "time": 3, "name": null }
+ { "time": 3 }
]
}
},
@@ -7696,7 +7704,7 @@
{ "time": 0.1, "name": "muzzle03" },
{ "time": 0.1333, "name": "muzzle04" },
{ "time": 0.1667, "name": "muzzle05" },
- { "time": 0.2, "name": null }
+ { "time": 0.2 }
]
},
"muzzle-glow": {
@@ -7725,7 +7733,7 @@
],
"attachment": [
{ "time": 0.0333, "name": "muzzle-ring" },
- { "time": 0.2333, "name": null }
+ { "time": 0.2333 }
]
},
"muzzle-ring2": {
@@ -7739,7 +7747,7 @@
],
"attachment": [
{ "time": 0.0333, "name": "muzzle-ring" },
- { "time": 0.2, "name": null }
+ { "time": 0.2 }
]
},
"muzzle-ring3": {
@@ -7753,7 +7761,7 @@
],
"attachment": [
{ "time": 0.0333, "name": "muzzle-ring" },
- { "time": 0.2, "name": null }
+ { "time": 0.2 }
]
},
"muzzle-ring4": {
@@ -7767,7 +7775,7 @@
],
"attachment": [
{ "time": 0.0333, "name": "muzzle-ring" },
- { "time": 0.2, "name": null }
+ { "time": 0.2 }
]
}
},
diff --git a/spine-ts/spine-webgl/example/assets/spineboy-pro.skel b/spine-ts/spine-webgl/example/assets/spineboy-pro.skel
index 6f4f53ff6..45d5d9460 100644
Binary files a/spine-ts/spine-webgl/example/assets/spineboy-pro.skel and b/spine-ts/spine-webgl/example/assets/spineboy-pro.skel differ
diff --git a/spine-ts/spine-webgl/example/assets/spineboy.png b/spine-ts/spine-webgl/example/assets/spineboy.png
index 3f7eb0644..d1c3ac1be 100644
Binary files a/spine-ts/spine-webgl/example/assets/spineboy.png and b/spine-ts/spine-webgl/example/assets/spineboy.png differ
diff --git a/spine-ts/spine-webgl/example/assets/stretchyman-pro.json b/spine-ts/spine-webgl/example/assets/stretchyman-pro.json
index 14557f7b3..63a9e6c94 100644
--- a/spine-ts/spine-webgl/example/assets/stretchyman-pro.json
+++ b/spine-ts/spine-webgl/example/assets/stretchyman-pro.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "F+EPhClYhR8",
- "spine": "4.0.31",
+ "hash": "NNUiOwCxKWo",
+ "spine": "4.1.04-beta",
"x": -100.47,
"y": -9.21,
"width": 260.65,
@@ -1966,144 +1966,148 @@
{ "mix": 0 }
]
},
- "deform": {
+ "attachments": {
"default": {
"back-leg-path": {
- "back-leg-path": [
- {
- "curve": [ 0.158, 0, 0.475, 1 ]
- },
- {
- "time": 0.6333,
- "offset": 6,
- "vertices": [ 7.58212, 6.44012, -6.24036, 7.74866, 0, 0, 0, 0, -8.65305, -6.0506, 5.82422, -8.80603 ],
- "curve": [ 0.771, 0, 1.005, 0.48 ]
- },
- {
- "time": 1.2,
- "offset": 6,
- "vertices": [ 1.75757, 1.49285, -1.44654, 1.79617, 0, 0, 0, 0, -2.00581, -1.40255, 1.35008, -2.04128 ],
- "curve": [ 1.215, 0, 1.225, 0.03 ]
- },
- {
- "time": 1.2333,
- "offset": 6,
- "vertices": [ 11.07889, 9.19726, -3.09299, 13.71402, 9.39429, 7.76639, -1.7065, 11.99242, 7.47175, 6.42206, -0.41247, 10.03589 ],
- "curve": [ 1.246, 0.12, 1.254, 0.27 ]
- },
- {
- "time": 1.2667,
- "offset": 6,
- "vertices": [ 10.10474, 8.7463, -2.36874, 12.63447, 8.81438, 7.65029, -1.30674, 11.31577, 7.34177, 6.62058, -0.31555, 9.81713 ],
- "curve": [ 1.275, 0.62, 1.286, 0.79 ]
- },
- {
- "time": 1.3,
- "offset": 6,
- "vertices": [ 3.4599, -0.42859, 1.07778, 1.47922, 2.60141, -1.15778, 1.78435, 0.60187, 1.62166, -1.84286, 2.4438, -0.3952 ],
- "curve": [ 1.354, 0.76, 1.414, 1 ]
- },
- {
- "time": 1.4333,
- "offset": 6,
- "vertices": [ -4.08505, -24.14874, 13.996, -20.09798, -4.08505, -24.14874, 13.996, -20.09798, -4.08505, -24.14874, 13.996, -20.09798 ]
- },
- {
- "time": 1.5,
- "vertices": [ 4.67719, -35.44354, 0, 0, -11.37146, 49.53738, 17.39343, -2.33365, 4.23248, 5.68374, -9.56653, -24.74756, 11.45203, -23.93552, -27.49841, -64.4725, 35.55432, -56.67893, 34.69244, -51.5341, 0, 0, 13.30164, -100.17206 ]
- },
- {
- "time": 1.5333,
- "vertices": [ 1.85684, -28.94159, 0, 0, -12.58768, 38.57599, 11.30969, 16.17496, -13.13428, 1.4907, -12.13364, -13.87851, 4.3075, -20.49398, -34.95135, -45.73811, 21.12878, -45.5335, 30.62613, -45.13649, 0, 0, -0.15961, -190.51059 ]
- },
- {
- "time": 1.5667,
- "vertices": [ -0.9635, -22.43964, 0, 0, -13.80389, 27.61459, 1.79449, 28.22318, -27.06714, -9.07224, -6.2052, -1.21002, 1.34003, -9.39124, -24.41541, -19.97638, 12.56061, -16.52356, 26.55981, -38.73888, 0, 0, -13.62085, -280.84912 ]
- },
- {
- "time": 1.6,
- "vertices": [ -0.64233, -14.95974, 0, 0, -9.20259, 18.40971, 13.73107, 41.19725, -42.90586, -9.10037, 4.13583, -3.71808, 4.12607, -1.04554, -17.52923, -15.07591, 15.79826, -11.47559, 17.70652, -25.82589, 0, 0, -9.08056, -187.23253 ]
- },
- {
- "time": 1.6333,
- "vertices": [ -0.32117, -7.47987, 0, 0, -4.60129, 9.20485, 3.14877, 52.3598, -63.25818, -29.05335, -8.042, -8.03761, 2.39843, -12.62472, -33.16191, -11.98693, 14.52224, -26.35249, 8.85326, -12.91294, 0, 0, -4.54028, -93.61627 ]
- },
- { "time": 1.6667 }
- ]
+ "back-leg-path": {
+ "deform": [
+ {
+ "curve": [ 0.158, 0, 0.475, 1 ]
+ },
+ {
+ "time": 0.6333,
+ "offset": 6,
+ "vertices": [ 7.58212, 6.44012, -6.24036, 7.74866, 0, 0, 0, 0, -8.65305, -6.0506, 5.82422, -8.80603 ],
+ "curve": [ 0.771, 0, 1.005, 0.48 ]
+ },
+ {
+ "time": 1.2,
+ "offset": 6,
+ "vertices": [ 1.75757, 1.49285, -1.44654, 1.79617, 0, 0, 0, 0, -2.00581, -1.40255, 1.35008, -2.04128 ],
+ "curve": [ 1.215, 0, 1.225, 0.03 ]
+ },
+ {
+ "time": 1.2333,
+ "offset": 6,
+ "vertices": [ 11.07889, 9.19726, -3.09299, 13.71402, 9.39429, 7.76639, -1.7065, 11.99242, 7.47175, 6.42206, -0.41247, 10.03589 ],
+ "curve": [ 1.246, 0.12, 1.254, 0.27 ]
+ },
+ {
+ "time": 1.2667,
+ "offset": 6,
+ "vertices": [ 10.10474, 8.7463, -2.36874, 12.63447, 8.81438, 7.65029, -1.30674, 11.31577, 7.34177, 6.62058, -0.31555, 9.81713 ],
+ "curve": [ 1.275, 0.62, 1.286, 0.79 ]
+ },
+ {
+ "time": 1.3,
+ "offset": 6,
+ "vertices": [ 3.4599, -0.42859, 1.07778, 1.47922, 2.60141, -1.15778, 1.78435, 0.60187, 1.62166, -1.84286, 2.4438, -0.3952 ],
+ "curve": [ 1.354, 0.76, 1.414, 1 ]
+ },
+ {
+ "time": 1.4333,
+ "offset": 6,
+ "vertices": [ -4.08505, -24.14874, 13.996, -20.09798, -4.08505, -24.14874, 13.996, -20.09798, -4.08505, -24.14874, 13.996, -20.09798 ]
+ },
+ {
+ "time": 1.5,
+ "vertices": [ 4.67719, -35.44354, 0, 0, -11.37146, 49.53738, 17.39343, -2.33365, 4.23248, 5.68374, -9.56653, -24.74756, 11.45203, -23.93552, -27.49841, -64.4725, 35.55432, -56.67893, 34.69244, -51.5341, 0, 0, 13.30164, -100.17206 ]
+ },
+ {
+ "time": 1.5333,
+ "vertices": [ 1.85684, -28.94159, 0, 0, -12.58768, 38.57599, 11.30969, 16.17496, -13.13428, 1.4907, -12.13364, -13.87851, 4.3075, -20.49398, -34.95135, -45.73811, 21.12878, -45.5335, 30.62613, -45.13649, 0, 0, -0.15961, -190.51059 ]
+ },
+ {
+ "time": 1.5667,
+ "vertices": [ -0.9635, -22.43964, 0, 0, -13.80389, 27.61459, 1.79449, 28.22318, -27.06714, -9.07224, -6.2052, -1.21002, 1.34003, -9.39124, -24.41541, -19.97638, 12.56061, -16.52356, 26.55981, -38.73888, 0, 0, -13.62085, -280.84912 ]
+ },
+ {
+ "time": 1.6,
+ "vertices": [ -0.64233, -14.95974, 0, 0, -9.20259, 18.40971, 13.73107, 41.19725, -42.90586, -9.10037, 4.13583, -3.71808, 4.12607, -1.04554, -17.52923, -15.07591, 15.79826, -11.47559, 17.70652, -25.82589, 0, 0, -9.08056, -187.23253 ]
+ },
+ {
+ "time": 1.6333,
+ "vertices": [ -0.32117, -7.47987, 0, 0, -4.60129, 9.20485, 3.14877, 52.3598, -63.25818, -29.05335, -8.042, -8.03761, 2.39843, -12.62472, -33.16191, -11.98693, 14.52224, -26.35249, 8.85326, -12.91294, 0, 0, -4.54028, -93.61627 ]
+ },
+ { "time": 1.6667 }
+ ]
+ }
},
"front-leg-path": {
- "front-leg-path": [
- {
- "curve": [ 0.075, 0, 0.189, 0.28 ]
- },
- {
- "time": 0.3,
- "vertices": [ 0.05087, -3.38688, 0, 0, 1.38452, 5.97834, -14.9041, 2.01206, 1.44487, -6.80281, -14.9041, 2.01206, 1.44487, -6.80281, -14.9041, 2.01206, 1.44487, -6.80281 ],
- "curve": [ 0.323, 0.2, 0.345, 0.35 ]
- },
- {
- "time": 0.3667,
- "vertices": [ 0.07139, -4.75271, 0, 0, 1.94286, 8.38924, 4.65956, 20.90988, -6.00341, 18.98861, -0.14155, 20.92476, -9.36768, 15.5653, -12.20349, 23.97896, -19.98153, 9.06929 ],
- "curve": [ 0.39, 0.31, 0.412, 0.53 ]
- },
- {
- "time": 0.4333,
- "vertices": [ 0.08487, -5.65058, 0, 0, 2.3099, 9.97411, 6.09287, 20.58425, -8.39331, 19.11554, -1.86437, 20.6089, -13.96917, 13.44183, -21.85559, 25.6709, -31.56034, 2.67548 ],
- "curve": [ 0.438, 0.32, 0.451, 0.54 ]
- },
- {
- "time": 0.4667,
- "vertices": [ 0.09099, -6.05806, 0, 0, 2.47648, 10.69338, 6.80647, 9.95062, -1.39596, 12.12401, -2.58313, 9.97971, -7.97551, 5.429, -26.17287, 15.95288, -28.7332, -7.27536 ],
- "curve": [ 0.491, 0.92, 0.521, 0.99 ]
- },
- {
- "time": 0.5333,
- "vertices": [ 0.0938, -6.24474, 0, 0, 2.55279, 11.0229, 3.37726, -9.77658, 9.35123, -4.41786, -6.66855, -9.74546, 2.31187, -11.58077, -31.90691, -3.35485, -19.89651, -25.173 ],
- "curve": [ 0.54, 0.52, 0.553, 0.77 ]
- },
- {
- "time": 0.5667,
- "vertices": [ 0.12554, -7.9214, 0, 0, 0.6047, 13.76218, 28.2061, -4.72442, -24.72498, -10.04851, -1.08998, -15.00371, 3.89968, -14.73675, -45.72995, -9.44002, -7.51602, -33.5578, 22.59846, -13.40422, 0, 0, -21.81488, -287.65363 ],
- "curve": [ 0.579, 1, 0.592, 1 ]
- },
- {
- "time": 0.6,
- "vertices": [ 0.12969, -8.14021, 0, 0, 0.35046, 14.11967, 49.51149, 65.25623, -80.01971, 39.68078, -0.36196, -15.68993, 4.10689, -15.14861, -62.03986, -28.71517, 2.78595, -56.47927, 41.45007, -31.91446, 0, 0, -19.75009, -6.99966 ]
- },
- {
- "time": 0.6333,
- "vertices": [ 0.16366, -9.90768, 0, 0, -1.90419, 16.9905, 99.3634, 33.16509, -81.26534, 35.35141, -0.72391, -31.37989, 8.2138, -30.29725, -84.11658, -22.14578, -6.24997, -61.22949, 46.91129, -33.41971, 0, 0, -31.98465, -262.01813 ]
- },
- {
- "time": 0.6667,
- "vertices": [ 0.18382, -11.1283, 0, 0, -2.13879, 19.08371, 85.97569, 24.69115, -94.39235, -5.64914, 3.63728, -14.95789, -10.54588, -27.66409, -78.76755, -2.82176, -20.92926, -42.81331, 26.18336, -20.74105, 0, 0, -159.67368, -300.67038 ]
- },
- {
- "time": 0.7,
- "vertices": [ 0.20398, -12.34892, 0, 0, -2.37338, 21.17692, 70.14705, -52.80042, -51.24022, -73.25025, 20.8386, -23.27967, -12.66359, -23.66, -39.22493, -9.41795, -5.46658, 10.6813, 1.18861, 10.38911, 0, 0, -400.93036, -315.42963 ]
- },
- {
- "time": 0.7333,
- "vertices": [ 0.13599, -8.23261, 0, 0, -1.58226, 14.11795, 46.76473, -35.2003, -34.16017, -48.83353, 13.89241, -15.51979, -8.4424, -15.77335, -26.14997, -6.27864, -3.64439, 7.12087, 0.8908, 26.32127, 0, 0, -439.48523, -177.52177 ]
- },
- {
- "time": 0.7667,
- "vertices": [ 0.06799, -4.11631, 0, 0, -0.79113, 7.05898, 23.38236, -17.60015, -17.08008, -24.41677, 6.94621, -7.7599, -4.2212, -7.88667, -13.07498, -3.13932, -1.8222, 3.56044, 6.0198, 23.00182, 0, 0, -365.68442, -226.89883 ]
- },
- { "time": 0.8, "curve": "stepped" },
- { "time": 1.1 },
- {
- "time": 1.3,
- "offset": 6,
- "vertices": [ 22.24737, 20.71245, -17.43828, 31.85296, 22.24737, 20.71245, -17.43828, 31.85296, 22.24737, 20.71245, -17.43828, 31.85296 ]
- },
- {
- "time": 1.4333,
- "offset": 6,
- "vertices": [ 50.92273, 30.30164, -15.21045, 57.26978, 50.92273, 30.30164, -15.21045, 57.26978, 50.92273, 30.30164, -15.21045, 57.26978 ]
- },
- { "time": 1.8 }
- ]
+ "front-leg-path": {
+ "deform": [
+ {
+ "curve": [ 0.075, 0, 0.189, 0.28 ]
+ },
+ {
+ "time": 0.3,
+ "vertices": [ 0.05087, -3.38688, 0, 0, 1.38452, 5.97834, -14.9041, 2.01206, 1.44487, -6.80281, -14.9041, 2.01206, 1.44487, -6.80281, -14.9041, 2.01206, 1.44487, -6.80281 ],
+ "curve": [ 0.323, 0.2, 0.345, 0.35 ]
+ },
+ {
+ "time": 0.3667,
+ "vertices": [ 0.07139, -4.75271, 0, 0, 1.94286, 8.38924, 4.65956, 20.90988, -6.00341, 18.98861, -0.14155, 20.92476, -9.36768, 15.5653, -12.20349, 23.97896, -19.98153, 9.06929 ],
+ "curve": [ 0.39, 0.31, 0.412, 0.53 ]
+ },
+ {
+ "time": 0.4333,
+ "vertices": [ 0.08487, -5.65058, 0, 0, 2.3099, 9.97411, 6.09287, 20.58425, -8.39331, 19.11554, -1.86437, 20.6089, -13.96917, 13.44183, -21.85559, 25.6709, -31.56034, 2.67548 ],
+ "curve": [ 0.438, 0.32, 0.451, 0.54 ]
+ },
+ {
+ "time": 0.4667,
+ "vertices": [ 0.09099, -6.05806, 0, 0, 2.47648, 10.69338, 6.80647, 9.95062, -1.39596, 12.12401, -2.58313, 9.97971, -7.97551, 5.429, -26.17287, 15.95288, -28.7332, -7.27536 ],
+ "curve": [ 0.491, 0.92, 0.521, 0.99 ]
+ },
+ {
+ "time": 0.5333,
+ "vertices": [ 0.0938, -6.24474, 0, 0, 2.55279, 11.0229, 3.37726, -9.77658, 9.35123, -4.41786, -6.66855, -9.74546, 2.31187, -11.58077, -31.90691, -3.35485, -19.89651, -25.173 ],
+ "curve": [ 0.54, 0.52, 0.553, 0.77 ]
+ },
+ {
+ "time": 0.5667,
+ "vertices": [ 0.12554, -7.9214, 0, 0, 0.6047, 13.76218, 28.2061, -4.72442, -24.72498, -10.04851, -1.08998, -15.00371, 3.89968, -14.73675, -45.72995, -9.44002, -7.51602, -33.5578, 22.59846, -13.40422, 0, 0, -21.81488, -287.65363 ],
+ "curve": [ 0.579, 1, 0.592, 1 ]
+ },
+ {
+ "time": 0.6,
+ "vertices": [ 0.12969, -8.14021, 0, 0, 0.35046, 14.11967, 49.51149, 65.25623, -80.01971, 39.68078, -0.36196, -15.68993, 4.10689, -15.14861, -62.03986, -28.71517, 2.78595, -56.47927, 41.45007, -31.91446, 0, 0, -19.75009, -6.99966 ]
+ },
+ {
+ "time": 0.6333,
+ "vertices": [ 0.16366, -9.90768, 0, 0, -1.90419, 16.9905, 99.3634, 33.16509, -81.26534, 35.35141, -0.72391, -31.37989, 8.2138, -30.29725, -84.11658, -22.14578, -6.24997, -61.22949, 46.91129, -33.41971, 0, 0, -31.98465, -262.01813 ]
+ },
+ {
+ "time": 0.6667,
+ "vertices": [ 0.18382, -11.1283, 0, 0, -2.13879, 19.08371, 85.97569, 24.69115, -94.39235, -5.64914, 3.63728, -14.95789, -10.54588, -27.66409, -78.76755, -2.82176, -20.92926, -42.81331, 26.18336, -20.74105, 0, 0, -159.67368, -300.67038 ]
+ },
+ {
+ "time": 0.7,
+ "vertices": [ 0.20398, -12.34892, 0, 0, -2.37338, 21.17692, 70.14705, -52.80042, -51.24022, -73.25025, 20.8386, -23.27967, -12.66359, -23.66, -39.22493, -9.41795, -5.46658, 10.6813, 1.18861, 10.38911, 0, 0, -400.93036, -315.42963 ]
+ },
+ {
+ "time": 0.7333,
+ "vertices": [ 0.13599, -8.23261, 0, 0, -1.58226, 14.11795, 46.76473, -35.2003, -34.16017, -48.83353, 13.89241, -15.51979, -8.4424, -15.77335, -26.14997, -6.27864, -3.64439, 7.12087, 0.8908, 26.32127, 0, 0, -439.48523, -177.52177 ]
+ },
+ {
+ "time": 0.7667,
+ "vertices": [ 0.06799, -4.11631, 0, 0, -0.79113, 7.05898, 23.38236, -17.60015, -17.08008, -24.41677, 6.94621, -7.7599, -4.2212, -7.88667, -13.07498, -3.13932, -1.8222, 3.56044, 6.0198, 23.00182, 0, 0, -365.68442, -226.89883 ]
+ },
+ { "time": 0.8, "curve": "stepped" },
+ { "time": 1.1 },
+ {
+ "time": 1.3,
+ "offset": 6,
+ "vertices": [ 22.24737, 20.71245, -17.43828, 31.85296, 22.24737, 20.71245, -17.43828, 31.85296, 22.24737, 20.71245, -17.43828, 31.85296 ]
+ },
+ {
+ "time": 1.4333,
+ "offset": 6,
+ "vertices": [ 50.92273, 30.30164, -15.21045, 57.26978, 50.92273, 30.30164, -15.21045, 57.26978, 50.92273, 30.30164, -15.21045, 57.26978 ]
+ },
+ { "time": 1.8 }
+ ]
+ }
}
}
}
diff --git a/spine-ts/spine-webgl/example/assets/stretchyman-pro.skel b/spine-ts/spine-webgl/example/assets/stretchyman-pro.skel
index fc2f5834e..5db4a89eb 100644
Binary files a/spine-ts/spine-webgl/example/assets/stretchyman-pro.skel and b/spine-ts/spine-webgl/example/assets/stretchyman-pro.skel differ
diff --git a/spine-ts/spine-webgl/example/assets/tank-pma.png b/spine-ts/spine-webgl/example/assets/tank-pma.png
index 5b355c869..15f7b6d78 100644
Binary files a/spine-ts/spine-webgl/example/assets/tank-pma.png and b/spine-ts/spine-webgl/example/assets/tank-pma.png differ
diff --git a/spine-ts/spine-webgl/example/assets/tank-pro.json b/spine-ts/spine-webgl/example/assets/tank-pro.json
index 1abcc7bfe..267df085d 100644
--- a/spine-ts/spine-webgl/example/assets/tank-pro.json
+++ b/spine-ts/spine-webgl/example/assets/tank-pro.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "3P3VgYJ8Bxk",
- "spine": "4.0.31",
+ "hash": "zExzm/6YDxM",
+ "spine": "4.1.04-beta",
"x": -5852.65,
"y": -348.5,
"width": 7202.61,
@@ -3420,7 +3420,7 @@
"slots": {
"rock": {
"attachment": [
- { "name": null }
+ {}
]
},
"smoke-glow": {
@@ -3432,7 +3432,7 @@
],
"attachment": [
{ "time": 0.0667, "name": "smoke-glow" },
- { "time": 0.3, "name": null }
+ { "time": 0.3 }
]
},
"smoke-puff1-bg": {
@@ -4049,7 +4049,7 @@
],
"attachment": [
{ "time": 0.0667, "name": "smoke-glow" },
- { "time": 0.2667, "name": null }
+ { "time": 0.2667 }
]
}
},
@@ -4870,65 +4870,69 @@
]
}
},
- "deform": {
+ "attachments": {
"default": {
"clipping": {
- "clipping": [
- {
- "time": 0.0667,
- "offset": 54,
- "vertices": [ 4.59198, -4.59192 ]
- },
- {
- "time": 0.1333,
- "offset": 8,
- "vertices": [ -8.97369, -1.88211, 9.11177, 1.02258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14.73321, -45.16878, -30.31448, -84.4631, -32.24969, -108.78421, 70.26825, -36.90201 ]
- },
- {
- "time": 0.1667,
- "offset": 8,
- "vertices": [ -11.32373, -1.65065, 11.42179, 0.53259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15.36503, -69.18713, -4.45626, -121.90839, 5.46554, -115.23274, 71.78526, -33.85687 ]
- },
- {
- "time": 0.2,
- "offset": 8,
- "vertices": [ -8.70522, 1.02196, 8.65102, -1.4101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.59198, -4.59192 ]
- },
- {
- "time": 0.2333,
- "offset": 8,
- "vertices": [ -5.23146, 0.85796, 5.23882, -0.81519 ]
- },
- {
- "time": 0.2667,
- "offset": 54,
- "vertices": [ 4.59198, -4.59192 ]
- }
- ]
+ "clipping": {
+ "deform": [
+ {
+ "time": 0.0667,
+ "offset": 54,
+ "vertices": [ 4.59198, -4.59192 ]
+ },
+ {
+ "time": 0.1333,
+ "offset": 8,
+ "vertices": [ -8.97369, -1.88211, 9.11177, 1.02258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14.73321, -45.16878, -30.31448, -84.4631, -32.24969, -108.78421, 70.26825, -36.90201 ]
+ },
+ {
+ "time": 0.1667,
+ "offset": 8,
+ "vertices": [ -11.32373, -1.65065, 11.42179, 0.53259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15.36503, -69.18713, -4.45626, -121.90839, 5.46554, -115.23274, 71.78526, -33.85687 ]
+ },
+ {
+ "time": 0.2,
+ "offset": 8,
+ "vertices": [ -8.70522, 1.02196, 8.65102, -1.4101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.59198, -4.59192 ]
+ },
+ {
+ "time": 0.2333,
+ "offset": 8,
+ "vertices": [ -5.23146, 0.85796, 5.23882, -0.81519 ]
+ },
+ {
+ "time": 0.2667,
+ "offset": 54,
+ "vertices": [ 4.59198, -4.59192 ]
+ }
+ ]
+ }
},
"smoke-glow": {
- "smoke-glow": [
- {
- "time": 0.1333,
- "vertices": [ -14.17073, 19.14352, 0, 0, -10.97961, -15.09065, -5.79558, -24.82121, 0.68117, -17.78759, -1.1179, -5.4463, 0, 0, 0, 0, 17.52957, 6.89397, -0.33841, -2.21582, 5.51004, 18.88118, -6.80153, 20.91101 ]
- },
- {
- "time": 0.1667,
- "vertices": [ -4.34264, 39.78125, 5.6649, -2.42686, -8.39346, -22.52338, -2.66431, 5.08595, -19.28093, 3.98568, -11.21397, 10.2879, 4.56749, 4.1329, -19.50706, -2.28786, 11.35747, 4.55941, 9.04341, -11.72194, 2.15381, 5.14344, -12.82158, 16.08209, -23.19814, 1.81836 ]
- },
- {
- "time": 0.2,
- "vertices": [ -3.95581, 36.12203, 37.20779, -0.87419, 21.29579, -15.76854, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 7.70584, -0.7169, -6.69733, -2.62048, 17.91826, 7.77333, -12.2858, 3.25454, -12.75876, 3.71516, 9.67891, 15.48546 ]
- },
- {
- "time": 0.2333,
- "vertices": [ -11.9371, 26.01078, 2.91821, -0.27533, 7.69899, -17.45375, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 7.70584, -0.7169, -6.69733, -2.62048, 17.91826, 7.77333, -4.30551, -6.01406, -12.75876, 3.71516, -5.10017, 17.59191 ]
- },
- {
- "time": 0.2667,
- "vertices": [ 0.5959, 23.58176, 20.74303, 0.93943, 7.69899, -17.45375, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 20.51733, 2.52203, 13.35544, 2.64274, 24.32408, -1.94308, 8.50604, -20.99353, 13.14276, 5.73959, 6.31876, 19.2114, 16.98909, 0.80981 ]
- }
- ]
+ "smoke-glow": {
+ "deform": [
+ {
+ "time": 0.1333,
+ "vertices": [ -14.17073, 19.14352, 0, 0, -10.97961, -15.09065, -5.79558, -24.82121, 0.68117, -17.78759, -1.1179, -5.4463, 0, 0, 0, 0, 17.52957, 6.89397, -0.33841, -2.21582, 5.51004, 18.88118, -6.80153, 20.91101 ]
+ },
+ {
+ "time": 0.1667,
+ "vertices": [ -4.34264, 39.78125, 5.6649, -2.42686, -8.39346, -22.52338, -2.66431, 5.08595, -19.28093, 3.98568, -11.21397, 10.2879, 4.56749, 4.1329, -19.50706, -2.28786, 11.35747, 4.55941, 9.04341, -11.72194, 2.15381, 5.14344, -12.82158, 16.08209, -23.19814, 1.81836 ]
+ },
+ {
+ "time": 0.2,
+ "vertices": [ -3.95581, 36.12203, 37.20779, -0.87419, 21.29579, -15.76854, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 7.70584, -0.7169, -6.69733, -2.62048, 17.91826, 7.77333, -12.2858, 3.25454, -12.75876, 3.71516, 9.67891, 15.48546 ]
+ },
+ {
+ "time": 0.2333,
+ "vertices": [ -11.9371, 26.01078, 2.91821, -0.27533, 7.69899, -17.45375, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 7.70584, -0.7169, -6.69733, -2.62048, 17.91826, 7.77333, -4.30551, -6.01406, -12.75876, 3.71516, -5.10017, 17.59191 ]
+ },
+ {
+ "time": 0.2667,
+ "vertices": [ 0.5959, 23.58176, 20.74303, 0.93943, 7.69899, -17.45375, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 20.51733, 2.52203, 13.35544, 2.64274, 24.32408, -1.94308, 8.50604, -20.99353, 13.14276, 5.73959, 6.31876, 19.2114, 16.98909, 0.80981 ]
+ }
+ ]
+ }
}
}
},
diff --git a/spine-ts/spine-webgl/example/assets/tank-pro.skel b/spine-ts/spine-webgl/example/assets/tank-pro.skel
index 04a33f9c0..f1afa9408 100644
Binary files a/spine-ts/spine-webgl/example/assets/tank-pro.skel and b/spine-ts/spine-webgl/example/assets/tank-pro.skel differ
diff --git a/spine-ts/spine-webgl/example/assets/vine-pro.json b/spine-ts/spine-webgl/example/assets/vine-pro.json
index 31636c386..6c8146d27 100644
--- a/spine-ts/spine-webgl/example/assets/vine-pro.json
+++ b/spine-ts/spine-webgl/example/assets/vine-pro.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "mROo4Xkf3Fs",
- "spine": "4.0.31",
+ "hash": "Si0Beql3I1U",
+ "spine": "4.1.04-beta",
"x": -87.7,
"y": -1.71,
"width": 227.65,
diff --git a/spine-ts/spine-webgl/example/assets/vine-pro.skel b/spine-ts/spine-webgl/example/assets/vine-pro.skel
index 8cf3a402f..a7fbf6006 100644
Binary files a/spine-ts/spine-webgl/example/assets/vine-pro.skel and b/spine-ts/spine-webgl/example/assets/vine-pro.skel differ
diff --git a/spine-ts/spine-webgl/example/barebones-dragon.html b/spine-ts/spine-webgl/example/barebones-dragon.html
new file mode 100644
index 000000000..be0f7111a
--- /dev/null
+++ b/spine-ts/spine-webgl/example/barebones-dragon.html
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spine-ts/spine-webgl/package.json b/spine-ts/spine-webgl/package.json
index 444450d8a..9053673f1 100644
--- a/spine-ts/spine-webgl/package.json
+++ b/spine-ts/spine-webgl/package.json
@@ -1,6 +1,6 @@
{
"name": "@esotericsoftware/spine-webgl",
- "version": "4.0.14",
+ "version": "4.1.0",
"description": "The official Spine Runtimes for the web.",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@@ -30,6 +30,6 @@
},
"homepage": "https://github.com/esotericsoftware/spine-runtimes#readme",
"dependencies": {
- "@esotericsoftware/spine-core": "^4.0.13"
+ "@esotericsoftware/spine-core": "^4.1.0"
}
-}
+}
\ No newline at end of file
diff --git a/spine-ts/spine-webgl/src/PolygonBatcher.ts b/spine-ts/spine-webgl/src/PolygonBatcher.ts
index 1af0f0a31..921b1a098 100644
--- a/spine-ts/spine-webgl/src/PolygonBatcher.ts
+++ b/spine-ts/spine-webgl/src/PolygonBatcher.ts
@@ -72,6 +72,7 @@ export class PolygonBatcher implements Disposable {
}
setBlendMode (srcColorBlend: number, srcAlphaBlend: number, dstBlend: number) {
+ if (this.srcColorBlend == srcColorBlend && this.srcAlphaBlend == srcAlphaBlend && this.dstBlend == dstBlend) return;
this.srcColorBlend = srcColorBlend;
this.srcAlphaBlend = srcAlphaBlend;
this.dstBlend = dstBlend;
diff --git a/spine-ts/spine-webgl/src/SkeletonDebugRenderer.ts b/spine-ts/spine-webgl/src/SkeletonDebugRenderer.ts
index 6e88f4875..bcce09637 100644
--- a/spine-ts/spine-webgl/src/SkeletonDebugRenderer.ts
+++ b/spine-ts/spine-webgl/src/SkeletonDebugRenderer.ts
@@ -76,9 +76,9 @@ export class SkeletonDebugRenderer implements Disposable {
let bone = bones[i];
if (ignoredBones && ignoredBones.indexOf(bone.data.name) > -1) continue;
if (!bone.parent) continue;
- let x = skeletonX + bone.data.length * bone.a + bone.worldX;
- let y = skeletonY + bone.data.length * bone.c + bone.worldY;
- shapes.rectLine(true, skeletonX + bone.worldX, skeletonY + bone.worldY, x, y, this.boneWidth * this.scale);
+ let x = bone.data.length * bone.a + bone.worldX;
+ let y = bone.data.length * bone.c + bone.worldY;
+ shapes.rectLine(true, bone.worldX, bone.worldY, x, y, this.boneWidth * this.scale);
}
if (this.drawSkeletonXY) shapes.x(skeletonX, skeletonY, 4 * this.scale);
}
@@ -92,7 +92,7 @@ export class SkeletonDebugRenderer implements Disposable {
if (attachment instanceof RegionAttachment) {
let regionAttachment = attachment;
let vertices = this.vertices;
- regionAttachment.computeWorldVertices(slot.bone, vertices, 0, 2);
+ regionAttachment.computeWorldVertices(slot, vertices, 0, 2);
shapes.line(vertices[0], vertices[1], vertices[2], vertices[3]);
shapes.line(vertices[2], vertices[3], vertices[4], vertices[5]);
shapes.line(vertices[4], vertices[5], vertices[6], vertices[7]);
@@ -195,7 +195,7 @@ export class SkeletonDebugRenderer implements Disposable {
for (let i = 0, n = bones.length; i < n; i++) {
let bone = bones[i];
if (ignoredBones && ignoredBones.indexOf(bone.data.name) > -1) continue;
- shapes.circle(true, skeletonX + bone.worldX, skeletonY + bone.worldY, 3 * this.scale, SkeletonDebugRenderer.GREEN, 8);
+ shapes.circle(true, bone.worldX, bone.worldY, 3 * this.scale, SkeletonDebugRenderer.GREEN, 8);
}
}
diff --git a/spine-ts/spine-webgl/src/SkeletonRenderer.ts b/spine-ts/spine-webgl/src/SkeletonRenderer.ts
index 0065f8763..d8c2be925 100644
--- a/spine-ts/spine-webgl/src/SkeletonRenderer.ts
+++ b/spine-ts/spine-webgl/src/SkeletonRenderer.ts
@@ -109,7 +109,7 @@ export class SkeletonRenderer {
renderable.vertices = this.vertices;
renderable.numVertices = 4;
renderable.numFloats = clippedVertexSize << 2;
- region.computeWorldVertices(slot.bone, renderable.vertices, 0, clippedVertexSize);
+ region.computeWorldVertices(slot, renderable.vertices, 0, clippedVertexSize);
triangles = SkeletonRenderer.QUAD_TRIANGLES;
uvs = region.uvs;
texture = (region.region.renderObject).page.texture;
diff --git a/spine-ts/spine-webgl/tests/test-drawcalls.html b/spine-ts/spine-webgl/tests/test-drawcalls.html
new file mode 100644
index 000000000..d51dc4289
--- /dev/null
+++ b/spine-ts/spine-webgl/tests/test-drawcalls.html
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+ test
+
+
+
+
\ No newline at end of file
diff --git a/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor.json b/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor.json
index 10edfa6ff..d57e6965e 100644
--- a/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor.json
+++ b/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "c1+xCfJH+TE",
- "spine": "4.0.31",
+ "hash": "cDRfwRDrCkA",
+ "spine": "4.1.04-beta",
"x": -809.16,
"y": -73.54,
"width": 1287.65,
@@ -879,7 +879,7 @@
},
"gun": {
"attachment": [
- { "time": 0.2333, "name": null }
+ { "time": 0.2333 }
]
}
},
@@ -1006,7 +1006,7 @@
},
"gun": {
"attachment": [
- { "name": null },
+ {},
{ "time": 0.3, "name": "gun-nohand" }
]
}
diff --git a/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor.png b/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor.png
index 9140cfc79..474f6316b 100644
Binary files a/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor.png and b/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor.png differ
diff --git a/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.json b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.json
index 4d8c7c2cf..570041b83 100644
--- a/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.json
+++ b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "IQgkYFQG8ng",
- "spine": "4.0.31",
+ "hash": "ttp88nCyPm0",
+ "spine": "4.1.04-beta",
"x": -188.63,
"y": -7.94,
"width": 418.45,
@@ -2427,19 +2427,19 @@
"side-glow1": {
"attachment": [
{ "name": "hoverglow-small" },
- { "time": 0.9667, "name": null }
+ { "time": 0.9667 }
]
},
"side-glow2": {
"attachment": [
{ "time": 0.0667, "name": "hoverglow-small" },
- { "time": 1, "name": null }
+ { "time": 1 }
]
},
"side-glow3": {
"attachment": [
{ "name": "hoverglow-small" },
- { "time": 0.9667, "name": null }
+ { "time": 0.9667 }
]
}
},
@@ -3479,60 +3479,68 @@
{ "mixX": 0, "mixScaleX": 0, "mixShearY": 0 }
]
},
- "deform": {
+ "attachments": {
"default": {
"front-foot": {
- "front-foot": [
- {
- "offset": 26,
- "vertices": [ -0.02832, -5.37024, -0.02832, -5.37024, 3.8188, -3.7757, -0.02832, -5.37024, -3.82159, 3.77847 ]
- }
- ]
+ "front-foot": {
+ "deform": [
+ {
+ "offset": 26,
+ "vertices": [ -0.02832, -5.37024, -0.02832, -5.37024, 3.8188, -3.7757, -0.02832, -5.37024, -3.82159, 3.77847 ]
+ }
+ ]
+ }
},
"front-shin": {
- "front-shin": [
- {
- "offset": 14,
- "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -11.35158, -10.19225, -10.79865, -8.43765, -6.06447, -6.89757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.54892, -3.06021, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.80437, -7.01817 ]
- },
- {
- "time": 0.3667,
- "offset": 14,
- "vertices": [ 0.5298, -1.12677, -11.66571, -9.07211, -25.65866, -17.53735, -25.53217, -16.50978, -11.78232, -11.26097, 0, 0, 0.60487, -1.63589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0, 0, -2.64522, -7.35739, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0.60487, -1.63589, 0.60487, -1.63589, 0.60487, -1.63589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0, 0, -10.06873, -12.0999 ]
- },
- {
- "time": 0.5333,
- "offset": 14,
- "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -7.00775, -8.24771, -6.45482, -6.49312, -6.06447, -6.89757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.54892, -3.06021, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.80437, -7.01817 ]
- },
- {
- "time": 1,
- "offset": 14,
- "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -11.35158, -10.19225, -10.79865, -8.43765, -6.06447, -6.89757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.54892, -3.06021, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.80437, -7.01817 ]
- }
- ]
+ "front-shin": {
+ "deform": [
+ {
+ "offset": 14,
+ "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -11.35158, -10.19225, -10.79865, -8.43765, -6.06447, -6.89757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.54892, -3.06021, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.80437, -7.01817 ]
+ },
+ {
+ "time": 0.3667,
+ "offset": 14,
+ "vertices": [ 0.5298, -1.12677, -11.66571, -9.07211, -25.65866, -17.53735, -25.53217, -16.50978, -11.78232, -11.26097, 0, 0, 0.60487, -1.63589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0, 0, -2.64522, -7.35739, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0.60487, -1.63589, 0.60487, -1.63589, 0.60487, -1.63589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.60487, -1.63589, 0, 0, -10.06873, -12.0999 ]
+ },
+ {
+ "time": 0.5333,
+ "offset": 14,
+ "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -7.00775, -8.24771, -6.45482, -6.49312, -6.06447, -6.89757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.54892, -3.06021, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.80437, -7.01817 ]
+ },
+ {
+ "time": 1,
+ "offset": 14,
+ "vertices": [ 0.5298, -1.12677, -0.85507, -4.20587, -11.35158, -10.19225, -10.79865, -8.43765, -6.06447, -6.89757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.54892, -3.06021, 1.48463, -2.29663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.80437, -7.01817 ]
+ }
+ ]
+ }
},
"hoverboard-board": {
- "hoverboard-board": [
- {
- "curve": [ 0.067, 0, 0.2, 1 ]
- },
- {
- "time": 0.2667,
- "offset": 1,
- "vertices": [ 2.45856, 0, 0, 0, 0, 0, 0, 0, 0, 3.55673, -3.0E-4, 3.55673, -3.0E-4, 0, 0, 0, 0, 0, 0, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, 0, 0, 0, 0, 0, 0, 0, 0, -4.90558, 0.11214, -9.40706, 6.2E-4, -6.34871, 4.3E-4, -6.34925, -6.57018, -6.34925, -6.57018, -6.34871, 4.3E-4, -2.3308, 1.7E-4, -2.33133, -6.57045, -2.33133, -6.57045, -2.3308, 1.7E-4, 0, 0, 1.2E-4, 2.45856, 1.2E-4, 2.45856, 1.2E-4, 2.45856, 1.2E-4, 2.45856, 3.3297, 4.44005, 3.3297, 4.44005, 3.3297, 4.44005, 1.2E-4, 2.45856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.46227, 1.7E-4, -2.46227, 1.7E-4, -2.52316, 1.1313, -2.52316, 1.1313, -2.52316, 1.1313, 1.2E-4, 2.45856, 1.2E-4, 2.45856, -9.40694, 2.45918, 1.88063, 0.44197, -2.9E-4, -3.54808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.52316, 1.1313, -2.52316, 1.1313, -2.52316, 1.1313, -2.46227, 1.7E-4, -2.46227, 1.7E-4, -2.46227, 1.7E-4, 0, 0, 0, 0, 1.2E-4, 2.45856 ],
- "curve": [ 0.45, 0, 0.817, 1 ]
- },
- { "time": 1 }
- ]
+ "hoverboard-board": {
+ "deform": [
+ {
+ "curve": [ 0.067, 0, 0.2, 1 ]
+ },
+ {
+ "time": 0.2667,
+ "offset": 1,
+ "vertices": [ 2.45856, 0, 0, 0, 0, 0, 0, 0, 0, 3.55673, -3.0E-4, 3.55673, -3.0E-4, 0, 0, 0, 0, 0, 0, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, -7.6E-4, -9.84158, 0, 0, 0, 0, 0, 0, 0, 0, -4.90558, 0.11214, -9.40706, 6.2E-4, -6.34871, 4.3E-4, -6.34925, -6.57018, -6.34925, -6.57018, -6.34871, 4.3E-4, -2.3308, 1.7E-4, -2.33133, -6.57045, -2.33133, -6.57045, -2.3308, 1.7E-4, 0, 0, 1.2E-4, 2.45856, 1.2E-4, 2.45856, 1.2E-4, 2.45856, 1.2E-4, 2.45856, 3.3297, 4.44005, 3.3297, 4.44005, 3.3297, 4.44005, 1.2E-4, 2.45856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.46227, 1.7E-4, -2.46227, 1.7E-4, -2.52316, 1.1313, -2.52316, 1.1313, -2.52316, 1.1313, 1.2E-4, 2.45856, 1.2E-4, 2.45856, -9.40694, 2.45918, 1.88063, 0.44197, -2.9E-4, -3.54808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.52316, 1.1313, -2.52316, 1.1313, -2.52316, 1.1313, -2.46227, 1.7E-4, -2.46227, 1.7E-4, -2.46227, 1.7E-4, 0, 0, 0, 0, 1.2E-4, 2.45856 ],
+ "curve": [ 0.45, 0, 0.817, 1 ]
+ },
+ { "time": 1 }
+ ]
+ }
},
"rear-foot": {
- "rear-foot": [
- {
- "offset": 28,
- "vertices": [ -1.93078, 1.34782, -0.31417, 2.33363, 3.05122, 0.33946, 2.31472, -2.01678, 2.17583, -2.05795, -0.04277, -2.99459, 1.15429, 0.26328, 0.97501, -0.67169 ]
- }
- ]
+ "rear-foot": {
+ "deform": [
+ {
+ "offset": 28,
+ "vertices": [ -1.93078, 1.34782, -0.31417, 2.33363, 3.05122, 0.33946, 2.31472, -2.01678, 2.17583, -2.05795, -0.04277, -2.99459, 1.15429, 0.26328, 0.97501, -0.67169 ]
+ }
+ ]
+ }
}
}
}
@@ -5203,7 +5211,7 @@
"portal-bg": {
"attachment": [
{ "name": "portal-bg" },
- { "time": 3, "name": null }
+ { "time": 3 }
]
},
"portal-flare1": {
@@ -5214,7 +5222,7 @@
{ "time": 1.2, "name": "portal-flare1" },
{ "time": 1.2333, "name": "portal-flare2" },
{ "time": 1.2667, "name": "portal-flare1" },
- { "time": 1.3333, "name": null }
+ { "time": 1.3333 }
]
},
"portal-flare2": {
@@ -5224,14 +5232,14 @@
{ "time": 1.1667, "name": "portal-flare1" },
{ "time": 1.2, "name": "portal-flare2" },
{ "time": 1.2333, "name": "portal-flare3" },
- { "time": 1.2667, "name": null }
+ { "time": 1.2667 }
]
},
"portal-flare3": {
"attachment": [
{ "time": 1.2, "name": "portal-flare3" },
{ "time": 1.2333, "name": "portal-flare2" },
- { "time": 1.2667, "name": null }
+ { "time": 1.2667 }
]
},
"portal-flare4": {
@@ -5239,33 +5247,33 @@
{ "time": 1.2, "name": "portal-flare2" },
{ "time": 1.2333, "name": "portal-flare1" },
{ "time": 1.2667, "name": "portal-flare2" },
- { "time": 1.3333, "name": null }
+ { "time": 1.3333 }
]
},
"portal-flare5": {
"attachment": [
{ "time": 1.2333, "name": "portal-flare3" },
{ "time": 1.2667, "name": "portal-flare1" },
- { "time": 1.3333, "name": null }
+ { "time": 1.3333 }
]
},
"portal-flare6": {
"attachment": [
{ "time": 1.2667, "name": "portal-flare3" },
- { "time": 1.3333, "name": null }
+ { "time": 1.3333 }
]
},
"portal-flare7": {
"attachment": [
{ "time": 1.1333, "name": "portal-flare2" },
- { "time": 1.1667, "name": null }
+ { "time": 1.1667 }
]
},
"portal-flare8": {
"attachment": [
{ "time": 1.2, "name": "portal-flare3" },
{ "time": 1.2333, "name": "portal-flare2" },
- { "time": 1.2667, "name": null }
+ { "time": 1.2667 }
]
},
"portal-flare9": {
@@ -5273,7 +5281,7 @@
{ "time": 1.2, "name": "portal-flare2" },
{ "time": 1.2333, "name": "portal-flare3" },
{ "time": 1.2667, "name": "portal-flare1" },
- { "time": 1.3, "name": null }
+ { "time": 1.3 }
]
},
"portal-flare10": {
@@ -5281,25 +5289,25 @@
{ "time": 1.2, "name": "portal-flare2" },
{ "time": 1.2333, "name": "portal-flare1" },
{ "time": 1.2667, "name": "portal-flare3" },
- { "time": 1.3, "name": null }
+ { "time": 1.3 }
]
},
"portal-shade": {
"attachment": [
{ "name": "portal-shade" },
- { "time": 3, "name": null }
+ { "time": 3 }
]
},
"portal-streaks1": {
"attachment": [
{ "name": "portal-streaks1" },
- { "time": 3, "name": null }
+ { "time": 3 }
]
},
"portal-streaks2": {
"attachment": [
{ "name": "portal-streaks2" },
- { "time": 3, "name": null }
+ { "time": 3 }
]
}
},
@@ -7696,7 +7704,7 @@
{ "time": 0.1, "name": "muzzle03" },
{ "time": 0.1333, "name": "muzzle04" },
{ "time": 0.1667, "name": "muzzle05" },
- { "time": 0.2, "name": null }
+ { "time": 0.2 }
]
},
"muzzle-glow": {
@@ -7725,7 +7733,7 @@
],
"attachment": [
{ "time": 0.0333, "name": "muzzle-ring" },
- { "time": 0.2333, "name": null }
+ { "time": 0.2333 }
]
},
"muzzle-ring2": {
@@ -7739,7 +7747,7 @@
],
"attachment": [
{ "time": 0.0333, "name": "muzzle-ring" },
- { "time": 0.2, "name": null }
+ { "time": 0.2 }
]
},
"muzzle-ring3": {
@@ -7753,7 +7761,7 @@
],
"attachment": [
{ "time": 0.0333, "name": "muzzle-ring" },
- { "time": 0.2, "name": null }
+ { "time": 0.2 }
]
},
"muzzle-ring4": {
@@ -7767,7 +7775,7 @@
],
"attachment": [
{ "time": 0.0333, "name": "muzzle-ring" },
- { "time": 0.2, "name": null }
+ { "time": 0.2 }
]
}
},
diff --git a/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.png b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.png
index 3f7eb0644..d1c3ac1be 100644
Binary files a/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.png and b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.png differ
diff --git a/spine-ue4/README.md b/spine-ue4/README.md
index dc7e4331e..959f6c6c5 100644
--- a/spine-ue4/README.md
+++ b/spine-ue4/README.md
@@ -13,7 +13,7 @@ For the official legal terms governing the Spine Runtimes, please read the [Spin
## Spine version
-spine-ue4 works with data exported from Spine 4.0.xx.
+spine-ue4 works with data exported from Spine 4.1.xx.
spine-ue4 supports all Spine features.
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataCompatibility.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataCompatibility.cs
index a249321d0..59b2b238b 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataCompatibility.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataCompatibility.cs
@@ -173,11 +173,16 @@ namespace Spine.Unity {
int i = 0;
if (content.Length >= 3 && content[0] == 0xEF && content[1] == 0xBB && content[2] == 0xBF) // skip potential BOM
i = 3;
+ bool openingBraceFound = false;
for (; i < numCharsToCheck; ++i) {
char c = (char)content[i];
if (char.IsWhiteSpace(c))
continue;
- return c == '{';
+ if (!openingBraceFound) {
+ if (c == '{') openingBraceFound = true;
+ else return false;
+ } else
+ return c == '"';
}
return true;
}
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs
index 01e0915d0..82bf04ef7 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs
@@ -206,8 +206,10 @@ namespace Spine.Unity {
return;
UpdateAnimationStatus(deltaTime);
- if (updateMode == UpdateMode.OnlyAnimationStatus)
+ if (updateMode == UpdateMode.OnlyAnimationStatus) {
+ state.ApplyEventTimelinesOnly(skeleton, issueEvents: false);
return;
+ }
ApplyAnimation();
}
@@ -224,7 +226,7 @@ namespace Spine.Unity {
if (updateMode != UpdateMode.OnlyEventTimelines)
state.Apply(skeleton);
else
- state.ApplyEventTimelinesOnly(skeleton);
+ state.ApplyEventTimelinesOnly(skeleton, issueEvents: true);
if (_UpdateLocal != null)
_UpdateLocal(this);
@@ -246,6 +248,18 @@ namespace Spine.Unity {
if (!wasUpdatedAfterInit) Update(0);
base.LateUpdate();
}
+
+ public override void OnBecameVisible () {
+ UpdateMode previousUpdateMode = updateMode;
+ updateMode = UpdateMode.FullUpdate;
+
+ // OnBecameVisible is called after LateUpdate()
+ if (previousUpdateMode != UpdateMode.FullUpdate &&
+ previousUpdateMode != UpdateMode.EverythingExceptMesh)
+ Update(0);
+ if (previousUpdateMode != UpdateMode.FullUpdate)
+ LateUpdate();
+ }
}
}
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs
index 731836b64..f09291124 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs
@@ -265,10 +265,13 @@ namespace Spine.Unity {
wasUpdatedAfterInit = true;
if (updateMode < UpdateMode.OnlyAnimationStatus)
return;
+
UpdateAnimationStatus(deltaTime);
- if (updateMode == UpdateMode.OnlyAnimationStatus)
+ if (updateMode == UpdateMode.OnlyAnimationStatus) {
+ state.ApplyEventTimelinesOnly(skeleton, issueEvents: false);
return;
+ }
ApplyAnimation();
}
@@ -303,7 +306,7 @@ namespace Spine.Unity {
if (updateMode != UpdateMode.OnlyEventTimelines)
state.Apply(skeleton);
else
- state.ApplyEventTimelinesOnly(skeleton);
+ state.ApplyEventTimelinesOnly(skeleton, issueEvents: true);
if (UpdateLocal != null)
UpdateLocal(this);
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonMecanim.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonMecanim.cs
index b0b2efe7b..3deb15568 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonMecanim.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonMecanim.cs
@@ -140,6 +140,18 @@ namespace Spine.Unity {
base.LateUpdate();
}
+ public override void OnBecameVisible () {
+ UpdateMode previousUpdateMode = updateMode;
+ updateMode = UpdateMode.FullUpdate;
+
+ // OnBecameVisible is called after LateUpdate()
+ if (previousUpdateMode != UpdateMode.FullUpdate &&
+ previousUpdateMode != UpdateMode.EverythingExceptMesh)
+ Update();
+ if (previousUpdateMode != UpdateMode.FullUpdate)
+ LateUpdate();
+ }
+
[System.Serializable]
public class MecanimTranslator {
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs
index 5a6cd51b4..7bbcf08bc 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs
@@ -554,11 +554,13 @@ namespace Spine.Unity {
OnMeshAndMaterialsUpdated(this);
}
- public void OnBecameVisible () {
+ public virtual void OnBecameVisible () {
UpdateMode previousUpdateMode = updateMode;
updateMode = UpdateMode.FullUpdate;
+
+ // OnBecameVisible is called after LateUpdate()
if (previousUpdateMode != UpdateMode.FullUpdate)
- LateUpdate(); // OnBecameVisible is called after LateUpdate()
+ LateUpdate();
}
public void OnBecameInvisible () {
diff --git a/spine-unity/Assets/Spine/version.txt b/spine-unity/Assets/Spine/version.txt
index 6f08af033..e75dccddd 100644
--- a/spine-unity/Assets/Spine/version.txt
+++ b/spine-unity/Assets/Spine/version.txt
@@ -1 +1 @@
-This Spine-Unity runtime works with data exported from Spine Editor version: 4.0.xx
\ No newline at end of file
+This Spine-Unity runtime works with data exported from Spine Editor version: 4.1.xx
\ No newline at end of file
diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateClipInspector.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateClipInspector.cs
index e280ed3de..c160d2d74 100644
--- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateClipInspector.cs
+++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateClipInspector.cs
@@ -79,7 +79,7 @@ namespace Spine.Unity.Editor {
if (timelineClip == null)
return;
- float blendInDur = (float)timelineClip.blendInDuration;
+ float blendInDur = System.Math.Max((float)timelineClip.blendInDuration, (float)timelineClip.easeInDuration);
bool isBlendingNow = blendInDur > 0;
bool wasBlendingBefore = timelineClipInfo.previousBlendInDuration > 0;
diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs
index c5bdefbae..aa9fa5086 100644
--- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs
+++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs
@@ -38,8 +38,10 @@ namespace Spine.Unity.Playables {
public class SpineAnimationStateMixerBehaviour : PlayableBehaviour {
float[] lastInputWeights;
- bool lastAnyTrackPlaying = false;
+ bool lastAnyClipPlaying = false;
public int trackIndex;
+ ScriptPlayable[] startingClips
+ = new ScriptPlayable[2];
IAnimationStateComponent animationStateComponent;
bool pauseWithDirector = true;
@@ -135,60 +137,81 @@ namespace Spine.Unity.Playables {
this.lastInputWeights[i] = default(float);
}
var lastInputWeights = this.lastInputWeights;
- bool anyTrackPlaying = false;
+ int numStartingClips = 0;
+ bool anyClipPlaying = false;
// Check all clips. If a clip that was weight 0 turned into weight 1, call SetAnimation.
for (int i = 0; i < inputCount; i++) {
float lastInputWeight = lastInputWeights[i];
float inputWeight = playable.GetInputWeight(i);
- bool trackStarted = lastInputWeight == 0 && inputWeight > 0;
+ bool clipStarted = lastInputWeight == 0 && inputWeight > 0;
if (inputWeight > 0)
- anyTrackPlaying = true;
+ anyClipPlaying = true;
lastInputWeights[i] = inputWeight;
- if (trackStarted) {
- ScriptPlayable inputPlayable = (ScriptPlayable)playable.GetInput(i);
- SpineAnimationStateBehaviour clipData = inputPlayable.GetBehaviour();
-
- pauseWithDirector = !clipData.dontPauseWithDirector;
- endAtClipEnd = !clipData.dontEndWithClip;
- endMixOutDuration = clipData.endMixOutDuration;
-
- if (clipData.animationReference == null) {
- float mixDuration = clipData.customDuration ? clipData.mixDuration : state.Data.DefaultMix;
- state.SetEmptyAnimation(trackIndex, mixDuration);
- } else {
- if (clipData.animationReference.Animation != null) {
- Spine.TrackEntry trackEntry = state.SetAnimation(trackIndex, clipData.animationReference.Animation, clipData.loop);
-
- trackEntry.EventThreshold = clipData.eventThreshold;
- trackEntry.DrawOrderThreshold = clipData.drawOrderThreshold;
- trackEntry.TrackTime = (float)inputPlayable.GetTime() * (float)inputPlayable.GetSpeed();
- trackEntry.TimeScale = (float)inputPlayable.GetSpeed();
- trackEntry.AttachmentThreshold = clipData.attachmentThreshold;
- trackEntry.HoldPrevious = clipData.holdPrevious;
-
- if (clipData.customDuration)
- trackEntry.MixDuration = clipData.mixDuration;
-
- timelineStartedTrackEntry = trackEntry;
- }
- //else Debug.LogWarningFormat("Animation named '{0}' not found", clipData.animationName);
- }
-
- // Ensure that the first frame ends with an updated mesh.
- if (skeletonAnimation) {
- skeletonAnimation.Update(0);
- skeletonAnimation.LateUpdate();
- } else if (skeletonGraphic) {
- skeletonGraphic.Update(0);
- skeletonGraphic.LateUpdate();
- }
+ if (clipStarted && numStartingClips < 2) {
+ ScriptPlayable clipPlayable = (ScriptPlayable)playable.GetInput(i);
+ startingClips[numStartingClips++] = clipPlayable;
}
}
- if (lastAnyTrackPlaying && !anyTrackPlaying)
+ // unfortunately order of clips can be wrong when two start at the same time, we have to sort clips
+ if (numStartingClips == 2) {
+ ScriptPlayable clipPlayable0 = startingClips[0];
+ ScriptPlayable clipPlayable1 = startingClips[1];
+ if (clipPlayable0.GetDuration() > clipPlayable1.GetDuration()) { // swap, clip 0 ends after clip 1
+ startingClips[0] = clipPlayable1;
+ startingClips[1] = clipPlayable0;
+ }
+ }
+
+ for (int j = 0; j < numStartingClips; ++j) {
+ ScriptPlayable clipPlayable = startingClips[j];
+ SpineAnimationStateBehaviour clipData = clipPlayable.GetBehaviour();
+ pauseWithDirector = !clipData.dontPauseWithDirector;
+ endAtClipEnd = !clipData.dontEndWithClip;
+ endMixOutDuration = clipData.endMixOutDuration;
+
+ if (clipData.animationReference == null) {
+ float mixDuration = clipData.customDuration ? clipData.mixDuration : state.Data.DefaultMix;
+ state.SetEmptyAnimation(trackIndex, mixDuration);
+ } else {
+ if (clipData.animationReference.Animation != null) {
+ TrackEntry currentEntry = state.GetCurrent(trackIndex);
+ Spine.TrackEntry trackEntry;
+ if (currentEntry == null && (clipData.customDuration && clipData.mixDuration > 0)) {
+ state.SetEmptyAnimation(trackIndex, 0); // ease in requires empty animation
+ trackEntry = state.AddAnimation(trackIndex, clipData.animationReference.Animation, clipData.loop, 0);
+ } else
+ trackEntry = state.SetAnimation(trackIndex, clipData.animationReference.Animation, clipData.loop);
+
+ trackEntry.EventThreshold = clipData.eventThreshold;
+ trackEntry.DrawOrderThreshold = clipData.drawOrderThreshold;
+ trackEntry.TrackTime = (float)clipPlayable.GetTime() * (float)clipPlayable.GetSpeed();
+ trackEntry.TimeScale = (float)clipPlayable.GetSpeed();
+ trackEntry.AttachmentThreshold = clipData.attachmentThreshold;
+ trackEntry.HoldPrevious = clipData.holdPrevious;
+
+ if (clipData.customDuration)
+ trackEntry.MixDuration = clipData.mixDuration;
+
+ timelineStartedTrackEntry = trackEntry;
+ }
+ //else Debug.LogWarningFormat("Animation named '{0}' not found", clipData.animationName);
+ }
+
+ // Ensure that the first frame ends with an updated mesh.
+ if (skeletonAnimation) {
+ skeletonAnimation.Update(0);
+ skeletonAnimation.LateUpdate();
+ } else if (skeletonGraphic) {
+ skeletonGraphic.Update(0);
+ skeletonGraphic.LateUpdate();
+ }
+ }
+ startingClips[0] = startingClips[1] = ScriptPlayable.Null;
+ if (lastAnyClipPlaying && !anyClipPlaying)
HandleClipEnd();
- this.lastAnyTrackPlaying = anyTrackPlaying;
+ this.lastAnyClipPlaying = anyClipPlaying;
}
#if SPINE_EDITMODEPOSE
@@ -251,25 +274,25 @@ namespace Spine.Unity.Playables {
if (fromAnimation != null && mixDuration > 0 && toClipTime < mixDuration) {
dummyAnimationState = dummyAnimationState ?? new AnimationState(skeletonComponent.SkeletonDataAsset.GetAnimationStateData());
- var toTrack = dummyAnimationState.GetCurrent(0);
- var fromTrack = toTrack != null ? toTrack.MixingFrom : null;
- bool isAnimationTransitionMatch = (toTrack != null && toTrack.Animation == toAnimation && fromTrack != null && fromTrack.Animation == fromAnimation);
+ var toEntry = dummyAnimationState.GetCurrent(0);
+ var fromEntry = toEntry != null ? toEntry.MixingFrom : null;
+ bool isAnimationTransitionMatch = (toEntry != null && toEntry.Animation == toAnimation && fromEntry != null && fromEntry.Animation == fromAnimation);
if (!isAnimationTransitionMatch) {
dummyAnimationState.ClearTracks();
- fromTrack = dummyAnimationState.SetAnimation(0, fromAnimation, fromClipLoop);
- fromTrack.AllowImmediateQueue();
+ fromEntry = dummyAnimationState.SetAnimation(0, fromAnimation, fromClipLoop);
+ fromEntry.AllowImmediateQueue();
if (toAnimation != null) {
- toTrack = dummyAnimationState.SetAnimation(0, toAnimation, clipData.loop);
- toTrack.HoldPrevious = clipData.holdPrevious;
+ toEntry = dummyAnimationState.SetAnimation(0, toAnimation, clipData.loop);
+ toEntry.HoldPrevious = clipData.holdPrevious;
}
}
// Update track times.
- fromTrack.TrackTime = fromClipTime;
- if (toTrack != null) {
- toTrack.TrackTime = toClipTime;
- toTrack.MixTime = toClipTime;
+ fromEntry.TrackTime = fromClipTime;
+ if (toEntry != null) {
+ toEntry.TrackTime = toClipTime;
+ toEntry.MixTime = toClipTime;
}
// Apply Pose
diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/package-no-spine-unity-dependency.json b/spine-unity/Modules/com.esotericsoftware.spine.timeline/package-no-spine-unity-dependency.json
index 3d231ddbe..48028d42e 100644
--- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/package-no-spine-unity-dependency.json
+++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/package-no-spine-unity-dependency.json
@@ -2,7 +2,7 @@
"name": "com.esotericsoftware.spine.timeline",
"displayName": "Spine Timeline Extensions",
"description": "This plugin provides integration of spine-unity for the Unity Timeline.\n\nPrerequisites:\nIt requires a working installation of the spine-unity runtime (via the spine-unity unitypackage), version 4.0.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)",
- "version": "4.0.5",
+ "version": "4.0.6",
"unity": "2018.3",
"author": {
"name": "Esoteric Software",
diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/package.json b/spine-unity/Modules/com.esotericsoftware.spine.timeline/package.json
index f03c692b2..2110d205b 100644
--- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/package.json
+++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/package.json
@@ -2,7 +2,7 @@
"name": "com.esotericsoftware.spine.timeline",
"displayName": "Spine Timeline Extensions",
"description": "This plugin provides integration of spine-unity for the Unity Timeline.\n\nPrerequisites:\nIt requires a working installation of the spine-unity and spine-csharp runtimes as UPM packages (not as spine-unity unitypackage), version 4.0.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)",
- "version": "4.0.5",
+ "version": "4.0.6",
"unity": "2018.3",
"author": {
"name": "Esoteric Software",
diff --git a/spine-unity/README.md b/spine-unity/README.md
index 1713c411b..f2dc3380f 100644
--- a/spine-unity/README.md
+++ b/spine-unity/README.md
@@ -14,7 +14,7 @@ For the official legal terms governing the Spine Runtimes, please read the [Spin
## Spine version
-spine-unity works with data exported from Spine 4.0.xx.
+spine-unity works with data exported from Spine 4.1.xx.
spine-unity supports all Spine features.
diff --git a/spine-xna/README.md b/spine-xna/README.md
index c4ab3b4c0..f3dc7f9c3 100644
--- a/spine-xna/README.md
+++ b/spine-xna/README.md
@@ -14,7 +14,7 @@ For the official legal terms governing the Spine Runtimes, please read the [Spin
## Spine version
-spine-xna works with data exported from Spine 4.0.xx.
+spine-xna works with data exported from Spine 4.1.xx.
spine-xna supports all Spine features.
diff --git a/spine-xna/example/data/coin-pro.json b/spine-xna/example/data/coin-pro.json
index e0e3518a0..3b5cb6d61 100644
--- a/spine-xna/example/data/coin-pro.json
+++ b/spine-xna/example/data/coin-pro.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "svidebPqqeg",
- "spine": "4.0.31",
+ "hash": "5q2VQysgSd0",
+ "spine": "4.1.04-beta",
"x": -152.5,
"y": -151,
"width": 305,
diff --git a/spine-xna/example/data/coin-pro.skel b/spine-xna/example/data/coin-pro.skel
index fef208f02..5823f044b 100644
Binary files a/spine-xna/example/data/coin-pro.skel and b/spine-xna/example/data/coin-pro.skel differ
diff --git a/spine-xna/example/data/mix-and-match-pro.json b/spine-xna/example/data/mix-and-match-pro.json
index 809b2c7d1..b3398827f 100644
--- a/spine-xna/example/data/mix-and-match-pro.json
+++ b/spine-xna/example/data/mix-and-match-pro.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "bR3EmyUwO+g",
- "spine": "4.0.31",
+ "hash": "mFaJu+5zxGE",
+ "spine": "4.1.04-beta",
"x": -240.58,
"y": -3.38,
"width": 410.36,
@@ -5263,37 +5263,37 @@
"slots": {
"eye-back-iris": {
"attachment": [
- { "time": 0.0333, "name": null },
+ { "time": 0.0333 },
{ "time": 0.0732, "name": "eye-back-iris" }
]
},
"eye-back-pupil": {
"attachment": [
- { "time": 0.0333, "name": null },
+ { "time": 0.0333 },
{ "time": 0.0732, "name": "eye-back-pupil" }
]
},
"eye-back-white": {
"attachment": [
- { "time": 0.0333, "name": null },
+ { "time": 0.0333 },
{ "time": 0.0732, "name": "eye-back-white" }
]
},
"eye-front-iris": {
"attachment": [
- { "time": 0.0333, "name": null },
+ { "time": 0.0333 },
{ "time": 0.0732, "name": "eye-front-iris" }
]
},
"eye-front-pupil": {
"attachment": [
- { "time": 0.0333, "name": null },
+ { "time": 0.0333 },
{ "time": 0.0732, "name": "eye-front-pupil" }
]
},
"eye-front-white": {
"attachment": [
- { "time": 0.0333, "name": null },
+ { "time": 0.0333 },
{ "time": 0.0732, "name": "eye-front-white" }
]
}
@@ -6028,49 +6028,49 @@
"slots": {
"eye-back-iris": {
"attachment": [
- { "time": 0.1333, "name": null },
+ { "time": 0.1333 },
{ "time": 0.1732, "name": "eye-back-iris" },
- { "time": 2.2667, "name": null },
+ { "time": 2.2667 },
{ "time": 2.3, "name": "eye-back-iris" }
]
},
"eye-back-pupil": {
"attachment": [
- { "time": 0.1333, "name": null },
+ { "time": 0.1333 },
{ "time": 0.1732, "name": "eye-back-pupil" },
- { "time": 2.2667, "name": null },
+ { "time": 2.2667 },
{ "time": 2.3, "name": "eye-back-pupil" }
]
},
"eye-back-white": {
"attachment": [
- { "time": 0.1333, "name": null },
+ { "time": 0.1333 },
{ "time": 0.1732, "name": "eye-back-white" },
- { "time": 2.2667, "name": null },
+ { "time": 2.2667 },
{ "time": 2.3, "name": "eye-back-white" }
]
},
"eye-front-iris": {
"attachment": [
- { "time": 0.1333, "name": null },
+ { "time": 0.1333 },
{ "time": 0.1732, "name": "eye-front-iris" },
- { "time": 2.2667, "name": null },
+ { "time": 2.2667 },
{ "time": 2.3, "name": "eye-front-iris" }
]
},
"eye-front-pupil": {
"attachment": [
- { "time": 0.1333, "name": null },
+ { "time": 0.1333 },
{ "time": 0.1732, "name": "eye-front-pupil" },
- { "time": 2.2667, "name": null },
+ { "time": 2.2667 },
{ "time": 2.3, "name": "eye-front-pupil" }
]
},
"eye-front-white": {
"attachment": [
- { "time": 0.1333, "name": null },
+ { "time": 0.1333 },
{ "time": 0.1732, "name": "eye-front-white" },
- { "time": 2.2667, "name": null },
+ { "time": 2.2667 },
{ "time": 2.3, "name": "eye-front-white" }
]
}
diff --git a/spine-xna/example/data/mix-and-match.png b/spine-xna/example/data/mix-and-match.png
index a99960842..441cd2a81 100644
Binary files a/spine-xna/example/data/mix-and-match.png and b/spine-xna/example/data/mix-and-match.png differ
diff --git a/spine-xna/example/data/raptor-pro.json b/spine-xna/example/data/raptor-pro.json
index 10edfa6ff..d57e6965e 100644
--- a/spine-xna/example/data/raptor-pro.json
+++ b/spine-xna/example/data/raptor-pro.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "c1+xCfJH+TE",
- "spine": "4.0.31",
+ "hash": "cDRfwRDrCkA",
+ "spine": "4.1.04-beta",
"x": -809.16,
"y": -73.54,
"width": 1287.65,
@@ -879,7 +879,7 @@
},
"gun": {
"attachment": [
- { "time": 0.2333, "name": null }
+ { "time": 0.2333 }
]
}
},
@@ -1006,7 +1006,7 @@
},
"gun": {
"attachment": [
- { "name": null },
+ {},
{ "time": 0.3, "name": "gun-nohand" }
]
}
diff --git a/spine-xna/example/data/spineboy-pro.skel b/spine-xna/example/data/spineboy-pro.skel
index 6f4f53ff6..45d5d9460 100644
Binary files a/spine-xna/example/data/spineboy-pro.skel and b/spine-xna/example/data/spineboy-pro.skel differ
diff --git a/spine-xna/example/data/spineboy.png b/spine-xna/example/data/spineboy.png
index 3f7eb0644..d1c3ac1be 100644
Binary files a/spine-xna/example/data/spineboy.png and b/spine-xna/example/data/spineboy.png differ
diff --git a/spine-xna/example/data/tank-pro.json b/spine-xna/example/data/tank-pro.json
index 1abcc7bfe..267df085d 100644
--- a/spine-xna/example/data/tank-pro.json
+++ b/spine-xna/example/data/tank-pro.json
@@ -1,7 +1,7 @@
{
"skeleton": {
- "hash": "3P3VgYJ8Bxk",
- "spine": "4.0.31",
+ "hash": "zExzm/6YDxM",
+ "spine": "4.1.04-beta",
"x": -5852.65,
"y": -348.5,
"width": 7202.61,
@@ -3420,7 +3420,7 @@
"slots": {
"rock": {
"attachment": [
- { "name": null }
+ {}
]
},
"smoke-glow": {
@@ -3432,7 +3432,7 @@
],
"attachment": [
{ "time": 0.0667, "name": "smoke-glow" },
- { "time": 0.3, "name": null }
+ { "time": 0.3 }
]
},
"smoke-puff1-bg": {
@@ -4049,7 +4049,7 @@
],
"attachment": [
{ "time": 0.0667, "name": "smoke-glow" },
- { "time": 0.2667, "name": null }
+ { "time": 0.2667 }
]
}
},
@@ -4870,65 +4870,69 @@
]
}
},
- "deform": {
+ "attachments": {
"default": {
"clipping": {
- "clipping": [
- {
- "time": 0.0667,
- "offset": 54,
- "vertices": [ 4.59198, -4.59192 ]
- },
- {
- "time": 0.1333,
- "offset": 8,
- "vertices": [ -8.97369, -1.88211, 9.11177, 1.02258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14.73321, -45.16878, -30.31448, -84.4631, -32.24969, -108.78421, 70.26825, -36.90201 ]
- },
- {
- "time": 0.1667,
- "offset": 8,
- "vertices": [ -11.32373, -1.65065, 11.42179, 0.53259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15.36503, -69.18713, -4.45626, -121.90839, 5.46554, -115.23274, 71.78526, -33.85687 ]
- },
- {
- "time": 0.2,
- "offset": 8,
- "vertices": [ -8.70522, 1.02196, 8.65102, -1.4101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.59198, -4.59192 ]
- },
- {
- "time": 0.2333,
- "offset": 8,
- "vertices": [ -5.23146, 0.85796, 5.23882, -0.81519 ]
- },
- {
- "time": 0.2667,
- "offset": 54,
- "vertices": [ 4.59198, -4.59192 ]
- }
- ]
+ "clipping": {
+ "deform": [
+ {
+ "time": 0.0667,
+ "offset": 54,
+ "vertices": [ 4.59198, -4.59192 ]
+ },
+ {
+ "time": 0.1333,
+ "offset": 8,
+ "vertices": [ -8.97369, -1.88211, 9.11177, 1.02258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14.73321, -45.16878, -30.31448, -84.4631, -32.24969, -108.78421, 70.26825, -36.90201 ]
+ },
+ {
+ "time": 0.1667,
+ "offset": 8,
+ "vertices": [ -11.32373, -1.65065, 11.42179, 0.53259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15.36503, -69.18713, -4.45626, -121.90839, 5.46554, -115.23274, 71.78526, -33.85687 ]
+ },
+ {
+ "time": 0.2,
+ "offset": 8,
+ "vertices": [ -8.70522, 1.02196, 8.65102, -1.4101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.59198, -4.59192 ]
+ },
+ {
+ "time": 0.2333,
+ "offset": 8,
+ "vertices": [ -5.23146, 0.85796, 5.23882, -0.81519 ]
+ },
+ {
+ "time": 0.2667,
+ "offset": 54,
+ "vertices": [ 4.59198, -4.59192 ]
+ }
+ ]
+ }
},
"smoke-glow": {
- "smoke-glow": [
- {
- "time": 0.1333,
- "vertices": [ -14.17073, 19.14352, 0, 0, -10.97961, -15.09065, -5.79558, -24.82121, 0.68117, -17.78759, -1.1179, -5.4463, 0, 0, 0, 0, 17.52957, 6.89397, -0.33841, -2.21582, 5.51004, 18.88118, -6.80153, 20.91101 ]
- },
- {
- "time": 0.1667,
- "vertices": [ -4.34264, 39.78125, 5.6649, -2.42686, -8.39346, -22.52338, -2.66431, 5.08595, -19.28093, 3.98568, -11.21397, 10.2879, 4.56749, 4.1329, -19.50706, -2.28786, 11.35747, 4.55941, 9.04341, -11.72194, 2.15381, 5.14344, -12.82158, 16.08209, -23.19814, 1.81836 ]
- },
- {
- "time": 0.2,
- "vertices": [ -3.95581, 36.12203, 37.20779, -0.87419, 21.29579, -15.76854, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 7.70584, -0.7169, -6.69733, -2.62048, 17.91826, 7.77333, -12.2858, 3.25454, -12.75876, 3.71516, 9.67891, 15.48546 ]
- },
- {
- "time": 0.2333,
- "vertices": [ -11.9371, 26.01078, 2.91821, -0.27533, 7.69899, -17.45375, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 7.70584, -0.7169, -6.69733, -2.62048, 17.91826, 7.77333, -4.30551, -6.01406, -12.75876, 3.71516, -5.10017, 17.59191 ]
- },
- {
- "time": 0.2667,
- "vertices": [ 0.5959, 23.58176, 20.74303, 0.93943, 7.69899, -17.45375, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 20.51733, 2.52203, 13.35544, 2.64274, 24.32408, -1.94308, 8.50604, -20.99353, 13.14276, 5.73959, 6.31876, 19.2114, 16.98909, 0.80981 ]
- }
- ]
+ "smoke-glow": {
+ "deform": [
+ {
+ "time": 0.1333,
+ "vertices": [ -14.17073, 19.14352, 0, 0, -10.97961, -15.09065, -5.79558, -24.82121, 0.68117, -17.78759, -1.1179, -5.4463, 0, 0, 0, 0, 17.52957, 6.89397, -0.33841, -2.21582, 5.51004, 18.88118, -6.80153, 20.91101 ]
+ },
+ {
+ "time": 0.1667,
+ "vertices": [ -4.34264, 39.78125, 5.6649, -2.42686, -8.39346, -22.52338, -2.66431, 5.08595, -19.28093, 3.98568, -11.21397, 10.2879, 4.56749, 4.1329, -19.50706, -2.28786, 11.35747, 4.55941, 9.04341, -11.72194, 2.15381, 5.14344, -12.82158, 16.08209, -23.19814, 1.81836 ]
+ },
+ {
+ "time": 0.2,
+ "vertices": [ -3.95581, 36.12203, 37.20779, -0.87419, 21.29579, -15.76854, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 7.70584, -0.7169, -6.69733, -2.62048, 17.91826, 7.77333, -12.2858, 3.25454, -12.75876, 3.71516, 9.67891, 15.48546 ]
+ },
+ {
+ "time": 0.2333,
+ "vertices": [ -11.9371, 26.01078, 2.91821, -0.27533, 7.69899, -17.45375, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 7.70584, -0.7169, -6.69733, -2.62048, 17.91826, 7.77333, -4.30551, -6.01406, -12.75876, 3.71516, -5.10017, 17.59191 ]
+ },
+ {
+ "time": 0.2667,
+ "vertices": [ 0.5959, 23.58176, 20.74303, 0.93943, 7.69899, -17.45375, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 20.51733, 2.52203, 13.35544, 2.64274, 24.32408, -1.94308, 8.50604, -20.99353, 13.14276, 5.73959, 6.31876, 19.2114, 16.98909, 0.80981 ]
+ }
+ ]
+ }
}
}
},
diff --git a/spine-xna/example/data/tank.png b/spine-xna/example/data/tank.png
index 8f7eb72da..2227d210a 100644
Binary files a/spine-xna/example/data/tank.png and b/spine-xna/example/data/tank.png differ