From d5354cb6bf52e3edf0ee8fe4ff0895cf869dfa8c Mon Sep 17 00:00:00 2001 From: pharan Date: Tue, 14 Aug 2018 23:45:38 +0800 Subject: [PATCH 01/12] [csharp] Ported stretchy IK. See https://github.com/EsotericSoftware/spine-runtimes/issues/1142 --- spine-csharp/src/Animation.cs | 25 +++++++++++----- spine-csharp/src/IkConstraint.cs | 45 ++++++++++++++++++++-------- spine-csharp/src/IkConstraintData.cs | 9 ++++++ spine-csharp/src/Skeleton.cs | 1 + spine-csharp/src/SkeletonBinary.cs | 3 +- spine-csharp/src/SkeletonJson.cs | 4 ++- 6 files changed, 66 insertions(+), 21 deletions(-) diff --git a/spine-csharp/src/Animation.cs b/spine-csharp/src/Animation.cs index 271e6dcbd..b994172c0 100644 --- a/spine-csharp/src/Animation.cs +++ b/spine-csharp/src/Animation.cs @@ -1210,9 +1210,9 @@ namespace Spine { } public class IkConstraintTimeline : CurveTimeline { - public const int ENTRIES = 3; - private const int PREV_TIME = -3, PREV_MIX = -2, PREV_BEND_DIRECTION = -1; - private const int MIX = 1, BEND_DIRECTION = 2; + public const int ENTRIES = 4; + private const int PREV_TIME = -4, PREV_MIX = -3, PREV_BEND_DIRECTION = -2, PREV_STRETCH = -1; + private const int MIX = 1, BEND_DIRECTION = 2, STRETCH = 3; internal int ikConstraintIndex; internal float[] frames; @@ -1230,11 +1230,12 @@ namespace Spine { } /// Sets the time, mix and bend direction of the specified keyframe. - public void SetFrame (int frameIndex, float time, float mix, int bendDirection) { + public void SetFrame (int frameIndex, float time, float mix, int bendDirection, bool stretch) { frameIndex *= ENTRIES; frames[frameIndex] = time; frames[frameIndex + MIX] = mix; frames[frameIndex + BEND_DIRECTION] = bendDirection; + frames[frameIndex + STRETCH] = stretch ? 1 : 0; } override public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList firedEvents, float alpha, MixBlend blend, MixDirection direction) { @@ -1245,10 +1246,12 @@ namespace Spine { case MixBlend.Setup: constraint.mix = constraint.data.mix; constraint.bendDirection = constraint.data.bendDirection; + constraint.stretch = constraint.data.stretch; return; case MixBlend.First: constraint.mix += (constraint.data.mix - constraint.mix) * alpha; constraint.bendDirection = constraint.data.bendDirection; + constraint.stretch = constraint.data.stretch; return; } return; @@ -1257,11 +1260,19 @@ namespace Spine { if (time >= frames[frames.Length - ENTRIES]) { // Time is after last frame. if (blend == MixBlend.Setup) { constraint.mix = constraint.data.mix + (frames[frames.Length + PREV_MIX] - constraint.data.mix) * alpha; - constraint.bendDirection = direction == MixDirection.Out ? constraint.data.bendDirection - : (int)frames[frames.Length + PREV_BEND_DIRECTION]; + if (direction == MixDirection.Out) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.stretch = constraint.data.stretch; + } else { + constraint.bendDirection = (int)frames[frames.Length + PREV_BEND_DIRECTION]; + constraint.stretch = frames[frames.Length + PREV_STRETCH] != 0; + } } else { constraint.mix += (frames[frames.Length + PREV_MIX] - constraint.mix) * alpha; - if (direction == MixDirection.In) constraint.bendDirection = (int)frames[frames.Length + PREV_BEND_DIRECTION]; + if (direction == MixDirection.In) { + constraint.bendDirection = (int)frames[frames.Length + PREV_BEND_DIRECTION]; + constraint.stretch = frames[frames.Length + PREV_STRETCH] != 0; + } } return; } diff --git a/spine-csharp/src/IkConstraint.cs b/spine-csharp/src/IkConstraint.cs index 9d188a69e..721d5e617 100644 --- a/spine-csharp/src/IkConstraint.cs +++ b/spine-csharp/src/IkConstraint.cs @@ -35,14 +35,24 @@ namespace Spine { internal IkConstraintData data; internal ExposedList bones = new ExposedList(); internal Bone target; - internal float mix; internal int bendDirection; + internal bool stretch; + internal float mix; public IkConstraintData Data { get { return data; } } public int Order { get { return data.order; } } public ExposedList Bones { get { return bones; } } public Bone Target { get { return target; } set { target = value; } } public int BendDirection { get { return bendDirection; } set { bendDirection = value; } } + + /// + /// When true, if the target is out of range, the parent bone is scaled on the X axis to reach it. + /// IF the parent bone has nonuniform scale, stretching is not applied. + public bool Stretch { + get { return stretch; } + set { stretch = value; } + } + public float Mix { get { return mix; } set { mix = value; } } public IkConstraint (IkConstraintData data, Skeleton skeleton) { @@ -51,6 +61,7 @@ namespace Spine { this.data = data; mix = data.mix; bendDirection = data.bendDirection; + stretch = data.stretch; bones = new ExposedList(data.bones.Count); foreach (BoneData boneData in data.bones) @@ -68,10 +79,10 @@ namespace Spine { ExposedList bones = this.bones; switch (bones.Count) { case 1: - Apply(bones.Items[0], target.worldX, target.worldY, mix); + Apply(bones.Items[0], target.worldX, target.worldY, stretch, mix); break; case 2: - Apply(bones.Items[0], bones.Items[1], target.worldX, target.worldY, bendDirection, mix); + Apply(bones.Items[0], bones.Items[1], target.worldX, target.worldY, bendDirection, stretch, mix); break; } } @@ -82,7 +93,7 @@ namespace Spine { /// Adjusts the bone rotation so the tip is as close to the target position as possible. The target is specified /// in the world coordinate system. - static public void Apply (Bone bone, float targetX, float targetY, float alpha) { + static public void Apply (Bone bone, float targetX, float targetY, bool stretch, float alpha) { if (!bone.appliedValid) bone.UpdateAppliedTransform(); Bone p = bone.parent; float id = 1 / (p.a * p.d - p.b * p.c); @@ -93,14 +104,21 @@ namespace Spine { if (rotationIK > 180) rotationIK -= 360; else if (rotationIK < -180) rotationIK += 360; - bone.UpdateWorldTransform(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, bone.ascaleX, bone.ascaleY, bone.ashearX, + + float sx = bone.ascaleX; + if (stretch) { + float b = bone.data.length * sx, dd = (float)Math.Sqrt(tx * tx + ty * ty); + if (dd > b && b > 0.0001f) sx *= (dd / b - 1) * alpha + 1; + } + + bone.UpdateWorldTransform(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, bone.ascaleY, bone.ashearX, bone.ashearY); } /// Adjusts the parent and child bone rotations so the tip of the child is as close to the target position as /// possible. The target is specified in the world coordinate system. /// A direct descendant of the parent bone. - static public void Apply (Bone parent, Bone child, float targetX, float targetY, int bendDir, float alpha) { + static public void Apply (Bone parent, Bone child, float targetX, float targetY, int bendDir, bool stretch, float alpha) { if (alpha == 0) { child.UpdateWorldTransform (); return; @@ -108,7 +126,7 @@ namespace Spine { //float px = parent.x, py = parent.y, psx = parent.scaleX, psy = parent.scaleY, csx = child.scaleX; if (!parent.appliedValid) parent.UpdateAppliedTransform(); if (!child.appliedValid) child.UpdateAppliedTransform(); - float px = parent.ax, py = parent.ay, psx = parent.ascaleX, psy = parent.ascaleY, csx = child.ascaleX; + float px = parent.ax, py = parent.ay, psx = parent.ascaleX, sx = psx, psy = parent.ascaleY, csx = child.ascaleX; int os1, os2, s2; if (psx < 0) { psx = -psx; @@ -144,17 +162,20 @@ namespace Spine { c = pp.c; d = pp.d; float id = 1 / (a * d - b * c), x = targetX - pp.worldX, y = targetY - pp.worldY; - float tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py; + float tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py, dd = tx * tx + ty * ty; x = cwx - pp.worldX; y = cwy - pp.worldY; float dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; float l1 = (float)Math.Sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; if (u) { l2 *= psx; - float cos = (tx * tx + ty * ty - l1 * l1 - l2 * l2) / (2 * l1 * l2); + float cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); if (cos < -1) cos = -1; - else if (cos > 1) cos = 1; + else if (cos > 1) { + cos = 1; + if (stretch && l1 + l2 > 0.0001f) sx *= ((float)Math.Sqrt(dd) / (l1 + l2) - 1) * alpha + 1; + } a2 = (float)Math.Acos(cos) * bendDir; a = l1 + l2 * cos; b = l2 * (float)Math.Sin(a2); @@ -162,7 +183,7 @@ namespace Spine { } else { a = psx * l2; b = psy * l2; - float aa = a * a, bb = b * b, dd = tx * tx + ty * ty, ta = (float)Math.Atan2(ty, tx); + float aa = a * a, bb = b * b, ta = (float)Math.Atan2(ty, tx); c = bb * l1 * l1 + aa * dd - aa * bb; float c1 = -2 * bb * l1, c2 = bb - aa; d = c1 * c1 - 4 * c2 * c; @@ -215,7 +236,7 @@ namespace Spine { if (a1 > 180) a1 -= 360; else if (a1 < -180) a1 += 360; - parent.UpdateWorldTransform(px, py, rotation + a1 * alpha, parent.scaleX, parent.ascaleY, 0, 0); + parent.UpdateWorldTransform(px, py, rotation + a1 * alpha, sx, parent.ascaleY, 0, 0); rotation = child.arotation; a2 = ((a2 + os) * MathUtils.RadDeg - child.ashearX) * s2 + os2 - rotation; if (a2 > 180) diff --git a/spine-csharp/src/IkConstraintData.cs b/spine-csharp/src/IkConstraintData.cs index b0b0cf0ce..e1b25a3d2 100644 --- a/spine-csharp/src/IkConstraintData.cs +++ b/spine-csharp/src/IkConstraintData.cs @@ -39,6 +39,7 @@ namespace Spine { internal List bones = new List(); internal BoneData target; internal int bendDirection = 1; + internal bool stretch; internal float mix = 1; /// The IK constraint's name, which is unique within the skeleton. @@ -68,6 +69,14 @@ namespace Spine { set { bendDirection = value; } } + /// + /// When true, if the target is out of range, the parent bone is scaled on the X axis to reach it. + /// If the bone has local nonuniform scale, stretching is not applied. + public bool Stretch { + get { return stretch; } + set { stretch = value; } + } + public float Mix { get { return mix; } set { mix = value; } } public IkConstraintData (string name) { diff --git a/spine-csharp/src/Skeleton.cs b/spine-csharp/src/Skeleton.cs index f774e0490..2ce1b0df4 100644 --- a/spine-csharp/src/Skeleton.cs +++ b/spine-csharp/src/Skeleton.cs @@ -309,6 +309,7 @@ namespace Spine { for (int i = 0, n = ikConstraints.Count; i < n; i++) { IkConstraint constraint = ikConstraintsItems[i]; constraint.bendDirection = constraint.data.bendDirection; + constraint.stretch = constraint.data.stretch; constraint.mix = constraint.data.mix; } diff --git a/spine-csharp/src/SkeletonBinary.cs b/spine-csharp/src/SkeletonBinary.cs index 5402df094..fc46572e2 100644 --- a/spine-csharp/src/SkeletonBinary.cs +++ b/spine-csharp/src/SkeletonBinary.cs @@ -210,6 +210,7 @@ namespace Spine { data.target = skeletonData.bones.Items[ReadVarint(input, true)]; data.mix = ReadFloat(input); data.bendDirection = ReadSByte(input); + data.stretch = ReadBoolean(input); skeletonData.ikConstraints.Add(data); } @@ -648,7 +649,7 @@ namespace Spine { IkConstraintTimeline timeline = new IkConstraintTimeline(frameCount); timeline.ikConstraintIndex = index; for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) { - timeline.SetFrame(frameIndex, ReadFloat(input), ReadFloat(input), ReadSByte(input)); + timeline.SetFrame(frameIndex, ReadFloat(input), ReadFloat(input), ReadSByte(input), ReadBoolean(input)); if (frameIndex < frameCount - 1) ReadCurve(input, frameIndex, timeline); } timelines.Add(timeline); diff --git a/spine-csharp/src/SkeletonJson.cs b/spine-csharp/src/SkeletonJson.cs index 37047feb1..5ba575a80 100644 --- a/spine-csharp/src/SkeletonJson.cs +++ b/spine-csharp/src/SkeletonJson.cs @@ -182,6 +182,7 @@ namespace Spine { if (data.target == null) throw new Exception("Target bone not found: " + targetName); data.bendDirection = GetBoolean(constraintMap, "bendPositive", true) ? 1 : -1; + data.stretch = GetBoolean(constraintMap, "stretch", false); data.mix = GetFloat(constraintMap, "mix", 1); skeletonData.ikConstraints.Add(data); @@ -597,7 +598,8 @@ namespace Spine { float time = (float)valueMap["time"]; float mix = GetFloat(valueMap, "mix", 1); bool bendPositive = GetBoolean(valueMap, "bendPositive", true); - timeline.SetFrame(frameIndex, time, mix, bendPositive ? 1 : -1); + bool stretch = GetBoolean(valueMap, "stretch", false); + timeline.SetFrame(frameIndex, time, mix, bendPositive ? 1 : -1, stretch); ReadCurve(valueMap, timeline, frameIndex); frameIndex++; } From 70448abcdc2bfa874d57e8fbb4d856a07cfde1bb Mon Sep 17 00:00:00 2001 From: pharan Date: Tue, 14 Aug 2018 23:51:33 +0800 Subject: [PATCH 02/12] [csharp] Update formatting and docs. --- spine-csharp/src/IkConstraint.cs | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/spine-csharp/src/IkConstraint.cs b/spine-csharp/src/IkConstraint.cs index 721d5e617..127b51a42 100644 --- a/spine-csharp/src/IkConstraint.cs +++ b/spine-csharp/src/IkConstraint.cs @@ -41,9 +41,23 @@ namespace Spine { public IkConstraintData Data { get { return data; } } public int Order { get { return data.order; } } - public ExposedList Bones { get { return bones; } } - public Bone Target { get { return target; } set { target = value; } } - public int BendDirection { get { return bendDirection; } set { bendDirection = value; } } + + /// The bones that will be modified by this IK constraint. + public ExposedList Bones { + get { return bones; } + } + + /// The bone that is the IK target. + public Bone Target { + get { return target; } + set { target = value; } + } + + /// Controls the bend direction of the IK bones, either 1 or -1. + public int BendDirection { + get { return bendDirection; } + set { bendDirection = value; } + } /// /// When true, if the target is out of range, the parent bone is scaled on the X axis to reach it. @@ -53,7 +67,11 @@ namespace Spine { set { stretch = value; } } - public float Mix { get { return mix; } set { mix = value; } } + /// A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. + public float Mix { + get { return mix; } + set { mix = value; } + } public IkConstraint (IkConstraintData data, Skeleton skeleton) { if (data == null) throw new ArgumentNullException("data", "data cannot be null."); @@ -103,14 +121,13 @@ namespace Spine { if (bone.ascaleX < 0) rotationIK += 180; if (rotationIK > 180) rotationIK -= 360; - else if (rotationIK < -180) rotationIK += 360; - + else if (rotationIK < -180) + rotationIK += 360; float sx = bone.ascaleX; if (stretch) { float b = bone.data.length * sx, dd = (float)Math.Sqrt(tx * tx + ty * ty); if (dd > b && b > 0.0001f) sx *= (dd / b - 1) * alpha + 1; } - bone.UpdateWorldTransform(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, bone.ascaleY, bone.ashearX, bone.ashearY); } From 56566fb7748c99e1fc3f3a8d3a2ff77fbf7c2acc Mon Sep 17 00:00:00 2001 From: pharan Date: Wed, 15 Aug 2018 00:00:43 +0800 Subject: [PATCH 03/12] [unity] Update SkeletonGhostRenderer implementation. --- .../Modules/Ghost/SkeletonGhostRenderer.cs | 70 +++++++++---------- 1 file changed, 33 insertions(+), 37 deletions(-) diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhostRenderer.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhostRenderer.cs index e9f86c881..37e4213f4 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhostRenderer.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhostRenderer.cs @@ -35,17 +35,23 @@ using System.Collections; namespace Spine.Unity.Modules { public class SkeletonGhostRenderer : MonoBehaviour { + static readonly Color32 TransparentBlack = new Color32(0, 0, 0, 0); + const string colorPropertyName = "_Color"; - public float fadeSpeed = 10; - - Color32[] colors; - Color32 black = new Color32(0, 0, 0, 0); + float fadeSpeed = 10; + Color32 startColor; MeshFilter meshFilter; MeshRenderer meshRenderer; + MaterialPropertyBlock mpb; + int colorId; + void Awake () { meshRenderer = gameObject.AddComponent(); meshFilter = gameObject.AddComponent(); + + colorId = Shader.PropertyToID(colorPropertyName); + mpb = new MaterialPropertyBlock(); } public void Initialize (Mesh mesh, Material[] materials, Color32 color, bool additive, float speed, int sortingLayerID, int sortingOrder) { @@ -56,12 +62,9 @@ namespace Spine.Unity.Modules { meshRenderer.sortingLayerID = sortingLayerID; meshRenderer.sortingOrder = sortingOrder; meshFilter.sharedMesh = Instantiate(mesh); - colors = meshFilter.sharedMesh.colors32; - - if ((color.a + color.r + color.g + color.b) > 0) { - for (int i = 0; i < colors.Length; i++) - colors[i] = color; - } + startColor = color; + mpb.SetColor(colorId, color); + meshRenderer.SetPropertyBlock(mpb); fadeSpeed = speed; @@ -72,19 +75,17 @@ namespace Spine.Unity.Modules { } IEnumerator Fade () { - Color32 c; - for (int t = 0; t < 500; t++) { - bool breakout = true; - for (int i = 0; i < colors.Length; i++) { - c = colors[i]; - if (c.a > 0) - breakout = false; + Color32 c = startColor; + Color32 black = SkeletonGhostRenderer.TransparentBlack; - colors[i] = Color32.Lerp(c, black, Time.deltaTime * fadeSpeed); - } - meshFilter.sharedMesh.colors32 = colors; + float t = 1f; + for (float hardTimeLimit = 5f; hardTimeLimit > 0; hardTimeLimit -= Time.deltaTime) { + c = Color32.Lerp(black, startColor, t); + mpb.SetColor(colorId, c); + meshRenderer.SetPropertyBlock(mpb); - if (breakout) + t = Mathf.Lerp(t, 0, Time.deltaTime * fadeSpeed); + if (t <= 0) break; yield return null; @@ -95,25 +96,20 @@ namespace Spine.Unity.Modules { } IEnumerator FadeAdditive () { - Color32 c; - Color32 black = this.black; + Color32 c = startColor; + Color32 black = SkeletonGhostRenderer.TransparentBlack; - for (int t = 0; t < 500; t++) { + float t = 1f; + + for (float hardTimeLimit = 5f; hardTimeLimit > 0; hardTimeLimit -= Time.deltaTime) { + c = Color32.Lerp(black, startColor, t); + mpb.SetColor(colorId, c); + meshRenderer.SetPropertyBlock(mpb); - bool breakout = true; - for (int i = 0; i < colors.Length; i++) { - c = colors[i]; - black.a = c.a; - if (c.r > 0 || c.g > 0 || c.b > 0) - breakout = false; - - colors[i] = Color32.Lerp(c, black, Time.deltaTime * fadeSpeed); - } - - meshFilter.sharedMesh.colors32 = colors; - - if (breakout) + t = Mathf.Lerp(t, 0, Time.deltaTime * fadeSpeed); + if (t <= 0) break; + yield return null; } From c3fb8cb96204c7cb14453cb3c3c7022488b06a05 Mon Sep 17 00:00:00 2001 From: pharan Date: Wed, 15 Aug 2018 00:01:05 +0800 Subject: [PATCH 04/12] [unity] Minor change to SkeletonGhost inspector and default. --- .../Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhost.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhost.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhost.cs index ed791b533..8eb7508c6 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhost.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhost.cs @@ -45,10 +45,9 @@ namespace Spine.Unity.Modules { public bool ghostingEnabled = true; [Tooltip("The time between invididual ghost pieces being spawned.")] [UnityEngine.Serialization.FormerlySerializedAs("spawnRate")] - public float spawnInterval = 0.05f; + public float spawnInterval = 1f/30f; [Tooltip("Maximum number of ghosts that can exist at a time. If the fade speed is not fast enough, the oldest ghost will immediately disappear to enforce the maximum number.")] public int maximumGhosts = 10; - [Tooltip("Fadespeed 1 means it will take 1 second for a piece to fade out. 2 means it will take 1/2 second. 10 means it will take 1/10 of a second.")] public float fadeSpeed = 10; [Header("Rendering")] From 31b48382a5ff0c507a234721a6e9c506959aa6ae Mon Sep 17 00:00:00 2001 From: pharan Date: Wed, 15 Aug 2018 00:01:37 +0800 Subject: [PATCH 05/12] [unity] Minor formatting. --- .../SkeletonGraphic/SkeletonGraphicMirror.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonGraphic/SkeletonGraphicMirror.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonGraphic/SkeletonGraphicMirror.cs index 8fa89962b..dae92d141 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonGraphic/SkeletonGraphicMirror.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonGraphic/SkeletonGraphicMirror.cs @@ -1,4 +1,4 @@ -/****************************************************************************** +/****************************************************************************** * Spine Runtimes Software License v2.5 * * Copyright (c) 2013-2016, Esoteric Software @@ -49,7 +49,8 @@ namespace Spine.Unity.Modules { } void Start () { - if (mirrorOnStart) StartMirroring(); + if (mirrorOnStart) + StartMirroring(); } void LateUpdate () { @@ -57,13 +58,16 @@ namespace Spine.Unity.Modules { } void OnDisable () { - if (restoreOnDisable) RestoreIndependentSkeleton(); + if (restoreOnDisable) + RestoreIndependentSkeleton(); } /// Freeze the SkeletonGraphic on this GameObject, and use the source as the Skeleton to be rendered by the SkeletonGraphic. public void StartMirroring () { - if (source == null) return; - if (skeletonGraphic == null) return; + if (source == null) + return; + if (skeletonGraphic == null) + return; skeletonGraphic.startingAnimation = string.Empty; From 1b238325d605042919662b5e1fd4e82799c02831 Mon Sep 17 00:00:00 2001 From: pharan Date: Wed, 15 Aug 2018 00:03:14 +0800 Subject: [PATCH 06/12] [unity] Clarify version check message. --- .../Spine/Editor/spine-unity/Editor/SpineEditorUtilities.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineEditorUtilities.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineEditorUtilities.cs index d7ab79121..8ecc74075 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineEditorUtilities.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineEditorUtilities.cs @@ -905,7 +905,7 @@ namespace Spine.Unity.Editor { } if (!match) - Debug.LogWarningFormat("Skeleton '{0}' (exported with Spine {1}) may be incompatible with your runtime version: spine-unity v{2}", asset.name, rawVersion, primaryRuntimeVersionDebugString); + Debug.LogWarningFormat("Skeleton '{0}' (exported with Spine {1}) may be incompatible with your runtime version: spine-csharp v{2}", asset.name, rawVersion, primaryRuntimeVersionDebugString); } } From 3d52f1a7e2e3a69ee01640972e27745d38b68b29 Mon Sep 17 00:00:00 2001 From: pharan Date: Wed, 15 Aug 2018 00:04:07 +0800 Subject: [PATCH 07/12] [unity] IkConstraint.stretch --- .../Spine/Editor/spine-unity/Editor/SkeletonDebugWindow.cs | 1 + .../Assets/Spine/Runtime/spine-unity/SkeletonExtensions.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDebugWindow.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDebugWindow.cs index 7bf8406e6..73396814c 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDebugWindow.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDebugWindow.cs @@ -375,6 +375,7 @@ namespace Spine.Unity.Editor { EditorGUI.BeginChangeCheck(); c.Mix = EditorGUILayout.Slider("Mix", c.Mix, MixMin, MixMax); c.BendDirection = EditorGUILayout.Toggle(SpineInspectorUtility.TempContent("Bend Clockwise", tooltip: "IkConstraint.BendDirection == 1 if clockwise; -1 if counterclockwise."), c.BendDirection > 0) ? 1 : -1; + c.Stretch = EditorGUILayout.Toggle(SpineInspectorUtility.TempContent("Stretch", tooltip: "Stretch the parent bone when the target is out of range. Not applied when parent bone has nonuniform scale."), c.Stretch); if (EditorGUI.EndChangeCheck()) requireRepaint = true; EditorGUILayout.Space(); diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonExtensions.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonExtensions.cs index 63c1a52b7..864593ae2 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonExtensions.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonExtensions.cs @@ -503,6 +503,7 @@ namespace Spine { ikc = skeleton.ikConstraints.Items[i]; ikc.mix = ikc.data.mix; ikc.bendDirection = ikc.data.bendDirection; + ikc.stretch = ikc.data.stretch; break; // TransformConstraint From 1ed6d7c48574243552e6090583a4eca8f062442b Mon Sep 17 00:00:00 2001 From: pharan Date: Wed, 15 Aug 2018 16:10:32 +0800 Subject: [PATCH 08/12] [examples] Root motion animation on stretchyman-pro. --- .../stretchyman/export/stretchyman-pro.json | 1586 ++++++++++++++++- .../stretchyman/export/stretchyman-pro.skel | Bin 22324 -> 32784 bytes examples/stretchyman/stretchyman-pro.spine | Bin 38422 -> 46747 bytes 3 files changed, 1585 insertions(+), 1 deletion(-) diff --git a/examples/stretchyman/export/stretchyman-pro.json b/examples/stretchyman/export/stretchyman-pro.json index ff70ea461..9bbcc0aca 100644 --- a/examples/stretchyman/export/stretchyman-pro.json +++ b/examples/stretchyman/export/stretchyman-pro.json @@ -1 +1,1585 @@ -{"skeleton":{"hash":"9WvcFuoaTkaI6rWxoYDw3hFQ8LY","spine":"3.7.23-beta","width":264.5,"height":573.31,"images":"./images/","audio":""},"bones":[{"name":"root"},{"name":"hip","parent":"root","x":28.61,"y":289.9,"color":"ffbd00ff"},{"name":"spine1","parent":"hip","length":34.66,"rotation":86.69,"x":-4.48,"y":12.66,"color":"ffbd00ff"},{"name":"spine2","parent":"spine1","length":41.42,"rotation":16.48,"x":34.66,"color":"ffbd00ff"},{"name":"spine3","parent":"spine2","length":34.45,"rotation":16.17,"x":41.42,"y":0.01,"color":"ffbd00ff"},{"name":"spine4","parent":"spine3","length":37.53,"rotation":-13.63,"x":34.45,"y":0.01,"color":"ffbd00ff"},{"name":"back-arm1","parent":"spine4","length":32.43,"rotation":-154.36,"x":16,"y":-4.58,"transform":"noScale","color":"ff0000ff"},{"name":"back-arm2","parent":"back-arm1","length":34.16,"rotation":3.11,"x":31.88,"y":0.02,"color":"ff0000ff"},{"name":"back-arm3","parent":"back-arm2","length":31.27,"rotation":9.59,"x":34.16,"color":"ff0000ff"},{"name":"back-arm4","parent":"back-arm3","length":33.3,"rotation":14.61,"x":32.04,"y":0.82,"color":"ff0000ff"},{"name":"back-arm5","parent":"back-arm4","length":37.41,"rotation":11.31,"x":33.82,"y":0.02,"color":"ff0000ff"},{"name":"back-arm-ik-target","parent":"root","x":103.52,"y":345.27,"color":"ff3f00ff"},{"name":"back-arm-ik1","parent":"spine4","length":66.57,"rotation":-152.7,"x":16.34,"y":-4.46,"color":"ff0000ff"},{"name":"back-arm-ik2","parent":"back-arm-ik1","length":66.01,"rotation":19.36,"x":66.57,"color":"ff0000ff"},{"name":"back-foot1","parent":"hip","length":33.24,"rotation":-6.56,"x":-34.01,"y":-279.68,"transform":"onlyTranslation","color":"ff0000ff"},{"name":"back-foot2","parent":"back-foot1","length":32.29,"rotation":4.34,"x":33.24,"transform":"noScale","color":"ff0000ff"},{"name":"back-foot3","parent":"back-foot2","length":15.87,"rotation":10.06,"x":32.29,"transform":"noScale","color":"ff0000ff"},{"name":"back-leg1","parent":"hip","length":41,"rotation":-83.66,"x":10.41,"y":1.04,"color":"ff0000ff"},{"name":"back-leg2","parent":"back-leg1","length":41,"rotation":-4.07,"x":34.57,"color":"ff0000ff"},{"name":"back-leg3","parent":"back-leg1","length":41,"rotation":-5.24,"x":81.79,"y":-2.29,"color":"ff0000ff"},{"name":"back-leg4","parent":"back-leg1","length":41,"rotation":-16.6,"x":121.21,"y":-11.27,"color":"ff0000ff"},{"name":"back-leg5","parent":"back-leg1","length":41,"rotation":-32.36,"x":160.16,"y":-24.86,"color":"ff0000ff"},{"name":"back-leg6","parent":"back-leg1","length":41,"rotation":-30.76,"x":197.04,"y":-39.98,"color":"ff0000ff"},{"name":"back-leg7","parent":"back-leg1","length":41,"rotation":-30.63,"x":233.19,"y":-57.32,"color":"ff0000ff"},{"name":"back-leg8","parent":"back-leg1","length":41,"rotation":-33.79,"x":267.29,"y":-77.39,"color":"ff0000ff"},{"name":"back-leg-ik-target","parent":"root","x":46.15,"y":8.68,"color":"ff3f00ff"},{"name":"back-leg-ik1","parent":"hip","length":140.17,"rotation":-88.1,"x":9.63,"y":-0.38,"color":"ff0000ff"},{"name":"back-leg-ik2","parent":"back-leg-ik1","length":148.96,"rotation":-21.32,"x":140.17,"y":-0.01,"color":"ff0000ff"},{"name":"belly","parent":"spine1","x":35.94,"y":-37.69,"color":"ffbd00ff"},{"name":"butt","parent":"hip","x":-32.67,"y":-1.88,"color":"ffbd00ff"},{"name":"front-arm1","parent":"spine4","length":38.33,"rotation":118.58,"x":27.13,"y":4.9,"transform":"noScale","color":"4eff00ff"},{"name":"front-arm2","parent":"front-arm1","length":35.67,"rotation":-0.44,"x":38.33,"y":0.01,"color":"4eff00ff"},{"name":"front-arm3","parent":"front-arm2","length":32.65,"rotation":14.45,"x":35.67,"y":-0.02,"color":"4eff00ff"},{"name":"front-arm4","parent":"front-arm3","length":29.18,"rotation":13.89,"x":32.65,"color":"4eff00ff"},{"name":"front-arm5","parent":"front-arm4","length":46.32,"rotation":16.09,"x":29.18,"transform":"noScale","color":"4eff00ff"},{"name":"front-arm-ik","parent":"root","x":-92.44,"y":331.78,"color":"ff3f00ff"},{"name":"front-arm-ik1","parent":"spine4","length":69.56,"rotation":117.86,"x":27.36,"y":4.22,"color":"50ff00ff"},{"name":"front-arm-ik2","parent":"front-arm-ik1","length":66.72,"rotation":20.13,"x":69.56,"color":"50ff00ff"},{"name":"front-foot1","parent":"hip","length":26.3,"rotation":-10.98,"x":-77.05,"y":-285.04,"transform":"onlyTranslation","color":"50ff00ff"},{"name":"front-foot2","parent":"front-foot1","length":29.12,"rotation":9.61,"x":26.3,"color":"50ff00ff"},{"name":"front-foot3","parent":"front-foot2","length":23.49,"rotation":8.91,"x":29.12,"color":"50ff00ff"},{"name":"front-leg1","parent":"hip","length":37.2,"rotation":-88.97,"x":-23.57,"y":-2,"color":"4fff00ff"},{"name":"front-leg2","parent":"front-leg1","length":37.2,"rotation":3.45,"x":33.75,"y":0.01,"color":"4fff00ff"},{"name":"front-leg3","parent":"front-leg1","length":37.2,"rotation":-6.12,"x":74.4,"y":-1.08,"color":"4fff00ff"},{"name":"front-leg4","parent":"front-leg1","length":37.2,"rotation":-10.02,"x":111.4,"y":-5.28,"color":"4fff00ff"},{"name":"front-leg5","parent":"front-leg1","length":37.2,"rotation":-28.4,"x":147.76,"y":-14.99,"color":"4fff00ff"},{"name":"front-leg6","parent":"front-leg1","length":37.2,"rotation":-24.33,"x":182.41,"y":-27.57,"color":"4fff00ff"},{"name":"front-leg7","parent":"front-leg1","length":37.2,"rotation":-23,"x":216.44,"y":-42.55,"color":"4fff00ff"},{"name":"front-leg8","parent":"front-leg1","length":37.2,"rotation":-31.81,"x":248.61,"y":-61.03,"color":"4fff00ff"},{"name":"front-leg-ik-target","parent":"root","x":-37.74,"y":5.03,"color":"ff3f00ff"},{"name":"front-leg-ik1","parent":"hip","length":140.67,"rotation":-89.23,"x":-23.99,"y":1.89,"color":"50ff00ff"},{"name":"front-leg-ik2","parent":"front-leg-ik1","length":155.95,"rotation":-21.5,"x":140.67,"y":0.03,"color":"50ff00ff"},{"name":"neck1","parent":"spine4","length":13.45,"rotation":-30.66,"x":38.97,"y":-0.83,"color":"ffbd00ff"},{"name":"neck2","parent":"neck1","length":14.13,"rotation":-11.41,"x":13.45,"color":"ffbd00ff"},{"name":"head","parent":"neck2","length":89.06,"rotation":6.98,"x":15.82,"y":0.22,"transform":"noScale","color":"ffbd00ff"}],"slots":[{"name":"back-arm","bone":"root","attachment":"back-arm"},{"name":"back-leg","bone":"root","attachment":"back-leg"},{"name":"body","bone":"root","attachment":"body"},{"name":"head","bone":"head","attachment":"head"},{"name":"front-arm","bone":"root","attachment":"front-arm"},{"name":"back-leg-path","bone":"hip","attachment":"back-leg-path"},{"name":"front-leg-path","bone":"hip","attachment":"front-leg-path"},{"name":"front-arm-path","bone":"spine4"},{"name":"rear-arm-path","bone":"spine4"}],"ik":[{"name":"back-arm-ik","order":3,"bones":["back-arm-ik1","back-arm-ik2"],"target":"back-arm-ik-target","mix":0},{"name":"back-leg-ik","order":0,"bones":["back-leg-ik1","back-leg-ik2"],"target":"back-leg-ik-target","bendPositive":false},{"name":"front-arm-ik","order":2,"bones":["front-arm-ik1","front-arm-ik2"],"target":"front-arm-ik","mix":0},{"name":"front-leg-ik","order":1,"bones":["front-leg-ik1","front-leg-ik2"],"target":"front-leg-ik-target","bendPositive":false}],"transform":[{"name":"back-foot-position","order":8,"bones":["back-foot1"],"target":"back-leg8","rotation":108.8,"x":41.2,"y":-0.03,"scaleX":5.0E-4,"scaleY":-3.0E-4,"shearY":0.1,"rotateMix":0,"scaleMix":0},{"name":"front-foot-position","order":9,"bones":["front-foot1"],"target":"front-leg8","rotation":101.55,"x":38.92,"y":-0.02,"scaleX":4.0E-4,"scaleY":-3.0E-4,"shearY":0.1,"rotateMix":0,"scaleMix":0}],"path":[{"name":"back-arm-path","order":7,"bones":["back-arm1","back-arm2","back-arm3","back-arm4"],"target":"rear-arm-path","spacingMode":"percent","rotateMode":"chainScale","spacing":0.25,"rotateMix":0,"translateMix":0},{"name":"back-leg-path","order":4,"bones":["back-leg1","back-leg2","back-leg3","back-leg4","back-leg5","back-leg6","back-leg7","back-leg8"],"target":"back-leg-path","spacingMode":"percent","rotateMode":"chainScale","spacing":0.125},{"name":"front-arm-path","order":6,"bones":["front-arm1","front-arm2","front-arm3","front-arm4"],"target":"front-arm-path","spacingMode":"percent","rotateMode":"chainScale","spacing":0.25,"rotateMix":0,"translateMix":0},{"name":"front-leg-path","order":5,"bones":["front-leg1","front-leg2","front-leg3","front-leg4","front-leg5","front-leg6","front-leg7","front-leg8"],"target":"front-leg-path","spacingMode":"percent","rotateMode":"chainScale","spacing":0.125}],"skins":{"default":{"back-arm":{"back-arm":{"type":"mesh","uvs":[0.74522,0.00989,0.64111,0.05762,0.56303,0.1559,0.42509,0.25886,0.28974,0.359,0.22988,0.49565,0.21166,0.60797,0.21166,0.69782,0.16481,0.78674,0.14139,0.84757,0.02427,0.88501,0.0529,0.91871,0.37824,0.98797,0.60468,0.98235,0.6307,0.9056,0.73481,0.87752,0.63591,0.81762,0.55262,0.74181,0.38084,0.69876,0.37824,0.60797,0.39906,0.50876,0.51358,0.38521,0.66194,0.28881,0.85454,0.18398,0.97687,0.07541,0.9144,0.00989],"triangles":[11,9,12,9,8,12,12,8,18,13,12,14,12,18,17,18,8,7,14,12,17,11,10,9,14,16,15,14,17,16,7,19,18,7,6,19,6,5,19,19,5,20,5,4,20,20,4,21,4,3,21,21,3,22,3,2,22,22,2,23,2,1,23,23,1,24,1,0,24,0,25,24],"vertices":[1,6,-7.68,-11.48,1,1,6,4.09,-13.63,1,1,6,23.49,-9.36,1,1,7,13.44,-9.23,1,2,7,35.2,-9.62,0.50649,8,-0.58,-9.66,0.49351,1,8,26.04,-6.39,1,1,9,14.15,-6.11,1,2,9,31.54,-5.57,0.66493,10,-3.33,-5.03,0.33507,1,10,13.08,-11.25,1,1,10,24.41,-14.89,1,1,10,30.15,-24.52,1,1,10,36.93,-23.54,1,1,10,54.08,-2.33,1,1,10,55.73,14.15,1,1,10,41.39,18.48,1,1,10,37.29,26.87,1,1,10,24.66,21.67,1,1,10,9.18,18.1,1,2,9,31.33,6.78,0.47881,10,-1.11,7.12,0.52119,1,9,13.77,6.04,1,2,8,24.98,6.17,0.89218,9,-5.48,6.96,0.10782,2,7,32.6,7.29,0.59842,8,-0.32,7.45,0.40158,1,7,11.08,8.85,1,1,6,17.89,11.88,1,1,6,-4.82,9.46,1,1,6,-13.69,-0.69,1],"hull":26,"edges":[0,2,2,4,4,6,6,8,8,10,10,12,12,14,14,16,16,18,18,20,20,22,22,24,24,26,26,28,28,30,30,32,32,34,34,36,36,38,38,40,40,42,42,44,44,46,46,48,48,50,0,50,2,48,4,46,6,44,8,42,10,40,12,38,14,36],"width":72,"height":202}},"back-leg":{"back-leg":{"type":"mesh","uvs":[0.502,0.01179,0.36076,0.06379,0.4057,0.15046,0.44743,0.23916,0.47953,0.32991,0.51163,0.42269,0.52127,0.50629,0.48274,0.58888,0.41212,0.66025,0.3126,0.74182,0.2163,0.81625,0.1232,0.89272,0.00763,0.97429,0.29655,0.98958,0.47407,0.99222,0.64004,0.99468,0.80989,0.9896,0.91291,0.98652,1,0.95797,0.8333,0.94681,0.71067,0.9386,0.57123,0.92031,0.41533,0.89986,0.3447,0.89272,0.36885,0.87178,0.42817,0.82033,0.502,0.74794,0.58226,0.66943,0.6593,0.59092,0.72993,0.50528,0.76524,0.42167,0.78129,0.32481,0.78771,0.23406,0.78771,0.13924,0.72351,0.03728,0.60152,0.00567,0.82117,0.96898,0.67873,0.96396,0.52111,0.9574,0.35936,0.94214,0.19388,0.92922,0.25375,0.88159,0.32792,0.8184],"triangles":[36,20,19,17,19,18,16,37,36,17,16,36,17,36,19,38,22,21,37,21,20,38,21,37,37,20,36,15,38,37,14,38,15,15,37,16,39,23,22,40,23,39,39,22,38,13,40,39,12,40,13,14,39,38,13,39,14,9,8,26,25,42,9,10,9,42,26,25,9,24,42,25,41,10,42,41,42,24,11,10,41,23,41,24,40,11,41,40,41,23,12,11,40,26,8,27,6,5,29,28,6,29,7,6,28,27,7,28,8,7,27,29,5,30,31,5,4,30,5,31,32,4,3,31,4,32,34,1,0,34,0,35,2,1,34,2,34,33,3,2,33,32,3,33],"vertices":[1,17,-19.79,-5.67,1,2,17,-5.62,-22.28,0.83363,18,-41.07,-23.3,0.16637,2,17,22.31,-21.98,0.65187,18,-13.17,-21.89,0.34813,3,17,50.83,-22.11,0.3172,18,15.33,-20.87,0.43086,19,-19.67,-21.09,0.25193,4,17,79.85,-23.29,0.10792,18,44.37,-20.89,0.35417,19,9.3,-19.2,0.3192,20,-25.22,-20.06,0.21872,4,18,74.06,-20.98,0.16486,19,38.93,-17.34,0.32776,20,4.09,-15.38,0.29831,21,-30.1,-17.16,0.20907,3,19,65.54,-17.61,0.17523,20,30.6,-13.11,0.39173,21,-4.12,-11.42,0.43304,3,20,57.03,-15.71,0.19718,21,22.43,-10.53,0.52971,22,-12.97,-9.81,0.27311,3,21,46.05,-13.47,0.40991,22,10.84,-10.17,0.34747,23,-24.93,-10.51,0.24261,3,21,73.39,-18.69,0.19432,22,38.58,-12.41,0.37177,23,2.9,-10.99,0.43391,3,22,64.06,-14.98,0.16664,23,28.49,-11.94,0.56756,24,-7.53,-11.48,0.2658,3,23,54.58,-12.37,0.52114,24,18.56,-10.93,0.36168,14,-3.08,24.95,0.11718,4,23,82.97,-14.36,0.35144,24,47.01,-11.86,0.29521,14,-13.07,-1.67,0.25118,15,-46.3,1.83,0.10216,1,14,16.37,-4.67,1,2,14,34.32,-4.37,0.53487,15,0.74,-4.44,0.46513,3,14,51.1,-4.08,0.14611,15,17.5,-5.42,0.54314,16,-15.51,-2.75,0.31075,2,15,34.67,-4.01,0.40714,16,1.65,-4.36,0.59286,2,15,45.09,-3.16,0.25726,16,12.05,-5.34,0.74274,2,15,53.99,5.81,0.25311,16,22.38,1.94,0.74689,2,15,37.19,9.56,0.4029,16,6.5,8.57,0.5971,3,14,57.07,14.17,0.13352,15,24.84,12.33,0.54644,16,-5.18,13.44,0.32004,4,23,47.09,33.11,0.13131,14,42.64,19.08,0.26349,15,10.82,18.31,0.49746,16,-17.94,21.78,0.10773,4,23,46.46,16.09,0.21159,24,9.37,17.21,0.1068,14,26.51,24.57,0.44951,15,-4.85,25.01,0.23211,3,23,46.8,8.62,0.40111,24,10,9.75,0.24543,14,19.24,26.38,0.35346,3,23,39.71,8.61,0.5825,24,2.91,9.47,0.30792,14,21.25,33.18,0.10958,3,22,59.17,5.89,0.21955,23,22.27,8.58,0.57946,24,-14.51,8.8,0.20099,3,21,71.84,0.47,0.21583,22,34.96,6.47,0.32263,23,-1.92,7.63,0.46154,3,21,45.81,3.96,0.40554,22,8.71,7.12,0.38602,23,-28.17,6.61,0.20845,3,20,56.79,2.13,0.25409,21,19.83,7.12,0.53006,22,-17.46,7.46,0.21585,3,19,66.18,3.45,0.22414,20,29.23,7.92,0.34135,21,-8.25,9.24,0.43451,4,18,76.6,4.51,0.19364,19,39.78,8.26,0.28887,20,2.49,10.19,0.33579,21,-35.06,7.97,0.1817,4,17,82.88,7.08,0.11658,18,46.18,9.58,0.35727,19,9.09,11.32,0.35745,20,-28.36,10.3,0.16869,3,17,54.46,12.11,0.35357,18,17.57,13.46,0.44494,19,-19.71,13.32,0.20149,2,17,24.65,16.69,0.65438,18,-12.4,16.85,0.34562,2,17,-8.38,15.21,0.85331,18,-45.34,14.05,0.14669,1,17,-20.19,4.56,1,2,15,35.89,2.53,0.4051,16,3.99,1.87,0.5949,3,14,54.38,5.92,0.13921,15,21.52,4.3,0.54495,16,-9.85,6.12,0.31584,2,14,37.79,7.63,0.44939,15,5.1,7.27,0.55061,3,23,65.39,20.7,0.11858,14,20.6,11.35,0.75134,15,-11.76,12.27,0.13008,3,23,65.41,1.81,0.3968,24,24.3,0.23,0.28258,14,2.07,14.98,0.32063,3,23,48.01,0.08,0.55395,24,6.94,-0.33,0.33293,14,3.38,30.47,0.11312,3,22,65.95,-2.97,0.19447,23,24.96,-1.58,0.57382,24,-15.99,-0.43,0.23171],"hull":36,"edges":[0,2,2,4,4,6,6,8,8,10,10,12,12,14,14,16,16,18,18,20,20,22,22,24,24,26,34,36,44,46,50,52,52,54,54,56,56,58,58,60,60,62,62,64,64,66,66,68,68,70,0,70,4,66,2,68,40,42,42,44,26,28,28,30,46,48,48,50,36,38,38,40,30,32,32,34,18,52,16,54,14,56,12,58,10,60,8,62,6,64,32,72,72,38,30,74,74,40,72,74,28,76,76,42,74,76,26,78,78,44,76,78,24,80,80,46,78,80,22,82,82,48,80,82,20,84,84,50,82,84],"width":100,"height":318}},"back-leg-path":{"back-leg-path":{"type":"path","lengths":[137.84,291.79,641.23],"vertexCount":9,"vertices":[1,26,-43.15,0.61,1,1,26,-1.31,0.44,1,1,26,63.08,-0.19,1,2,26,72.07,13.66,0.5,27,-69.12,-16.08,0.5,2,26,135.75,0.27,0.5,27,-3.96,-2.03,0.5,2,26,202.92,-15.14,0.5,27,65,14.1,0.5,1,27,71.09,-2.04,1,1,27,149.06,-1.74,1,1,26,368.48,-1.81,1]}},"body":{"body":{"type":"mesh","uvs":[0.35966,0.01351,0.26864,0.04108,0.26204,0.0954,0.34119,0.14478,0.39792,0.19457,0.40451,0.24272,0.38077,0.27893,0.3597,0.3004,0.34119,0.31926,0.34989,0.34326,0.35834,0.36658,0.36552,0.40164,0.37234,0.43499,0.38397,0.4944,0.3956,0.55971,0.39884,0.59858,0.40142,0.62955,0.40216,0.65662,0.3461,0.71564,0.27077,0.78176,0.2201,0.82128,0.17618,0.85553,0.13115,0.88833,0.08238,0.92385,0.00342,0.9796,0.18836,0.99127,0.32172,0.99284,0.46266,0.99451,0.61643,0.98608,0.71618,0.97182,0.61851,0.95821,0.48967,0.95043,0.39458,0.94083,0.27772,0.92904,0.23408,0.9232,0.26692,0.89774,0.30681,0.86681,0.34203,0.83415,0.38369,0.7955,0.45642,0.72874,0.52708,0.66845,0.56032,0.63345,0.57541,0.60109,0.59357,0.56214,0.61643,0.49732,0.63513,0.43963,0.64345,0.40462,0.77081,0.39011,0.84585,0.37025,0.90983,0.35331,0.9674,0.31915,0.97302,0.28585,0.96448,0.23351,0.8952,0.1681,0.79346,0.12643,0.75179,0.10879,0.71799,0.09448,0.66817,0.07237,0.61343,0.04807,0.47868,0.01411,0.49846,0.38826,0.66315,0.34728,0.67333,0.30664,0.8188,0.29655,0.80971,0.24505,0.72829,0.17902,0.68147,0.13902,0.59191,0.09711,0.3904,0.09012,0.53695,0.14981,0.57563,0.19616,0.64483,0.25077,0.79855,0.33476,0.61751,0.97167,0.4773,0.97061,0.23795,0.95673,0.15272,0.92355,0.14158,0.94886,0.23861,0.86092,0.51732,0.30354,0.50696,0.34527,0.50634,0.43735,0.50334,0.4959,0.51086,0.32558,0.50355,0.41057,0.19543,0.89241,0.36492,0.9641],"triangles":[2,1,68,68,1,58,58,1,59,1,0,59,69,67,66,3,68,69,69,68,67,3,2,68,66,56,55,66,67,56,67,57,56,67,58,57,67,68,58,5,70,71,71,70,65,5,4,70,70,66,65,4,69,70,70,69,66,4,3,69,65,54,53,65,66,54,66,55,54,46,61,47,46,80,61,80,83,61,61,62,72,61,83,62,80,9,83,9,8,83,83,79,62,8,7,83,83,7,79,71,6,5,7,6,79,79,6,62,6,71,62,47,72,48,47,61,72,48,72,49,49,72,50,72,63,50,72,62,63,50,63,51,62,64,63,63,52,51,63,64,52,71,65,64,64,53,52,64,65,53,62,71,64,26,86,27,27,74,28,27,86,74,28,73,29,28,74,73,73,30,29,74,31,73,73,31,30,86,32,74,74,32,31,25,75,26,26,75,86,24,77,25,25,77,75,24,23,77,75,33,86,86,33,32,75,77,33,77,34,33,77,76,34,77,23,76,23,22,76,76,85,34,76,22,85,34,85,35,85,78,35,22,21,85,35,78,36,85,21,78,37,36,20,21,20,78,36,78,20,20,19,37,37,19,38,19,18,38,38,18,39,18,17,39,39,17,40,41,40,16,40,17,16,42,41,15,41,16,15,43,42,14,42,15,14,14,82,43,43,82,44,14,13,82,82,81,44,44,81,45,82,13,81,13,12,81,46,45,84,12,84,81,45,81,84,12,11,84,11,60,84,84,60,46,60,80,46,11,10,60,60,10,80,10,9,80],"vertices":[1,5,30.85,2.45,1,2,4,60.42,12.42,0.24859,5,22.32,18.18,0.75141,2,4,39.47,25.25,0.44332,5,-1.06,25.72,0.55668,3,3,48.03,29.46,0.37431,4,14.55,26.45,0.47619,5,-25.57,21.02,0.1495,3,2,50.36,32.58,0.11243,3,24.29,26.8,0.64611,4,-8.99,30.5,0.24146,3,41,-45.22,-8.81,0.10611,2,28.69,30.4,0.49533,3,2.89,30.85,0.39856,3,41,-28.91,-12.45,0.25802,2,12.15,32.8,0.60894,3,-12.29,37.84,0.13304,3,41,-18.5,-14.05,0.28714,2,2.34,35.98,0.51935,29,-7.6,18.95,0.19351,4,41,-10.79,-18.35,0.28478,28,-42.03,75.56,0.10295,2,-6.36,37.32,0.37494,29,-10.2,10.26,0.23733,3,41,0.92,-16.96,0.34087,2,-17.28,35.45,0.32141,29,-8.2,-0.67,0.33772,4,41,10.64,-16.32,0.32691,42,-24.05,-14.9,0.16082,2,-27.58,33.67,0.14432,29,-6.37,-11.05,0.36794,4,41,28.5,-15.63,0.24237,42,-9.55,-15.11,0.27028,43,-45.51,-19.12,0.12132,29,-3.65,-27.88,0.36603,4,41,41.59,-14.89,0.21761,42,6.93,-15.35,0.33285,43,-26.85,-17.49,0.20377,29,-1.3,-43.28,0.24577,3,42,33.83,-15.81,0.47179,43,0,-15.85,0.42627,44,-31.79,-17.82,0.10194,3,42,63.39,-16.48,0.2126,43,29.52,-14.22,0.42737,44,-2.43,-14.39,0.36002,3,43,49.79,-15.51,0.30179,44,14.85,-13.08,0.47127,45,-21.15,-15.64,0.22695,3,43,61.1,-13.41,0.15443,44,29.03,-11.65,0.50848,45,-3.27,-12.45,0.33708,2,44,41.24,-10.8,0.28079,45,8.41,-8.79,0.71921,2,45,36.24,-8.59,0.56513,46,-3.02,-8.84,0.43487,3,45,67.93,-10.06,0.16322,46,28.69,-7.82,0.53712,47,-8.12,-7.7,0.29966,3,46,47.76,-8.47,0.40201,47,10.97,-7.9,0.45131,48,-26.34,-6.21,0.14668,3,46,64.62,-8.06,0.25017,47,27.8,-8.4,0.46039,48,-12.77,-8.82,0.28944,4,46,79.13,-10.24,0.11858,47,42.33,-8.03,0.26981,48,4.53,-8.38,0.48104,38,-1.56,35.6,0.13057,2,48,20.84,-9.2,0.728,38,-5.38,19.56,0.272,1,38,-11.5,-7.3,1,4,48,43.23,16.27,0.2746,38,15.1,-7.51,0.48158,39,-12.29,-5.54,0.12942,40,-41.77,0.94,0.11439,4,48,37,33.94,0.18804,38,33.71,-4.58,0.34252,39,6.54,-5.76,0.18297,40,-23.2,-2.19,0.28647,3,38,53.35,-1.59,0.21646,39,26.41,-6.09,0.26516,40,-3.62,-5.59,0.51838,2,39,47.99,-1.76,0.15753,40,18.37,-4.66,0.84247,1,40,33.16,-0.12,1,2,39,47.98,10.84,0.17387,40,20.32,7.79,0.82613,4,48,9.83,48.43,0.17572,38,53.29,18.7,0.17038,39,29.73,13.92,0.136,40,2.77,13.66,0.5179,4,48,11.45,34.58,0.26313,38,39.26,20.56,0.23037,39,16.21,18.1,0.15679,40,-9.94,19.88,0.3497,4,48,12.41,17.13,0.37057,38,22.11,22.5,0.30409,39,-0.38,22.88,0.18235,40,-25.59,27.17,0.14299,3,48,12.34,10.44,0.4464,38,15.56,23.92,0.2976,39,-6.59,25.37,0.256,5,46,75.96,9.07,0.10563,47,38.15,11.09,0.25495,48,1.65,10.97,0.33578,38,17.99,34.75,0.16323,39,-2.39,35.65,0.14041,3,46,62.62,10.94,0.26064,47,26.05,10.62,0.49792,48,-15.15,10.14,0.24144,3,46,47.27,9.67,0.40348,47,9.53,10.2,0.4787,48,-26.59,11.94,0.11781,3,45,69.23,6.98,0.16044,46,28.64,9.27,0.53936,47,-7.95,9.39,0.3002,2,45,37.36,8.01,0.57649,46,-3.21,7.8,0.42351,2,44,45.49,7.11,0.2935,45,8.38,9.61,0.7065,3,43,62.85,9,0.15446,44,29.41,10.82,0.49324,45,-8.13,9.49,0.3523,3,43,52.15,9.28,0.30575,44,12.84,11.74,0.46742,45,-26.12,8.77,0.22683,3,42,66.66,11.26,0.21798,43,30.62,13.69,0.42844,44,-3.05,13.54,0.35358,3,42,37.7,16.76,0.48246,43,1.32,16.92,0.41752,44,-32.5,14.97,0.10002,4,41,44.35,22.12,0.2346,42,11.91,21.43,0.43853,43,-24.76,19.57,0.2068,2,-58.29,-7.2,0.12007,4,41,28.55,23.57,0.31081,42,-3.77,23.84,0.19158,28,-76.76,29.23,0.21531,2,-42.43,-7.46,0.28231,3,41,22.31,41.64,0.18196,28,-69.84,12.47,0.43955,2,-34.84,-25,0.37848,3,41,19.78,51.42,0.1392,28,-59.84,2.53,0.47896,2,-23.9,-35.17,0.38184,3,41,6.03,61.54,0.10543,28,-52.71,-5.88,0.51007,2,-17.11,-43.61,0.38449,2,28,-37.16,-13.14,0.67427,2,-1.22,-50.83,0.32573,1,28,-22.09,-13.06,1,2,28,1.45,-10.49,0.89019,2,37.4,-48.18,0.10981,3,28,30.41,0.97,0.4302,2,66.35,-36.73,0.16237,3,19.98,-44.2,0.40743,2,3,41.58,-34.52,0.68165,4,-9.45,-33.21,0.31835,2,3,50.69,-30.62,0.51066,4,0.38,-31.99,0.48934,3,3,58.07,-27.45,0.26484,4,8.35,-31.01,0.61475,5,-18.05,-36.28,0.12041,3,3,69.4,-22.88,0.17396,4,20.51,-29.78,0.5644,5,-6.53,-32.23,0.26164,2,4,33.86,-28.42,0.29085,5,6.13,-27.77,0.70915,2,4,56.55,-19.38,0.17381,5,26.05,-13.63,0.82619,5,41,20.79,3.26,0.38867,42,-12.74,4.03,0.17698,28,-69.84,50.18,0.10105,2,-36.22,13.38,0.19581,29,13.98,-19.25,0.13749,4,41,2.69,26.81,0.26409,28,-50.86,29.21,0.2337,2,-16.39,-8.73,0.34628,29,35.79,-0.49,0.15592,3,41,-15.65,28.57,0.15678,28,-33.54,28.78,0.2916,2,2.03,-9.11,0.55162,1,28,-28.18,8.37,1,1,28,-5.01,11,1,3,28,24.12,24.18,0.12052,2,60.07,-13.52,0.21384,3,20.53,-20.16,0.66564,2,3,39.64,-17.85,0.59513,4,-6.68,-16.66,0.40487,3,3,60.96,-9.87,0.26252,4,16.02,-14.92,0.55541,5,-14.39,-18.85,0.18206,2,4,32.69,8.3,0.58729,5,-3.66,7.65,0.41271,2,3,39.53,3.1,0.47136,4,-0.95,3.5,0.52864,1,3,17.89,2.56,1,2,2,27.01,-3.64,0.67245,3,-8.37,-1.32,0.32755,3,41,-2.63,46,0.10033,28,-45.42,10.27,0.52612,2,-9.64,-27.47,0.37356,2,39,47.98,4.75,0.16598,40,19.38,1.78,0.83402,4,48,19.56,50.48,0.12624,38,53.31,9.51,0.16908,39,28.22,4.86,0.24846,40,-0.13,4.94,0.45621,4,48,26.31,16.82,0.32786,38,18.97,9.25,0.38308,39,-5.69,10.34,0.1588,40,-32.78,15.61,0.13026,2,48,16.97,-0.03,0.66865,38,4.23,21.71,0.33135,3,48,28.1,2.86,0.4826,38,4.92,10.15,0.31302,39,-19.39,13.57,0.20437,3,46,63.22,-0.58,0.21069,47,25.96,0.79,0.49387,48,-11.02,1.48,0.29545,3,41,-14.84,8.09,0.24448,28,-33.35,51.23,0.16325,2,2.6,13.54,0.59227,4,41,3.38,4.96,0.28616,28,-51.81,51.13,0.16477,2,-15.87,13.44,0.31892,29,13.85,-0.53,0.23015,4,41,46.09,3.59,0.2409,42,9.06,3.1,0.41152,43,-28.46,0.64,0.21862,29,17.5,-43.07,0.12896,3,42,37.23,1.25,0.47745,43,-0.08,1.26,0.42163,44,-36.26,-5.26,0.10093,4,41,-5.23,6.3,0.25594,28,-43.11,51.32,0.15579,2,-7.17,13.63,0.42092,29,14.17,8.17,0.16735,4,41,33.04,3.37,0.36685,42,-3.97,3.61,0.31093,2,-45.33,9.83,0.17307,29,15.76,-30.15,0.14915,4,46,77.51,-1.16,0.11479,47,40.24,0.95,0.26889,48,3.05,0.72,0.44973,38,7.66,35.33,0.16659,4,48,22.73,34.68,0.22091,38,37.18,9.39,0.26956,39,12.3,7.43,0.20636,40,-15.46,9.95,0.30317],"hull":60,"edges":[0,2,2,4,4,6,6,8,8,10,10,12,24,26,26,28,32,34,34,36,36,38,46,48,48,50,54,56,56,58,58,60,60,62,66,68,76,78,78,80,80,82,86,88,88,90,90,92,92,94,98,100,100,102,102,104,104,106,106,108,116,118,0,118,92,120,120,20,28,86,82,32,34,80,78,36,76,38,12,124,102,126,126,124,126,128,128,130,130,132,132,134,112,134,134,136,136,4,2,116,6,138,138,132,8,140,140,130,10,142,142,128,128,104,130,106,132,108,122,92,100,144,144,122,126,144,144,94,112,114,114,116,108,110,110,112,16,18,18,20,20,22,22,24,12,14,14,16,122,124,94,96,96,98,56,146,146,60,54,148,148,62,146,148,50,150,150,66,46,152,152,68,154,152,154,48,42,156,156,72,14,158,158,124,18,160,160,122,160,120,24,162,162,90,26,164,164,88,162,164,16,166,160,166,166,158,166,124,162,168,168,120,168,22,168,92,38,40,40,42,72,74,74,76,40,74,42,44,44,46,152,170,170,156,44,170,68,70,70,72,170,70,62,64,64,66,148,172,172,150,64,172,50,52,52,54,172,52,154,66,150,154,28,30,30,32,82,84,84,86,30,84],"width":141,"height":452}},"front-arm":{"front-arm":{"type":"mesh","uvs":[0.71401,0.00566,0.67108,0.08129,0.60222,0.15434,0.53633,0.21683,0.44558,0.28705,0.34898,0.35134,0.29097,0.38941,0.25238,0.41472,0.22423,0.44271,0.19483,0.47193,0.15998,0.50658,0.09138,0.59568,0.05498,0.70866,0.02988,0.81366,0.01049,0.94262,0.10495,0.98985,0.25391,0.97421,0.31482,0.88907,0.28834,0.82869,0.13607,0.74572,0.14335,0.71488,0.18317,0.62253,0.25217,0.54221,0.29538,0.50981,0.33787,0.47795,0.38452,0.45013,0.43581,0.41953,0.54711,0.3655,0.68845,0.29832,0.74855,0.35527,0.85874,0.38229,0.99674,0.37645,0.95354,0.33244,0.91356,0.29172,0.87464,0.25208,0.83759,0.21434,0.78083,0.12598,0.78194,0.0683,0.6322,0.23719,0.66925,0.15784,0.75533,0.20967,0.7161,0.11137],"triangles":[30,29,33,30,32,31,40,41,36,39,41,40,40,36,35,38,39,40,28,38,40,34,28,40,34,40,35,28,34,33,29,28,33,30,33,32,41,1,0,37,41,0,36,41,37,39,1,41,39,2,1,19,12,20,13,12,19,18,15,19,16,18,17,15,13,19,15,14,13,15,18,16,21,10,22,11,10,21,20,11,21,12,11,20,9,8,23,22,9,23,10,9,22,26,5,4,25,5,26,6,5,25,24,6,25,7,6,24,23,7,24,8,7,23,38,2,39,3,2,38,27,3,38,27,38,28,4,3,27,26,4,27],"vertices":[1,53,21.67,6.08,1,2,52,18.13,3.37,0.16553,53,3.92,4.24,0.83447,3,30,-6.12,-15.24,0.20965,52,-0.05,8.86,0.53629,5,43.44,6.81,0.25406,1,30,10.36,-12.02,1,2,30,30.62,-10.09,0.88822,31,-7.63,-10.15,0.11178,2,30,50.57,-9.69,0.30996,31,12.31,-9.61,0.69004,2,31,24.21,-9.37,0.86563,32,-13.43,-6.2,0.13437,2,31,32.12,-9.22,0.73143,32,-5.73,-8.02,0.26857,2,31,39.35,-7.59,0.54007,32,1.68,-8.25,0.45993,2,31,46.9,-5.88,0.29037,32,9.42,-8.48,0.70963,2,32,18.59,-8.76,0.66539,33,-15.76,-5.13,0.33461,1,33,6.03,-8.58,1,2,33,31.42,-5.98,0.39257,34,0.49,-6.36,0.60743,1,34,23.8,-9.31,1,1,34,52.37,-11.28,1,1,34,62.39,2.72,1,1,34,58.29,24.21,1,1,34,39.22,32.48,1,1,34,26,28.25,1,1,34,8.33,5.63,1,2,33,28.81,6.64,0.48313,34,1.49,6.49,0.51687,1,33,7.61,5.9,1,3,31,51.67,11.07,0.10767,32,18.26,6.75,0.559,33,-12.35,10.01,0.33333,2,31,42.19,10.25,0.31464,32,8.88,8.32,0.68536,2,31,32.87,9.45,0.59184,32,-0.35,9.86,0.40816,2,31,23.73,9.7,0.83036,32,-9.14,12.39,0.16964,2,30,52.08,9.88,0.29921,31,13.68,9.98,0.70079,2,30,32.19,12.6,0.84687,31,-6.24,12.55,0.15313,1,5,9.42,3.39,1,2,5,-5.05,-1.59,0.472,4,29.16,-0.35,0.528,1,4,16.13,-11.36,1,1,4,7.46,-29.44,1,2,5,-8.23,-31.57,0.5193,4,19,-28.74,0.4807,1,5,2,-28.43,1,1,5,11.96,-25.37,1,1,5,21.44,-22.45,1,3,52,12.7,-14.55,0.25482,53,2.14,-14.4,0.32231,5,42.47,-19.82,0.42287,1,53,13.64,-8.89,1,1,30,3.55,0.91,1,2,52,1.72,-0.73,0.5001,5,40.07,-2.34,0.4999,1,5,25.66,-11.25,1,3,52,13.4,-4.65,0.33234,53,0.86,-4.56,0.48165,5,48.12,-11.66,0.18601],"hull":38,"edges":[0,2,8,10,20,22,22,24,24,26,26,28,28,30,30,32,32,34,34,36,36,38,38,40,40,42,42,44,52,54,54,56,56,58,58,60,60,62,70,72,72,74,0,74,56,76,6,8,76,6,4,6,4,78,78,80,80,70,2,82,82,72,82,78,78,76,2,4,56,80,56,66,62,64,64,66,66,68,68,70,44,46,46,48,18,20,46,18,10,12,12,14,48,50,50,52,12,50,14,16,16,18],"width":145,"height":221}},"front-arm-path":{"front-arm-path":{"type":"path","lengths":[73.64,135.97,291.4],"vertexCount":9,"vertices":[1,36,-21.12,-1.6,1,1,36,0.92,-0.29,1,1,36,16.41,0.79,1,2,36,53.26,-1.74,0.504,37,-15.94,3.84,0.496,2,36,74.54,0.19,0.504,37,4.75,-1.5,0.496,2,36,94.74,2.31,0.504,37,24.5,-6.3,0.496,1,37,46.12,-4.58,1,1,37,66.56,-0.12,1,1,36,147.94,32.21,1]}},"front-leg-path":{"front-leg-path":{"type":"path","lengths":[140.44,297.38,652.13],"vertexCount":9,"vertices":[1,50,-40.7,-0.42,1,1,50,1.49,-0.27,1,1,50,75.42,0.33,1,2,50,82.92,8.5,0.5,51,-58.75,-8.54,0.5,2,50,141.35,0.53,0.5,51,0.45,0.71,0.5,2,50,208.27,-14.84,0.5,51,68.84,18.53,0.5,1,51,73.81,1.42,1,1,51,156.58,0.99,1,1,50,380.6,0.76,1]}},"head":{"head":{"x":45.65,"y":-7.92,"rotation":-70.44,"width":87,"height":102}},"rear-arm-path":{"rear-arm-path":{"type":"path","lengths":[66.62,131.77,281.13],"vertexCount":9,"vertices":[1,12,-19.59,1.53,1,1,12,0.28,-0.13,1,1,12,17.08,-1.7,1,2,12,47.35,-3.26,0.504,13,-19.18,3.46,0.496,2,12,66.76,0.15,0.504,13,0.23,0.07,0.496,2,12,86.18,3.55,0.504,13,19.65,-3.32,0.496,1,13,46.48,-3.02,1,1,13,65.15,0.11,1,1,12,144.73,31.88,1]}}}},"animations":{"sneak":{"bones":{"hip":{"rotate":[{"time":0,"angle":30.27,"curve":"stepped"},{"time":0.1667,"angle":30.27},{"time":0.3333,"angle":-31.29},{"time":0.5333,"angle":-44.75},{"time":0.7333,"angle":-25.5},{"time":0.9,"angle":-9.45},{"time":1.0667,"angle":30.27},{"time":1.2333,"angle":-10.1},{"time":1.6333,"angle":-41.48},{"time":1.8,"angle":30.27}],"translate":[{"time":0,"x":-57.44,"y":-40.93},{"time":0.1667,"x":-16.16,"y":-96.56,"curve":[0.245,0,0.637,0.56]},{"time":0.2667,"x":86,"y":-143.07,"curve":[0.381,0.55,0.742,1]},{"time":0.3333,"x":145.45,"y":-159.28},{"time":0.4333,"x":344.29,"y":-134.95},{"time":0.5333,"x":543.14,"y":-81.1},{"time":0.7333,"x":569.69,"y":-62.13},{"time":0.9,"x":591.81,"y":-46.32},{"time":1.0667,"x":653.14,"y":-96.6,"curve":[0.381,0.55,0.742,1]},{"time":1.1333,"x":710.17,"y":-143.1},{"time":1.2333,"x":795.7,"y":-159.3},{"time":1.3333,"x":986.95,"y":-153.35},{"time":1.4333,"x":1178.2,"y":-111.89},{"time":1.6333,"x":1195.1,"y":-62.1},{"time":1.8,"x":1246.53,"y":-40.93}]},"front-leg-ik-target":{"translate":[{"time":0,"x":-50.43,"y":44.62},{"time":0.1667,"x":-50.43,"y":46.55},{"time":0.3333,"x":-50.43,"y":47},{"time":0.5333,"x":-26.43,"y":50.21,"curve":[0.532,0,0.75,1]},{"time":0.7333,"x":566.44,"y":107.27},{"time":0.9,"x":1215.9,"y":68.21},{"time":1.0667,"x":1235.47,"y":15.8},{"time":1.2333,"x":1235.47,"y":0.97},{"time":1.5667,"x":1230.16,"y":3.76},{"time":1.7,"x":1244,"y":26.77},{"time":1.8,"x":1253.54,"y":44.62}]},"front-foot1":{"rotate":[{"time":0,"angle":-48.39,"curve":"stepped"},{"time":0.3333,"angle":-48.39},{"time":0.7,"angle":-121.35},{"time":0.8,"angle":-80.19},{"time":0.9,"angle":45.59},{"time":1.0667,"angle":2.11},{"time":1.2333,"angle":4.65},{"time":1.5667,"angle":5.67},{"time":1.8,"angle":-48.39}],"scale":[{"time":0.6,"x":1,"y":1},{"time":0.6333,"x":0.955,"y":1},{"time":0.7667,"x":0.821,"y":1},{"time":0.9,"x":1,"y":1},{"time":1.0667,"x":0.851,"y":1},{"time":1.3667,"x":1,"y":1}]},"front-foot3":{"rotate":[{"time":0,"angle":36.33},{"time":0.3333,"angle":28.46},{"time":0.5,"angle":34.85},{"time":0.5333,"angle":30.32},{"time":0.5667,"angle":61.67},{"time":0.7,"angle":-19.47},{"time":0.9,"angle":-0.12},{"time":1.0667,"angle":-7.21},{"time":1.2333,"angle":-11.35},{"time":1.5667,"angle":-11.24},{"time":1.8,"angle":36.33}]},"back-leg-ik-target":{"translate":[{"time":0,"x":516.79,"y":86.68},{"time":0.1667,"x":523.72,"y":16.64},{"time":0.3333,"x":523.03,"y":-5,"curve":"stepped"},{"time":0.7,"x":523.03,"y":-5},{"time":0.9,"x":551.32,"y":41.87},{"time":1.0667,"x":554.24,"y":44.45},{"time":1.1333,"x":555.44,"y":44.75},{"time":1.2,"x":556.61,"y":46.19,"curve":"stepped"},{"time":1.4333,"x":556.61,"y":46.19},{"time":1.5,"x":746.97,"y":74.82},{"time":1.6333,"x":1127.69,"y":103.62},{"time":1.8,"x":1820.76,"y":86.68}]},"back-foot1":{"rotate":[{"time":0,"angle":74.18},{"time":0.1667,"angle":-17.01},{"time":0.3333,"angle":5.06},{"time":0.7,"angle":3.74},{"time":0.9,"angle":-65.56},{"time":1.6333,"angle":-92.53},{"time":1.8,"angle":74.18}],"scale":[{"time":0,"x":0.824,"y":1},{"time":0.1667,"x":0.754,"y":1},{"time":0.3333,"x":0.589,"y":1},{"time":0.5667,"x":0.91,"y":1},{"time":0.9,"x":1,"y":1,"curve":"stepped"},{"time":1.4,"x":1,"y":1},{"time":1.5,"x":0.845,"y":1},{"time":1.8,"x":0.824,"y":1}]},"back-foot2":{"rotate":[{"time":0,"angle":8.14},{"time":0.1667,"angle":-3.21},{"time":0.7,"angle":-1.14},{"time":0.9,"angle":34.12},{"time":1.4333,"angle":46.69},{"time":1.5333,"angle":-15.6},{"time":1.6333,"angle":-11.91},{"time":1.8,"angle":8.14}],"scale":[{"time":0,"x":1,"y":1},{"time":0.1667,"x":0.835,"y":1},{"time":0.3333,"x":1,"y":1}]},"front-arm1":{"rotate":[{"time":0,"angle":-39.72},{"time":0.1667,"angle":-37.3},{"time":0.3333,"angle":30.67},{"time":0.9,"angle":-53.28,"curve":[0.708,0.01,0.75,1]},{"time":1.2333,"angle":36},{"time":1.8,"angle":-39.72}]},"neck1":{"rotate":[{"time":0,"angle":21.95,"curve":"stepped"},{"time":0.1667,"angle":21.95},{"time":0.2667,"angle":30.61},{"time":0.3333,"angle":36.37},{"time":0.7333,"angle":33.6},{"time":1.1667,"angle":23.95},{"time":1.2333,"angle":36.37},{"time":1.6333,"angle":41.16},{"time":1.8,"angle":21.95}]},"neck2":{"rotate":[{"time":0,"angle":-22.93},{"time":0.1667,"angle":-23.96},{"time":0.2667,"angle":8.84},{"time":0.3333,"angle":30.71},{"time":0.7333,"angle":-3.37},{"time":0.9,"angle":-17.57},{"time":1.1667,"angle":2.19},{"time":1.2333,"angle":15.26},{"time":1.6333,"angle":4.42},{"time":1.8,"angle":-22.93}]},"head":{"rotate":[{"time":0,"angle":-22.93},{"time":0.1667,"angle":-13.04},{"time":0.2667,"angle":2.65},{"time":0.3333,"angle":13.1},{"time":0.5,"angle":13.1},{"time":0.7333,"angle":-18.91},{"time":0.9,"angle":-41.78},{"time":1.1667,"angle":-4},{"time":1.2333,"angle":-2.35},{"time":1.6333,"angle":-22.89},{"time":1.8,"angle":-22.93}]},"back-arm1":{"rotate":[{"time":0,"angle":-17.24},{"time":0.1667,"angle":-18.66},{"time":0.3333,"angle":324.99},{"time":0.5667,"angle":-6.42},{"time":0.9,"angle":-14.83},{"time":1.0667,"angle":-16.91},{"time":1.2333,"angle":1.49},{"time":1.4,"angle":2.56},{"time":1.8,"angle":-17.24}],"translate":[{"time":0,"x":-14.26,"y":-6.6}]},"back-leg-ik1":{"scale":[{"time":0,"x":2.186,"y":1},{"time":0.1667,"x":2.229,"y":1},{"time":0.3333,"x":1.532,"y":1},{"time":0.4333,"x":0.947,"y":1},{"time":0.5333,"x":1,"y":1,"curve":"stepped"},{"time":1.0667,"x":1,"y":1},{"time":1.1333,"x":0.893,"y":1},{"time":1.2333,"x":0.957,"y":1},{"time":1.4333,"x":2.315,"y":1},{"time":1.6333,"x":0.774,"y":1},{"time":1.8,"x":2.186,"y":1}]},"front-leg1":{"scale":[{"time":0,"x":1,"y":1.118}]},"back-leg1":{"scale":[{"time":0,"x":1,"y":1.039}]},"front-leg-ik1":{"scale":[{"time":0,"x":1,"y":1},{"time":0.2667,"x":0.859,"y":1},{"time":0.3333,"x":0.972,"y":1},{"time":0.5333,"x":2.356,"y":1,"curve":[0.532,0,0.75,1]},{"time":0.7,"x":1,"y":1},{"time":0.9,"x":2.248,"y":1},{"time":1.0667,"x":2.003,"y":1},{"time":1.2333,"x":1.496,"y":1},{"time":1.3,"x":1.048,"y":1,"curve":[0.34,0.59,0.765,1]},{"time":1.4333,"x":0.779,"y":0.763},{"time":1.8,"x":1,"y":1}]},"front-arm3":{"rotate":[{"time":0,"angle":0},{"time":0.1667,"angle":17.37},{"time":0.3333,"angle":31.94},{"time":0.9,"angle":4.76,"curve":[0.708,0.01,0.75,1]},{"time":1.2333,"angle":39.97},{"time":1.8,"angle":0}]},"spine2":{"rotate":[{"time":0,"angle":-3.49},{"time":0.2667,"angle":-11.58},{"time":0.3333,"angle":-9.03},{"time":0.5,"angle":-2.66},{"time":0.7333,"angle":-5.78},{"time":1.1667,"angle":-11.58},{"time":1.2333,"angle":-6.7},{"time":1.6333,"angle":-2.5},{"time":1.8,"angle":-3.49}]},"spine3":{"rotate":[{"time":0,"angle":-20.41},{"time":0.2667,"angle":-11.58},{"time":0.3333,"angle":-9.03},{"time":0.5,"angle":-2.66},{"time":0.7333,"angle":-10.54},{"time":0.9,"angle":-16.17},{"time":1.1667,"angle":-11.58},{"time":1.2333,"angle":-9.03},{"time":1.6333,"angle":-7.26},{"time":1.8,"angle":-20.41}]},"back-arm3":{"rotate":[{"time":0,"angle":26.23},{"time":0.1667,"angle":53.15},{"time":0.3333,"angle":116.26},{"time":0.5667,"angle":35.72},{"time":0.9,"angle":39.33},{"time":1.0667,"angle":41.19},{"time":1.2333,"angle":78.1},{"time":1.4,"angle":36.16},{"time":1.8,"angle":26.23}]},"back-foot3":{"rotate":[{"time":0,"angle":11.35},{"time":0.7,"angle":-4.24},{"time":0.9,"angle":25.49,"curve":"stepped"},{"time":1.4333,"angle":25.49},{"time":1.5333,"angle":-30.52},{"time":1.6333,"angle":-20.54},{"time":1.8,"angle":11.35}],"scale":[{"time":0,"x":1,"y":1},{"time":0.1667,"x":0.835,"y":1},{"time":0.3333,"x":1,"y":1}]},"spine1":{"rotate":[{"time":0,"angle":10.81},{"time":0.2667,"angle":-28.7},{"time":0.3333,"angle":-24.32},{"time":0.5,"angle":-13.38},{"time":0.7333,"angle":21.62},{"time":0.9,"angle":46.61},{"time":1.1667,"angle":-28.7},{"time":1.2333,"angle":-43.34},{"time":1.6333,"angle":24.89},{"time":1.8,"angle":10.81}]},"spine4":{"rotate":[{"time":0,"angle":0},{"time":0.2667,"angle":-2.8},{"time":0.3333,"angle":-0.82},{"time":0.5,"angle":4.14},{"time":0.7333,"angle":-3.74},{"time":0.9,"angle":-9.37},{"time":1.1667,"angle":-9.02},{"time":1.2333,"angle":-0.82},{"time":1.6333,"angle":3.82},{"time":1.8,"angle":0}]},"front-foot2":{"rotate":[{"time":0,"angle":0},{"time":0.2667,"angle":-1.24},{"time":0.3333,"angle":-0.2},{"time":0.5,"angle":22.72},{"time":0.5333,"angle":26.87},{"time":0.7,"angle":-39.26},{"time":0.9,"angle":11.27},{"time":1.0667,"angle":-18.18},{"time":1.2333,"angle":-2.64},{"time":1.5667,"angle":-5.84},{"time":1.8,"angle":0}]},"belly":{"translate":[{"time":0,"x":3.66,"y":-3.77},{"time":0.2667,"x":13.83,"y":-3.82},{"time":0.6333,"x":-4.11,"y":-3.9},{"time":0.7667,"x":10.21,"y":-2.92},{"time":0.8667,"x":10.3,"y":-7.39},{"time":1.1,"x":-0.45,"y":-1.46},{"time":1.2333,"x":12.38,"y":2.33},{"time":1.3667,"x":11.51,"y":5.53},{"time":1.8,"x":0,"y":0}]},"butt":{"translate":[{"time":0,"x":0,"y":0},{"time":0.7667,"x":9.88,"y":-25.41},{"time":0.8333,"x":15.89,"y":-41.89},{"time":1.2333,"x":-12.49,"y":-33},{"time":1.8,"x":0,"y":0}]}},"deform":{"default":{"back-leg":{"back-leg":[{"time":0.3},{"time":0.3333,"offset":68,"vertices":[-1.72897,2.75446,-1.5253,2.94189,0.0625,3.6552,0.01776,3.65398,0,0,0,0,0,0,0.0625,3.6552,0.01776,3.65398,0.90137,3.54112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.98724,-1.57397,-0.03339,-2.08873,-0.0108,-2.08799,-0.51434,-2.02362,0.98724,-1.57397,0.87167,-1.68002,-0.03339,-2.08873,-0.0108,-2.08799]},{"time":0.4667,"curve":"stepped"},{"time":1.3333},{"time":1.4333,"offset":110,"vertices":[2.52802,0.00428,-0.03569,-4.90118,-3.71692,-3.19397,-4.88019,-0.43807,5.17279,-0.0625,5.1499,-0.4769,-0.07238,-10.06842,-7.6351,-6.56073,6.64206,-0.09958,6.61151,-0.62643,-0.09275,-12.93915,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.01242,-1.65533,-1.25543,-1.0787,0.86096,0.02682,-0.01242,-1.65533,-1.25543,-1.0787]},{"time":1.5}]},"back-leg-path":{"back-leg-path":[{"time":1.4333},{"time":1.5,"vertices":[4.67719,-35.44354,0,0,-11.37146,49.53738,-20.9989,-109.72336,65.45837,-90.53627,-9.56653,-24.74756,11.45203,-23.93552,-19.0719,47.32281,-47.53955,18.58409,34.69244,-51.5341,0,0,13.30164,-100.17206]},{"time":1.5667,"vertices":[-0.9635,-22.43964,0,0,-13.80389,27.61459,-41.00647,-55.1597,7.62653,-96.25755,-24.12604,-24.11285,7.19531,-37.87421,-31.47302,7.7796,-12.34546,-3.32329,26.55981,-38.73888,0,0,-13.62085,-280.84912]},{"time":1.6667}]},"body":{"body":[{"time":0},{"time":0.3333,"offset":164,"vertices":[-0.01179,0.02892,0.00917,0.0298,0,0,1.17781,0.89836,1.48063,-0.04942,-6.68858,-1.30629,4.38938,4.03926,4.59584,3.27733,5.6365,-0.11035,-4.92264,-0.8036,4.54263,1.06504,3.29334,0.58414,2.94214,-1.40272,-4.28855,-0.56444,5.07103,-0.2119,2.95891,-0.75666,1.83514,-2.22984,-4.31062,0.6261,6.11538,-0.87569,3.7923,-1.67126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.17404,0.22007,0.27404,0.06016]},{"time":0.5333,"offset":164,"vertices":[-0.01887,0.04627,0.01467,0.04768,0,0,1.8845,1.43737,2.369,-0.07908,1.46056,-1.33223,-0.75053,-3.7334,-2.8232,-2.55492,-3.80252,-0.19385,2.81923,-1.5031,-0.33163,-6.75651,-4.28408,-5.23484,-6.6292,-1.34549,3.83379,-1.12045,0.51382,-8.79961,-4.81918,-7.38011,-8.4004,-2.66889,3.83379,-1.12045,0.51382,-8.79961,-4.81918,-7.38011,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.27846,0.35212,0.43846,0.09625]},{"time":0.6333,"offset":170,"vertices":[-2.09907,0.04961,-1.94301,1.46154,1.74966,0.25744,0.3765,-3.44555,-2.34343,-2.73069,-3.66285,-0.53693,0,0,0,0,0,0,0,0,1.91689,-0.56022,0.25691,-4.39981,-2.40959,-3.69006,-4.2002,-1.33444,1.91689,-0.56022,0.25691,-4.39981,-2.40959,-3.69006,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.66468,1.25351,0.05177,1.41789]},{"time":0.7333},{"time":0.7667,"offset":264,"vertices":[-2.27499,-1.60417,-2.23926,-1.61371,-2.2196,-1.74294,-1.80919,2.86346,-1.11118,2.362,-1.14221,2.35901,2.63101,1.41101,2.63216,1.41742,-0.8147,8.46568,9.45621,1.07874,9.45622,1.08002,-1.00012,6.23984,6.96738,1.29987,6.96741,1.30219,-0.68823,4.24005,4.73441,0.89532,4.73448,0.89594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.05484,2.78093,0.01666,2.78223,3.10776,-0.05573,3.10799,-0.05426,-1.17972,2.87598,-0.99005,3.55937,3.97198,1.27319,3.97208,1.27423,-2.74237,3.14401]},{"time":0.8333,"curve":"stepped"},{"time":1.0667},{"time":1.3333,"offset":142,"vertices":[4.02271,-1.7984,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041,4.02271,-1.7984,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041,0,0,0,0,0,0,0,0,0,0,4.02271,-1.7984,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041,4.02271,-1.7984,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041,4.02271,-1.7984,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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.02271,-1.7984,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041,4.02271,-1.7984,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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.02271,-1.7984,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041]},{"time":1.4333}]},"front-leg-path":{"front-leg-path":[{"time":0.5667},{"time":0.6333,"vertices":[0.16366,-9.90768,0,0,-1.90419,16.9905,16.55858,-93.6721,21.4361,-76.03695,-0.72391,-31.37989,8.2138,-30.29725,-24.90733,16.177,-28.83566,5.62576,82.90022,-63.82897,0,0,-39.50021,-13.99933]},{"time":0.7,"vertices":[0.20398,-12.34892,0,0,-2.37338,21.17692,20.63858,-116.75269,26.71791,-94.77228,-0.90228,-39.11182,10.23766,-37.76243,-31.04443,20.16298,-35.9407,7.01193,22.68159,24.72715,0,0,-292.39255,-342.79443]},{"time":0.8}]}}}}}} \ No newline at end of file +{ +"skeleton": { "hash": "HX2RPdDLCZelec3Vt4z5nIYUOhI", "spine": "3.7.24-beta", "width": 264.5, "height": 573.31, "images": "./images/", "audio": "" }, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "x": 28.61, "y": 289.9, "color": "ffbd00ff" }, + { + "name": "spine1", + "parent": "hip", + "length": 34.66, + "rotation": 86.69, + "x": -4.48, + "y": 12.66, + "color": "ffbd00ff" + }, + { "name": "spine2", "parent": "spine1", "length": 41.42, "rotation": 16.48, "x": 34.66, "color": "ffbd00ff" }, + { + "name": "spine3", + "parent": "spine2", + "length": 34.45, + "rotation": 16.17, + "x": 41.42, + "y": 0.01, + "color": "ffbd00ff" + }, + { + "name": "spine4", + "parent": "spine3", + "length": 37.53, + "rotation": -13.63, + "x": 34.45, + "y": 0.01, + "color": "ffbd00ff" + }, + { + "name": "back-arm1", + "parent": "spine4", + "length": 32.43, + "rotation": -154.36, + "x": 16, + "y": -4.58, + "transform": "noScale", + "color": "ff0000ff" + }, + { + "name": "back-arm2", + "parent": "back-arm1", + "length": 34.16, + "rotation": 3.11, + "x": 31.88, + "y": 0.02, + "color": "ff0000ff" + }, + { "name": "back-arm3", "parent": "back-arm2", "length": 31.27, "rotation": 9.59, "x": 34.16, "color": "ff0000ff" }, + { + "name": "back-arm4", + "parent": "back-arm3", + "length": 33.3, + "rotation": 14.61, + "x": 32.04, + "y": 0.82, + "color": "ff0000ff" + }, + { + "name": "back-arm5", + "parent": "back-arm4", + "length": 37.41, + "rotation": 11.31, + "x": 33.82, + "y": 0.02, + "color": "ff0000ff" + }, + { "name": "back-arm-ik-target", "parent": "root", "x": 103.52, "y": 345.27, "color": "ff3f00ff" }, + { + "name": "back-arm-ik1", + "parent": "spine4", + "length": 66.57, + "rotation": -152.7, + "x": 16.34, + "y": -4.46, + "color": "ff0000ff" + }, + { "name": "back-arm-ik2", "parent": "back-arm-ik1", "length": 66.01, "rotation": 19.36, "x": 66.57, "color": "ff0000ff" }, + { + "name": "back-foot1", + "parent": "hip", + "length": 33.24, + "rotation": -6.56, + "x": -34.01, + "y": -279.68, + "transform": "onlyTranslation", + "color": "ff0000ff" + }, + { + "name": "back-foot2", + "parent": "back-foot1", + "length": 32.29, + "rotation": 4.34, + "x": 33.24, + "transform": "noScale", + "color": "ff0000ff" + }, + { + "name": "back-foot3", + "parent": "back-foot2", + "length": 15.87, + "rotation": 10.06, + "x": 32.29, + "transform": "noScale", + "color": "ff0000ff" + }, + { + "name": "back-leg1", + "parent": "hip", + "length": 41, + "rotation": -83.66, + "x": 10.41, + "y": 1.04, + "color": "ff0000ff" + }, + { "name": "back-leg2", "parent": "back-leg1", "length": 41, "rotation": -4.07, "x": 34.57, "color": "ff0000ff" }, + { + "name": "back-leg3", + "parent": "back-leg1", + "length": 41, + "rotation": -5.24, + "x": 81.79, + "y": -2.29, + "color": "ff0000ff" + }, + { + "name": "back-leg4", + "parent": "back-leg1", + "length": 41, + "rotation": -16.6, + "x": 121.21, + "y": -11.27, + "color": "ff0000ff" + }, + { + "name": "back-leg5", + "parent": "back-leg1", + "length": 41, + "rotation": -32.36, + "x": 160.16, + "y": -24.86, + "color": "ff0000ff" + }, + { + "name": "back-leg6", + "parent": "back-leg1", + "length": 41, + "rotation": -30.76, + "x": 197.04, + "y": -39.98, + "color": "ff0000ff" + }, + { + "name": "back-leg7", + "parent": "back-leg1", + "length": 41, + "rotation": -30.63, + "x": 233.19, + "y": -57.32, + "color": "ff0000ff" + }, + { + "name": "back-leg8", + "parent": "back-leg1", + "length": 41, + "rotation": -33.79, + "x": 267.29, + "y": -77.39, + "color": "ff0000ff" + }, + { "name": "back-leg-ik-target", "parent": "root", "x": 46.15, "y": 8.68, "color": "ff3f00ff" }, + { + "name": "back-leg-ik1", + "parent": "hip", + "length": 140.17, + "rotation": -88.1, + "x": 9.63, + "y": -0.38, + "color": "ff0000ff" + }, + { + "name": "back-leg-ik2", + "parent": "back-leg-ik1", + "length": 148.96, + "rotation": -21.32, + "x": 140.17, + "y": -0.01, + "color": "ff0000ff" + }, + { "name": "belly", "parent": "spine1", "x": 35.94, "y": -37.69, "color": "ffbd00ff" }, + { "name": "butt", "parent": "hip", "x": -32.67, "y": -1.88, "color": "ffbd00ff" }, + { + "name": "front-arm1", + "parent": "spine4", + "length": 38.33, + "rotation": 118.58, + "x": 27.13, + "y": 4.9, + "transform": "noScale", + "color": "4eff00ff" + }, + { + "name": "front-arm2", + "parent": "front-arm1", + "length": 35.67, + "rotation": -0.44, + "x": 38.33, + "y": 0.01, + "color": "4eff00ff" + }, + { + "name": "front-arm3", + "parent": "front-arm2", + "length": 32.65, + "rotation": 14.45, + "x": 35.67, + "y": -0.02, + "color": "4eff00ff" + }, + { "name": "front-arm4", "parent": "front-arm3", "length": 29.18, "rotation": 13.89, "x": 32.65, "color": "4eff00ff" }, + { + "name": "front-arm5", + "parent": "front-arm4", + "length": 46.32, + "rotation": 16.09, + "x": 29.18, + "transform": "noScale", + "color": "4eff00ff" + }, + { "name": "front-arm-ik", "parent": "root", "x": -92.44, "y": 331.78, "color": "ff3f00ff" }, + { + "name": "front-arm-ik1", + "parent": "spine4", + "length": 69.56, + "rotation": 117.86, + "x": 27.36, + "y": 4.22, + "color": "50ff00ff" + }, + { "name": "front-arm-ik2", "parent": "front-arm-ik1", "length": 66.72, "rotation": 20.13, "x": 69.56, "color": "50ff00ff" }, + { + "name": "front-foot1", + "parent": "hip", + "length": 26.3, + "rotation": -10.98, + "x": -77.05, + "y": -285.04, + "transform": "onlyTranslation", + "color": "50ff00ff" + }, + { "name": "front-foot2", "parent": "front-foot1", "length": 29.12, "rotation": 9.61, "x": 26.3, "color": "50ff00ff" }, + { "name": "front-foot3", "parent": "front-foot2", "length": 23.49, "rotation": 8.91, "x": 29.12, "color": "50ff00ff" }, + { + "name": "front-leg1", + "parent": "hip", + "length": 37.2, + "rotation": -88.97, + "x": -23.57, + "y": -2, + "color": "4fff00ff" + }, + { + "name": "front-leg2", + "parent": "front-leg1", + "length": 37.2, + "rotation": 3.45, + "x": 33.75, + "y": 0.01, + "color": "4fff00ff" + }, + { + "name": "front-leg3", + "parent": "front-leg1", + "length": 37.2, + "rotation": -6.12, + "x": 74.4, + "y": -1.08, + "color": "4fff00ff" + }, + { + "name": "front-leg4", + "parent": "front-leg1", + "length": 37.2, + "rotation": -10.02, + "x": 111.4, + "y": -5.28, + "color": "4fff00ff" + }, + { + "name": "front-leg5", + "parent": "front-leg1", + "length": 37.2, + "rotation": -28.4, + "x": 147.76, + "y": -14.99, + "color": "4fff00ff" + }, + { + "name": "front-leg6", + "parent": "front-leg1", + "length": 37.2, + "rotation": -24.33, + "x": 182.41, + "y": -27.57, + "color": "4fff00ff" + }, + { + "name": "front-leg7", + "parent": "front-leg1", + "length": 37.2, + "rotation": -23, + "x": 216.44, + "y": -42.55, + "color": "4fff00ff" + }, + { + "name": "front-leg8", + "parent": "front-leg1", + "length": 37.2, + "rotation": -31.81, + "x": 248.61, + "y": -61.03, + "color": "4fff00ff" + }, + { "name": "front-leg-ik-target", "parent": "root", "x": -37.74, "y": 5.03, "color": "ff3f00ff" }, + { + "name": "front-leg-ik1", + "parent": "hip", + "length": 140.67, + "rotation": -89.23, + "x": -23.99, + "y": 1.89, + "color": "50ff00ff" + }, + { + "name": "front-leg-ik2", + "parent": "front-leg-ik1", + "length": 155.95, + "rotation": -21.5, + "x": 140.67, + "y": 0.03, + "color": "50ff00ff" + }, + { + "name": "neck1", + "parent": "spine4", + "length": 13.45, + "rotation": -30.66, + "x": 38.97, + "y": -0.83, + "color": "ffbd00ff" + }, + { "name": "neck2", "parent": "neck1", "length": 14.13, "rotation": -11.41, "x": 13.45, "color": "ffbd00ff" }, + { + "name": "head", + "parent": "neck2", + "length": 89.06, + "rotation": 6.98, + "x": 15.82, + "y": 0.22, + "transform": "noScale", + "color": "ffbd00ff" + } +], +"slots": [ + { "name": "back-arm", "bone": "root", "attachment": "back-arm" }, + { "name": "back-leg", "bone": "root", "attachment": "back-leg" }, + { "name": "body", "bone": "root", "attachment": "body" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "front-arm", "bone": "root", "attachment": "front-arm" }, + { "name": "back-leg-path", "bone": "hip", "attachment": "back-leg-path" }, + { "name": "front-leg-path", "bone": "hip", "attachment": "front-leg-path" }, + { "name": "front-arm-path", "bone": "spine4" }, + { "name": "rear-arm-path", "bone": "spine4" } +], +"ik": [ + { + "name": "back-arm-ik", + "order": 3, + "bones": [ "back-arm-ik1", "back-arm-ik2" ], + "target": "back-arm-ik-target", + "mix": 0 + }, + { + "name": "back-leg-ik", + "order": 0, + "bones": [ "back-leg-ik1", "back-leg-ik2" ], + "target": "back-leg-ik-target", + "bendPositive": false + }, + { + "name": "front-arm-ik", + "order": 2, + "bones": [ "front-arm-ik1", "front-arm-ik2" ], + "target": "front-arm-ik", + "mix": 0 + }, + { + "name": "front-leg-ik", + "order": 1, + "bones": [ "front-leg-ik1", "front-leg-ik2" ], + "target": "front-leg-ik-target", + "bendPositive": false + } +], +"transform": [ + { + "name": "back-foot-position", + "order": 8, + "bones": [ "back-foot1" ], + "target": "back-leg8", + "rotation": 108.8, + "x": 41.2, + "y": -0.03, + "scaleX": 5.0E-4, + "scaleY": -3.0E-4, + "shearY": 0.1, + "rotateMix": 0, + "scaleMix": 0 + }, + { + "name": "front-foot-position", + "order": 9, + "bones": [ "front-foot1" ], + "target": "front-leg8", + "rotation": 101.55, + "x": 38.92, + "y": -0.02, + "scaleX": 4.0E-4, + "scaleY": -3.0E-4, + "shearY": 0.1, + "rotateMix": 0, + "scaleMix": 0 + } +], +"path": [ + { + "name": "back-arm-path", + "order": 7, + "bones": [ "back-arm1", "back-arm2", "back-arm3", "back-arm4" ], + "target": "rear-arm-path", + "spacingMode": "percent", + "rotateMode": "chainScale", + "spacing": 0.25, + "rotateMix": 0, + "translateMix": 0 + }, + { + "name": "back-leg-path", + "order": 4, + "bones": [ "back-leg1", "back-leg2", "back-leg3", "back-leg4", "back-leg5", "back-leg6", "back-leg7", "back-leg8" ], + "target": "back-leg-path", + "spacingMode": "percent", + "rotateMode": "chainScale", + "spacing": 0.125 + }, + { + "name": "front-arm-path", + "order": 6, + "bones": [ "front-arm1", "front-arm2", "front-arm3", "front-arm4" ], + "target": "front-arm-path", + "spacingMode": "percent", + "rotateMode": "chainScale", + "spacing": 0.25, + "rotateMix": 0, + "translateMix": 0 + }, + { + "name": "front-leg-path", + "order": 5, + "bones": [ "front-leg1", "front-leg2", "front-leg3", "front-leg4", "front-leg5", "front-leg6", "front-leg7", "front-leg8" ], + "target": "front-leg-path", + "spacingMode": "percent", + "rotateMode": "chainScale", + "spacing": 0.125 + } +], +"skins": { + "default": { + "back-arm": { + "back-arm": { + "type": "mesh", + "uvs": [ 0.74522, 0.00989, 0.64111, 0.05762, 0.56303, 0.1559, 0.42509, 0.25886, 0.28974, 0.359, 0.22988, 0.49565, 0.21166, 0.60797, 0.21166, 0.69782, 0.16481, 0.78674, 0.14139, 0.84757, 0.02427, 0.88501, 0.0529, 0.91871, 0.37824, 0.98797, 0.60468, 0.98235, 0.6307, 0.9056, 0.73481, 0.87752, 0.63591, 0.81762, 0.55262, 0.74181, 0.38084, 0.69876, 0.37824, 0.60797, 0.39906, 0.50876, 0.51358, 0.38521, 0.66194, 0.28881, 0.85454, 0.18398, 0.97687, 0.07541, 0.9144, 0.00989 ], + "triangles": [ 11, 9, 12, 9, 8, 12, 12, 8, 18, 13, 12, 14, 12, 18, 17, 18, 8, 7, 14, 12, 17, 11, 10, 9, 14, 16, 15, 14, 17, 16, 7, 19, 18, 7, 6, 19, 6, 5, 19, 19, 5, 20, 5, 4, 20, 20, 4, 21, 4, 3, 21, 21, 3, 22, 3, 2, 22, 22, 2, 23, 2, 1, 23, 23, 1, 24, 1, 0, 24, 0, 25, 24 ], + "vertices": [ 1, 6, -7.68, -11.48, 1, 1, 6, 4.09, -13.63, 1, 1, 6, 23.49, -9.36, 1, 1, 7, 13.44, -9.23, 1, 2, 7, 35.2, -9.62, 0.50649, 8, -0.58, -9.66, 0.49351, 1, 8, 26.04, -6.39, 1, 1, 9, 14.15, -6.11, 1, 2, 9, 31.54, -5.57, 0.66493, 10, -3.33, -5.03, 0.33507, 1, 10, 13.08, -11.25, 1, 1, 10, 24.41, -14.89, 1, 1, 10, 30.15, -24.52, 1, 1, 10, 36.93, -23.54, 1, 1, 10, 54.08, -2.33, 1, 1, 10, 55.73, 14.15, 1, 1, 10, 41.39, 18.48, 1, 1, 10, 37.29, 26.87, 1, 1, 10, 24.66, 21.67, 1, 1, 10, 9.18, 18.1, 1, 2, 9, 31.33, 6.78, 0.47881, 10, -1.11, 7.12, 0.52119, 1, 9, 13.77, 6.04, 1, 2, 8, 24.98, 6.17, 0.89218, 9, -5.48, 6.96, 0.10782, 2, 7, 32.6, 7.29, 0.59842, 8, -0.32, 7.45, 0.40158, 1, 7, 11.08, 8.85, 1, 1, 6, 17.89, 11.88, 1, 1, 6, -4.82, 9.46, 1, 1, 6, -13.69, -0.69, 1 ], + "hull": 26, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 0, 50, 2, 48, 4, 46, 6, 44, 8, 42, 10, 40, 12, 38, 14, 36 ], + "width": 72, + "height": 202 + } + }, + "back-leg": { + "back-leg": { + "type": "mesh", + "uvs": [ 0.502, 0.01179, 0.36076, 0.06379, 0.4057, 0.15046, 0.44743, 0.23916, 0.47953, 0.32991, 0.51163, 0.42269, 0.52127, 0.50629, 0.48274, 0.58888, 0.41212, 0.66025, 0.3126, 0.74182, 0.2163, 0.81625, 0.1232, 0.89272, 0.00763, 0.97429, 0.29655, 0.98958, 0.47407, 0.99222, 0.64004, 0.99468, 0.80989, 0.9896, 0.91291, 0.98652, 1, 0.95797, 0.8333, 0.94681, 0.71067, 0.9386, 0.57123, 0.92031, 0.41533, 0.89986, 0.3447, 0.89272, 0.36885, 0.87178, 0.42817, 0.82033, 0.502, 0.74794, 0.58226, 0.66943, 0.6593, 0.59092, 0.72993, 0.50528, 0.76524, 0.42167, 0.78129, 0.32481, 0.78771, 0.23406, 0.78771, 0.13924, 0.72351, 0.03728, 0.60152, 0.00567, 0.82117, 0.96898, 0.67873, 0.96396, 0.52111, 0.9574, 0.35936, 0.94214, 0.19388, 0.92922, 0.25375, 0.88159, 0.32792, 0.8184 ], + "triangles": [ 36, 20, 19, 17, 19, 18, 16, 37, 36, 17, 16, 36, 17, 36, 19, 38, 22, 21, 37, 21, 20, 38, 21, 37, 37, 20, 36, 15, 38, 37, 14, 38, 15, 15, 37, 16, 39, 23, 22, 40, 23, 39, 39, 22, 38, 13, 40, 39, 12, 40, 13, 14, 39, 38, 13, 39, 14, 9, 8, 26, 25, 42, 9, 10, 9, 42, 26, 25, 9, 24, 42, 25, 41, 10, 42, 41, 42, 24, 11, 10, 41, 23, 41, 24, 40, 11, 41, 40, 41, 23, 12, 11, 40, 26, 8, 27, 6, 5, 29, 28, 6, 29, 7, 6, 28, 27, 7, 28, 8, 7, 27, 29, 5, 30, 31, 5, 4, 30, 5, 31, 32, 4, 3, 31, 4, 32, 34, 1, 0, 34, 0, 35, 2, 1, 34, 2, 34, 33, 3, 2, 33, 32, 3, 33 ], + "vertices": [ 1, 17, -19.79, -5.67, 1, 2, 17, -5.62, -22.28, 0.83363, 18, -41.07, -23.3, 0.16637, 2, 17, 22.31, -21.98, 0.65187, 18, -13.17, -21.89, 0.34813, 3, 17, 50.83, -22.11, 0.3172, 18, 15.33, -20.87, 0.43086, 19, -19.67, -21.09, 0.25193, 4, 17, 79.85, -23.29, 0.10792, 18, 44.37, -20.89, 0.35417, 19, 9.3, -19.2, 0.3192, 20, -25.22, -20.06, 0.21872, 4, 18, 74.06, -20.98, 0.16486, 19, 38.93, -17.34, 0.32776, 20, 4.09, -15.38, 0.29831, 21, -30.1, -17.16, 0.20907, 3, 19, 65.54, -17.61, 0.17523, 20, 30.6, -13.11, 0.39173, 21, -4.12, -11.42, 0.43304, 3, 20, 57.03, -15.71, 0.19718, 21, 22.43, -10.53, 0.52971, 22, -12.97, -9.81, 0.27311, 3, 21, 46.05, -13.47, 0.40991, 22, 10.84, -10.17, 0.34747, 23, -24.93, -10.51, 0.24261, 3, 21, 73.39, -18.69, 0.19432, 22, 38.58, -12.41, 0.37177, 23, 2.9, -10.99, 0.43391, 3, 22, 64.06, -14.98, 0.16664, 23, 28.49, -11.94, 0.56756, 24, -7.53, -11.48, 0.2658, 3, 23, 54.58, -12.37, 0.52114, 24, 18.56, -10.93, 0.36168, 14, -3.08, 24.95, 0.11718, 4, 23, 82.97, -14.36, 0.35144, 24, 47.01, -11.86, 0.29521, 14, -13.07, -1.67, 0.25118, 15, -46.3, 1.83, 0.10216, 1, 14, 16.37, -4.67, 1, 2, 14, 34.32, -4.37, 0.53487, 15, 0.74, -4.44, 0.46513, 3, 14, 51.1, -4.08, 0.14611, 15, 17.5, -5.42, 0.54314, 16, -15.51, -2.75, 0.31075, 2, 15, 34.67, -4.01, 0.40714, 16, 1.65, -4.36, 0.59286, 2, 15, 45.09, -3.16, 0.25726, 16, 12.05, -5.34, 0.74274, 2, 15, 53.99, 5.81, 0.25311, 16, 22.38, 1.94, 0.74689, 2, 15, 37.19, 9.56, 0.4029, 16, 6.5, 8.57, 0.5971, 3, 14, 57.07, 14.17, 0.13352, 15, 24.84, 12.33, 0.54644, 16, -5.18, 13.44, 0.32004, 4, 23, 47.09, 33.11, 0.13131, 14, 42.64, 19.08, 0.26349, 15, 10.82, 18.31, 0.49746, 16, -17.94, 21.78, 0.10773, 4, 23, 46.46, 16.09, 0.21159, 24, 9.37, 17.21, 0.1068, 14, 26.51, 24.57, 0.44951, 15, -4.85, 25.01, 0.23211, 3, 23, 46.8, 8.62, 0.40111, 24, 10, 9.75, 0.24543, 14, 19.24, 26.38, 0.35346, 3, 23, 39.71, 8.61, 0.5825, 24, 2.91, 9.47, 0.30792, 14, 21.25, 33.18, 0.10958, 3, 22, 59.17, 5.89, 0.21955, 23, 22.27, 8.58, 0.57946, 24, -14.51, 8.8, 0.20099, 3, 21, 71.84, 0.47, 0.21583, 22, 34.96, 6.47, 0.32263, 23, -1.92, 7.63, 0.46154, 3, 21, 45.81, 3.96, 0.40554, 22, 8.71, 7.12, 0.38602, 23, -28.17, 6.61, 0.20845, 3, 20, 56.79, 2.13, 0.25409, 21, 19.83, 7.12, 0.53006, 22, -17.46, 7.46, 0.21585, 3, 19, 66.18, 3.45, 0.22414, 20, 29.23, 7.92, 0.34135, 21, -8.25, 9.24, 0.43451, 4, 18, 76.6, 4.51, 0.19364, 19, 39.78, 8.26, 0.28887, 20, 2.49, 10.19, 0.33579, 21, -35.06, 7.97, 0.1817, 4, 17, 82.88, 7.08, 0.11658, 18, 46.18, 9.58, 0.35727, 19, 9.09, 11.32, 0.35745, 20, -28.36, 10.3, 0.16869, 3, 17, 54.46, 12.11, 0.35357, 18, 17.57, 13.46, 0.44494, 19, -19.71, 13.32, 0.20149, 2, 17, 24.65, 16.69, 0.65438, 18, -12.4, 16.85, 0.34562, 2, 17, -8.38, 15.21, 0.85331, 18, -45.34, 14.05, 0.14669, 1, 17, -20.19, 4.56, 1, 2, 15, 35.89, 2.53, 0.4051, 16, 3.99, 1.87, 0.5949, 3, 14, 54.38, 5.92, 0.13921, 15, 21.52, 4.3, 0.54495, 16, -9.85, 6.12, 0.31584, 2, 14, 37.79, 7.63, 0.44939, 15, 5.1, 7.27, 0.55061, 3, 23, 65.39, 20.7, 0.11858, 14, 20.6, 11.35, 0.75134, 15, -11.76, 12.27, 0.13008, 3, 23, 65.41, 1.81, 0.3968, 24, 24.3, 0.23, 0.28258, 14, 2.07, 14.98, 0.32063, 3, 23, 48.01, 0.08, 0.55395, 24, 6.94, -0.33, 0.33293, 14, 3.38, 30.47, 0.11312, 3, 22, 65.95, -2.97, 0.19447, 23, 24.96, -1.58, 0.57382, 24, -15.99, -0.43, 0.23171 ], + "hull": 36, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 34, 36, 44, 46, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 0, 70, 4, 66, 2, 68, 40, 42, 42, 44, 26, 28, 28, 30, 46, 48, 48, 50, 36, 38, 38, 40, 30, 32, 32, 34, 18, 52, 16, 54, 14, 56, 12, 58, 10, 60, 8, 62, 6, 64, 32, 72, 72, 38, 30, 74, 74, 40, 72, 74, 28, 76, 76, 42, 74, 76, 26, 78, 78, 44, 76, 78, 24, 80, 80, 46, 78, 80, 22, 82, 82, 48, 80, 82, 20, 84, 84, 50, 82, 84 ], + "width": 100, + "height": 318 + } + }, + "back-leg-path": { + "back-leg-path": { + "type": "path", + "lengths": [ 137.84, 291.79, 641.23 ], + "vertexCount": 9, + "vertices": [ 1, 26, -43.15, 0.61, 1, 1, 26, -1.31, 0.44, 1, 1, 26, 63.08, -0.19, 1, 2, 26, 72.07, 13.66, 0.5, 27, -69.12, -16.08, 0.5, 2, 26, 135.75, 0.27, 0.5, 27, -3.96, -2.03, 0.5, 2, 26, 202.92, -15.14, 0.5, 27, 65, 14.1, 0.5, 1, 27, 71.09, -2.04, 1, 1, 27, 149.06, -1.74, 1, 1, 26, 368.48, -1.81, 1 ] + } + }, + "body": { + "body": { + "type": "mesh", + "uvs": [ 0.35966, 0.01351, 0.26864, 0.04108, 0.26204, 0.0954, 0.34119, 0.14478, 0.39792, 0.19457, 0.40451, 0.24272, 0.38077, 0.27893, 0.3597, 0.3004, 0.34119, 0.31926, 0.34989, 0.34326, 0.35834, 0.36658, 0.36552, 0.40164, 0.37234, 0.43499, 0.38397, 0.4944, 0.3956, 0.55971, 0.39884, 0.59858, 0.40142, 0.62955, 0.40216, 0.65662, 0.3461, 0.71564, 0.27077, 0.78176, 0.2201, 0.82128, 0.17618, 0.85553, 0.13115, 0.88833, 0.08238, 0.92385, 0.00342, 0.9796, 0.18836, 0.99127, 0.32172, 0.99284, 0.46266, 0.99451, 0.61643, 0.98608, 0.71618, 0.97182, 0.61851, 0.95821, 0.48967, 0.95043, 0.39458, 0.94083, 0.27772, 0.92904, 0.23408, 0.9232, 0.26692, 0.89774, 0.30681, 0.86681, 0.34203, 0.83415, 0.38369, 0.7955, 0.45642, 0.72874, 0.52708, 0.66845, 0.56032, 0.63345, 0.57541, 0.60109, 0.59357, 0.56214, 0.61643, 0.49732, 0.63513, 0.43963, 0.64345, 0.40462, 0.77081, 0.39011, 0.84585, 0.37025, 0.90983, 0.35331, 0.9674, 0.31915, 0.97302, 0.28585, 0.96448, 0.23351, 0.8952, 0.1681, 0.79346, 0.12643, 0.75179, 0.10879, 0.71799, 0.09448, 0.66817, 0.07237, 0.61343, 0.04807, 0.47868, 0.01411, 0.49846, 0.38826, 0.66315, 0.34728, 0.67333, 0.30664, 0.8188, 0.29655, 0.80971, 0.24505, 0.72829, 0.17902, 0.68147, 0.13902, 0.59191, 0.09711, 0.3904, 0.09012, 0.53695, 0.14981, 0.57563, 0.19616, 0.64483, 0.25077, 0.79855, 0.33476, 0.61751, 0.97167, 0.4773, 0.97061, 0.23795, 0.95673, 0.15272, 0.92355, 0.14158, 0.94886, 0.23861, 0.86092, 0.51732, 0.30354, 0.50696, 0.34527, 0.50634, 0.43735, 0.50334, 0.4959, 0.51086, 0.32558, 0.50355, 0.41057, 0.19543, 0.89241, 0.36492, 0.9641 ], + "triangles": [ 2, 1, 68, 68, 1, 58, 58, 1, 59, 1, 0, 59, 69, 67, 66, 3, 68, 69, 69, 68, 67, 3, 2, 68, 66, 56, 55, 66, 67, 56, 67, 57, 56, 67, 58, 57, 67, 68, 58, 5, 70, 71, 71, 70, 65, 5, 4, 70, 70, 66, 65, 4, 69, 70, 70, 69, 66, 4, 3, 69, 65, 54, 53, 65, 66, 54, 66, 55, 54, 46, 61, 47, 46, 80, 61, 80, 83, 61, 61, 62, 72, 61, 83, 62, 80, 9, 83, 9, 8, 83, 83, 79, 62, 8, 7, 83, 83, 7, 79, 71, 6, 5, 7, 6, 79, 79, 6, 62, 6, 71, 62, 47, 72, 48, 47, 61, 72, 48, 72, 49, 49, 72, 50, 72, 63, 50, 72, 62, 63, 50, 63, 51, 62, 64, 63, 63, 52, 51, 63, 64, 52, 71, 65, 64, 64, 53, 52, 64, 65, 53, 62, 71, 64, 26, 86, 27, 27, 74, 28, 27, 86, 74, 28, 73, 29, 28, 74, 73, 73, 30, 29, 74, 31, 73, 73, 31, 30, 86, 32, 74, 74, 32, 31, 25, 75, 26, 26, 75, 86, 24, 77, 25, 25, 77, 75, 24, 23, 77, 75, 33, 86, 86, 33, 32, 75, 77, 33, 77, 34, 33, 77, 76, 34, 77, 23, 76, 23, 22, 76, 76, 85, 34, 76, 22, 85, 34, 85, 35, 85, 78, 35, 22, 21, 85, 35, 78, 36, 85, 21, 78, 37, 36, 20, 21, 20, 78, 36, 78, 20, 20, 19, 37, 37, 19, 38, 19, 18, 38, 38, 18, 39, 18, 17, 39, 39, 17, 40, 41, 40, 16, 40, 17, 16, 42, 41, 15, 41, 16, 15, 43, 42, 14, 42, 15, 14, 14, 82, 43, 43, 82, 44, 14, 13, 82, 82, 81, 44, 44, 81, 45, 82, 13, 81, 13, 12, 81, 46, 45, 84, 12, 84, 81, 45, 81, 84, 12, 11, 84, 11, 60, 84, 84, 60, 46, 60, 80, 46, 11, 10, 60, 60, 10, 80, 10, 9, 80 ], + "vertices": [ 1, 5, 30.85, 2.45, 1, 2, 4, 60.42, 12.42, 0.24859, 5, 22.32, 18.18, 0.75141, 2, 4, 39.47, 25.25, 0.44332, 5, -1.06, 25.72, 0.55668, 3, 3, 48.03, 29.46, 0.37431, 4, 14.55, 26.45, 0.47619, 5, -25.57, 21.02, 0.1495, 3, 2, 50.36, 32.58, 0.11243, 3, 24.29, 26.8, 0.64611, 4, -8.99, 30.5, 0.24146, 3, 41, -45.22, -8.81, 0.10611, 2, 28.69, 30.4, 0.49533, 3, 2.89, 30.85, 0.39856, 3, 41, -28.91, -12.45, 0.25802, 2, 12.15, 32.8, 0.60894, 3, -12.29, 37.84, 0.13304, 3, 41, -18.5, -14.05, 0.28714, 2, 2.34, 35.98, 0.51935, 29, -7.6, 18.95, 0.19351, 4, 41, -10.79, -18.35, 0.28478, 28, -42.03, 75.56, 0.10295, 2, -6.36, 37.32, 0.37494, 29, -10.2, 10.26, 0.23733, 3, 41, 0.92, -16.96, 0.34087, 2, -17.28, 35.45, 0.32141, 29, -8.2, -0.67, 0.33772, 4, 41, 10.64, -16.32, 0.32691, 42, -24.05, -14.9, 0.16082, 2, -27.58, 33.67, 0.14432, 29, -6.37, -11.05, 0.36794, 4, 41, 28.5, -15.63, 0.24237, 42, -9.55, -15.11, 0.27028, 43, -45.51, -19.12, 0.12132, 29, -3.65, -27.88, 0.36603, 4, 41, 41.59, -14.89, 0.21761, 42, 6.93, -15.35, 0.33285, 43, -26.85, -17.49, 0.20377, 29, -1.3, -43.28, 0.24577, 3, 42, 33.83, -15.81, 0.47179, 43, 0, -15.85, 0.42627, 44, -31.79, -17.82, 0.10194, 3, 42, 63.39, -16.48, 0.2126, 43, 29.52, -14.22, 0.42737, 44, -2.43, -14.39, 0.36002, 3, 43, 49.79, -15.51, 0.30179, 44, 14.85, -13.08, 0.47127, 45, -21.15, -15.64, 0.22695, 3, 43, 61.1, -13.41, 0.15443, 44, 29.03, -11.65, 0.50848, 45, -3.27, -12.45, 0.33708, 2, 44, 41.24, -10.8, 0.28079, 45, 8.41, -8.79, 0.71921, 2, 45, 36.24, -8.59, 0.56513, 46, -3.02, -8.84, 0.43487, 3, 45, 67.93, -10.06, 0.16322, 46, 28.69, -7.82, 0.53712, 47, -8.12, -7.7, 0.29966, 3, 46, 47.76, -8.47, 0.40201, 47, 10.97, -7.9, 0.45131, 48, -26.34, -6.21, 0.14668, 3, 46, 64.62, -8.06, 0.25017, 47, 27.8, -8.4, 0.46039, 48, -12.77, -8.82, 0.28944, 4, 46, 79.13, -10.24, 0.11858, 47, 42.33, -8.03, 0.26981, 48, 4.53, -8.38, 0.48104, 38, -1.56, 35.6, 0.13057, 2, 48, 20.84, -9.2, 0.728, 38, -5.38, 19.56, 0.272, 1, 38, -11.5, -7.3, 1, 4, 48, 43.23, 16.27, 0.2746, 38, 15.1, -7.51, 0.48158, 39, -12.29, -5.54, 0.12942, 40, -41.77, 0.94, 0.11439, 4, 48, 37, 33.94, 0.18804, 38, 33.71, -4.58, 0.34252, 39, 6.54, -5.76, 0.18297, 40, -23.2, -2.19, 0.28647, 3, 38, 53.35, -1.59, 0.21646, 39, 26.41, -6.09, 0.26516, 40, -3.62, -5.59, 0.51838, 2, 39, 47.99, -1.76, 0.15753, 40, 18.37, -4.66, 0.84247, 1, 40, 33.16, -0.12, 1, 2, 39, 47.98, 10.84, 0.17387, 40, 20.32, 7.79, 0.82613, 4, 48, 9.83, 48.43, 0.17572, 38, 53.29, 18.7, 0.17038, 39, 29.73, 13.92, 0.136, 40, 2.77, 13.66, 0.5179, 4, 48, 11.45, 34.58, 0.26313, 38, 39.26, 20.56, 0.23037, 39, 16.21, 18.1, 0.15679, 40, -9.94, 19.88, 0.3497, 4, 48, 12.41, 17.13, 0.37057, 38, 22.11, 22.5, 0.30409, 39, -0.38, 22.88, 0.18235, 40, -25.59, 27.17, 0.14299, 3, 48, 12.34, 10.44, 0.4464, 38, 15.56, 23.92, 0.2976, 39, -6.59, 25.37, 0.256, 5, 46, 75.96, 9.07, 0.10563, 47, 38.15, 11.09, 0.25495, 48, 1.65, 10.97, 0.33578, 38, 17.99, 34.75, 0.16323, 39, -2.39, 35.65, 0.14041, 3, 46, 62.62, 10.94, 0.26064, 47, 26.05, 10.62, 0.49792, 48, -15.15, 10.14, 0.24144, 3, 46, 47.27, 9.67, 0.40348, 47, 9.53, 10.2, 0.4787, 48, -26.59, 11.94, 0.11781, 3, 45, 69.23, 6.98, 0.16044, 46, 28.64, 9.27, 0.53936, 47, -7.95, 9.39, 0.3002, 2, 45, 37.36, 8.01, 0.57649, 46, -3.21, 7.8, 0.42351, 2, 44, 45.49, 7.11, 0.2935, 45, 8.38, 9.61, 0.7065, 3, 43, 62.85, 9, 0.15446, 44, 29.41, 10.82, 0.49324, 45, -8.13, 9.49, 0.3523, 3, 43, 52.15, 9.28, 0.30575, 44, 12.84, 11.74, 0.46742, 45, -26.12, 8.77, 0.22683, 3, 42, 66.66, 11.26, 0.21798, 43, 30.62, 13.69, 0.42844, 44, -3.05, 13.54, 0.35358, 3, 42, 37.7, 16.76, 0.48246, 43, 1.32, 16.92, 0.41752, 44, -32.5, 14.97, 0.10002, 4, 41, 44.35, 22.12, 0.2346, 42, 11.91, 21.43, 0.43853, 43, -24.76, 19.57, 0.2068, 2, -58.29, -7.2, 0.12007, 4, 41, 28.55, 23.57, 0.31081, 42, -3.77, 23.84, 0.19158, 28, -76.76, 29.23, 0.21531, 2, -42.43, -7.46, 0.28231, 3, 41, 22.31, 41.64, 0.18196, 28, -69.84, 12.47, 0.43955, 2, -34.84, -25, 0.37848, 3, 41, 19.78, 51.42, 0.1392, 28, -59.84, 2.53, 0.47896, 2, -23.9, -35.17, 0.38184, 3, 41, 6.03, 61.54, 0.10543, 28, -52.71, -5.88, 0.51007, 2, -17.11, -43.61, 0.38449, 2, 28, -37.16, -13.14, 0.67427, 2, -1.22, -50.83, 0.32573, 1, 28, -22.09, -13.06, 1, 2, 28, 1.45, -10.49, 0.89019, 2, 37.4, -48.18, 0.10981, 3, 28, 30.41, 0.97, 0.4302, 2, 66.35, -36.73, 0.16237, 3, 19.98, -44.2, 0.40743, 2, 3, 41.58, -34.52, 0.68165, 4, -9.45, -33.21, 0.31835, 2, 3, 50.69, -30.62, 0.51066, 4, 0.38, -31.99, 0.48934, 3, 3, 58.07, -27.45, 0.26484, 4, 8.35, -31.01, 0.61475, 5, -18.05, -36.28, 0.12041, 3, 3, 69.4, -22.88, 0.17396, 4, 20.51, -29.78, 0.5644, 5, -6.53, -32.23, 0.26164, 2, 4, 33.86, -28.42, 0.29085, 5, 6.13, -27.77, 0.70915, 2, 4, 56.55, -19.38, 0.17381, 5, 26.05, -13.63, 0.82619, 5, 41, 20.79, 3.26, 0.38867, 42, -12.74, 4.03, 0.17698, 28, -69.84, 50.18, 0.10105, 2, -36.22, 13.38, 0.19581, 29, 13.98, -19.25, 0.13749, 4, 41, 2.69, 26.81, 0.26409, 28, -50.86, 29.21, 0.2337, 2, -16.39, -8.73, 0.34628, 29, 35.79, -0.49, 0.15592, 3, 41, -15.65, 28.57, 0.15678, 28, -33.54, 28.78, 0.2916, 2, 2.03, -9.11, 0.55162, 1, 28, -28.18, 8.37, 1, 1, 28, -5.01, 11, 1, 3, 28, 24.12, 24.18, 0.12052, 2, 60.07, -13.52, 0.21384, 3, 20.53, -20.16, 0.66564, 2, 3, 39.64, -17.85, 0.59513, 4, -6.68, -16.66, 0.40487, 3, 3, 60.96, -9.87, 0.26252, 4, 16.02, -14.92, 0.55541, 5, -14.39, -18.85, 0.18206, 2, 4, 32.69, 8.3, 0.58729, 5, -3.66, 7.65, 0.41271, 2, 3, 39.53, 3.1, 0.47136, 4, -0.95, 3.5, 0.52864, 1, 3, 17.89, 2.56, 1, 2, 2, 27.01, -3.64, 0.67245, 3, -8.37, -1.32, 0.32755, 3, 41, -2.63, 46, 0.10033, 28, -45.42, 10.27, 0.52612, 2, -9.64, -27.47, 0.37356, 2, 39, 47.98, 4.75, 0.16598, 40, 19.38, 1.78, 0.83402, 4, 48, 19.56, 50.48, 0.12624, 38, 53.31, 9.51, 0.16908, 39, 28.22, 4.86, 0.24846, 40, -0.13, 4.94, 0.45621, 4, 48, 26.31, 16.82, 0.32786, 38, 18.97, 9.25, 0.38308, 39, -5.69, 10.34, 0.1588, 40, -32.78, 15.61, 0.13026, 2, 48, 16.97, -0.03, 0.66865, 38, 4.23, 21.71, 0.33135, 3, 48, 28.1, 2.86, 0.4826, 38, 4.92, 10.15, 0.31302, 39, -19.39, 13.57, 0.20437, 3, 46, 63.22, -0.58, 0.21069, 47, 25.96, 0.79, 0.49387, 48, -11.02, 1.48, 0.29545, 3, 41, -14.84, 8.09, 0.24448, 28, -33.35, 51.23, 0.16325, 2, 2.6, 13.54, 0.59227, 4, 41, 3.38, 4.96, 0.28616, 28, -51.81, 51.13, 0.16477, 2, -15.87, 13.44, 0.31892, 29, 13.85, -0.53, 0.23015, 4, 41, 46.09, 3.59, 0.2409, 42, 9.06, 3.1, 0.41152, 43, -28.46, 0.64, 0.21862, 29, 17.5, -43.07, 0.12896, 3, 42, 37.23, 1.25, 0.47745, 43, -0.08, 1.26, 0.42163, 44, -36.26, -5.26, 0.10093, 4, 41, -5.23, 6.3, 0.25594, 28, -43.11, 51.32, 0.15579, 2, -7.17, 13.63, 0.42092, 29, 14.17, 8.17, 0.16735, 4, 41, 33.04, 3.37, 0.36685, 42, -3.97, 3.61, 0.31093, 2, -45.33, 9.83, 0.17307, 29, 15.76, -30.15, 0.14915, 4, 46, 77.51, -1.16, 0.11479, 47, 40.24, 0.95, 0.26889, 48, 3.05, 0.72, 0.44973, 38, 7.66, 35.33, 0.16659, 4, 48, 22.73, 34.68, 0.22091, 38, 37.18, 9.39, 0.26956, 39, 12.3, 7.43, 0.20636, 40, -15.46, 9.95, 0.30317 ], + "hull": 60, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 24, 26, 26, 28, 32, 34, 34, 36, 36, 38, 46, 48, 48, 50, 54, 56, 56, 58, 58, 60, 60, 62, 66, 68, 76, 78, 78, 80, 80, 82, 86, 88, 88, 90, 90, 92, 92, 94, 98, 100, 100, 102, 102, 104, 104, 106, 106, 108, 116, 118, 0, 118, 92, 120, 120, 20, 28, 86, 82, 32, 34, 80, 78, 36, 76, 38, 12, 124, 102, 126, 126, 124, 126, 128, 128, 130, 130, 132, 132, 134, 112, 134, 134, 136, 136, 4, 2, 116, 6, 138, 138, 132, 8, 140, 140, 130, 10, 142, 142, 128, 128, 104, 130, 106, 132, 108, 122, 92, 100, 144, 144, 122, 126, 144, 144, 94, 112, 114, 114, 116, 108, 110, 110, 112, 16, 18, 18, 20, 20, 22, 22, 24, 12, 14, 14, 16, 122, 124, 94, 96, 96, 98, 56, 146, 146, 60, 54, 148, 148, 62, 146, 148, 50, 150, 150, 66, 46, 152, 152, 68, 154, 152, 154, 48, 42, 156, 156, 72, 14, 158, 158, 124, 18, 160, 160, 122, 160, 120, 24, 162, 162, 90, 26, 164, 164, 88, 162, 164, 16, 166, 160, 166, 166, 158, 166, 124, 162, 168, 168, 120, 168, 22, 168, 92, 38, 40, 40, 42, 72, 74, 74, 76, 40, 74, 42, 44, 44, 46, 152, 170, 170, 156, 44, 170, 68, 70, 70, 72, 170, 70, 62, 64, 64, 66, 148, 172, 172, 150, 64, 172, 50, 52, 52, 54, 172, 52, 154, 66, 150, 154, 28, 30, 30, 32, 82, 84, 84, 86, 30, 84 ], + "width": 141, + "height": 452 + } + }, + "front-arm": { + "front-arm": { + "type": "mesh", + "uvs": [ 0.71401, 0.00566, 0.67108, 0.08129, 0.60222, 0.15434, 0.53633, 0.21683, 0.44558, 0.28705, 0.34898, 0.35134, 0.29097, 0.38941, 0.25238, 0.41472, 0.22423, 0.44271, 0.19483, 0.47193, 0.15998, 0.50658, 0.09138, 0.59568, 0.05498, 0.70866, 0.02988, 0.81366, 0.01049, 0.94262, 0.10495, 0.98985, 0.25391, 0.97421, 0.31482, 0.88907, 0.28834, 0.82869, 0.13607, 0.74572, 0.14335, 0.71488, 0.18317, 0.62253, 0.25217, 0.54221, 0.29538, 0.50981, 0.33787, 0.47795, 0.38452, 0.45013, 0.43581, 0.41953, 0.54711, 0.3655, 0.68845, 0.29832, 0.74855, 0.35527, 0.85874, 0.38229, 0.99674, 0.37645, 0.95354, 0.33244, 0.91356, 0.29172, 0.87464, 0.25208, 0.83759, 0.21434, 0.78083, 0.12598, 0.78194, 0.0683, 0.6322, 0.23719, 0.66925, 0.15784, 0.75533, 0.20967, 0.7161, 0.11137 ], + "triangles": [ 30, 29, 33, 30, 32, 31, 40, 41, 36, 39, 41, 40, 40, 36, 35, 38, 39, 40, 28, 38, 40, 34, 28, 40, 34, 40, 35, 28, 34, 33, 29, 28, 33, 30, 33, 32, 41, 1, 0, 37, 41, 0, 36, 41, 37, 39, 1, 41, 39, 2, 1, 19, 12, 20, 13, 12, 19, 18, 15, 19, 16, 18, 17, 15, 13, 19, 15, 14, 13, 15, 18, 16, 21, 10, 22, 11, 10, 21, 20, 11, 21, 12, 11, 20, 9, 8, 23, 22, 9, 23, 10, 9, 22, 26, 5, 4, 25, 5, 26, 6, 5, 25, 24, 6, 25, 7, 6, 24, 23, 7, 24, 8, 7, 23, 38, 2, 39, 3, 2, 38, 27, 3, 38, 27, 38, 28, 4, 3, 27, 26, 4, 27 ], + "vertices": [ 1, 53, 21.67, 6.08, 1, 2, 52, 18.13, 3.37, 0.16553, 53, 3.92, 4.24, 0.83447, 3, 30, -6.12, -15.24, 0.20965, 52, -0.05, 8.86, 0.53629, 5, 43.44, 6.81, 0.25406, 1, 30, 10.36, -12.02, 1, 2, 30, 30.62, -10.09, 0.88822, 31, -7.63, -10.15, 0.11178, 2, 30, 50.57, -9.69, 0.30996, 31, 12.31, -9.61, 0.69004, 2, 31, 24.21, -9.37, 0.86563, 32, -13.43, -6.2, 0.13437, 2, 31, 32.12, -9.22, 0.73143, 32, -5.73, -8.02, 0.26857, 2, 31, 39.35, -7.59, 0.54007, 32, 1.68, -8.25, 0.45993, 2, 31, 46.9, -5.88, 0.29037, 32, 9.42, -8.48, 0.70963, 2, 32, 18.59, -8.76, 0.66539, 33, -15.76, -5.13, 0.33461, 1, 33, 6.03, -8.58, 1, 2, 33, 31.42, -5.98, 0.39257, 34, 0.49, -6.36, 0.60743, 1, 34, 23.8, -9.31, 1, 1, 34, 52.37, -11.28, 1, 1, 34, 62.39, 2.72, 1, 1, 34, 58.29, 24.21, 1, 1, 34, 39.22, 32.48, 1, 1, 34, 26, 28.25, 1, 1, 34, 8.33, 5.63, 1, 2, 33, 28.81, 6.64, 0.48313, 34, 1.49, 6.49, 0.51687, 1, 33, 7.61, 5.9, 1, 3, 31, 51.67, 11.07, 0.10767, 32, 18.26, 6.75, 0.559, 33, -12.35, 10.01, 0.33333, 2, 31, 42.19, 10.25, 0.31464, 32, 8.88, 8.32, 0.68536, 2, 31, 32.87, 9.45, 0.59184, 32, -0.35, 9.86, 0.40816, 2, 31, 23.73, 9.7, 0.83036, 32, -9.14, 12.39, 0.16964, 2, 30, 52.08, 9.88, 0.29921, 31, 13.68, 9.98, 0.70079, 2, 30, 32.19, 12.6, 0.84687, 31, -6.24, 12.55, 0.15313, 1, 5, 9.42, 3.39, 1, 2, 5, -5.05, -1.59, 0.472, 4, 29.16, -0.35, 0.528, 1, 4, 16.13, -11.36, 1, 1, 4, 7.46, -29.44, 1, 2, 5, -8.23, -31.57, 0.5193, 4, 19, -28.74, 0.4807, 1, 5, 2, -28.43, 1, 1, 5, 11.96, -25.37, 1, 1, 5, 21.44, -22.45, 1, 3, 52, 12.7, -14.55, 0.25482, 53, 2.14, -14.4, 0.32231, 5, 42.47, -19.82, 0.42287, 1, 53, 13.64, -8.89, 1, 1, 30, 3.55, 0.91, 1, 2, 52, 1.72, -0.73, 0.5001, 5, 40.07, -2.34, 0.4999, 1, 5, 25.66, -11.25, 1, 3, 52, 13.4, -4.65, 0.33234, 53, 0.86, -4.56, 0.48165, 5, 48.12, -11.66, 0.18601 ], + "hull": 38, + "edges": [ 0, 2, 8, 10, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 70, 72, 72, 74, 0, 74, 56, 76, 6, 8, 76, 6, 4, 6, 4, 78, 78, 80, 80, 70, 2, 82, 82, 72, 82, 78, 78, 76, 2, 4, 56, 80, 56, 66, 62, 64, 64, 66, 66, 68, 68, 70, 44, 46, 46, 48, 18, 20, 46, 18, 10, 12, 12, 14, 48, 50, 50, 52, 12, 50, 14, 16, 16, 18 ], + "width": 145, + "height": 221 + } + }, + "front-arm-path": { + "front-arm-path": { + "type": "path", + "lengths": [ 73.64, 135.97, 291.4 ], + "vertexCount": 9, + "vertices": [ 1, 36, -21.12, -1.6, 1, 1, 36, 0.92, -0.29, 1, 1, 36, 16.41, 0.79, 1, 2, 36, 53.26, -1.74, 0.504, 37, -15.94, 3.84, 0.496, 2, 36, 74.54, 0.19, 0.504, 37, 4.75, -1.5, 0.496, 2, 36, 94.74, 2.31, 0.504, 37, 24.5, -6.3, 0.496, 1, 37, 46.12, -4.58, 1, 1, 37, 66.56, -0.12, 1, 1, 36, 147.94, 32.21, 1 ] + } + }, + "front-leg-path": { + "front-leg-path": { + "type": "path", + "lengths": [ 140.44, 297.38, 652.13 ], + "vertexCount": 9, + "vertices": [ 1, 50, -40.7, -0.42, 1, 1, 50, 1.49, -0.27, 1, 1, 50, 75.42, 0.33, 1, 2, 50, 82.92, 8.5, 0.5, 51, -58.75, -8.54, 0.5, 2, 50, 141.35, 0.53, 0.5, 51, 0.45, 0.71, 0.5, 2, 50, 208.27, -14.84, 0.5, 51, 68.84, 18.53, 0.5, 1, 51, 73.81, 1.42, 1, 1, 51, 156.58, 0.99, 1, 1, 50, 380.6, 0.76, 1 ] + } + }, + "head": { + "head": { "x": 45.65, "y": -7.92, "rotation": -70.44, "width": 87, "height": 102 } + }, + "rear-arm-path": { + "rear-arm-path": { + "type": "path", + "lengths": [ 66.62, 131.77, 281.13 ], + "vertexCount": 9, + "vertices": [ 1, 12, -19.59, 1.53, 1, 1, 12, 0.28, -0.13, 1, 1, 12, 17.08, -1.7, 1, 2, 12, 47.35, -3.26, 0.504, 13, -19.18, 3.46, 0.496, 2, 12, 66.76, 0.15, 0.504, 13, 0.23, 0.07, 0.496, 2, 12, 86.18, 3.55, 0.504, 13, 19.65, -3.32, 0.496, 1, 13, 46.48, -3.02, 1, 1, 13, 65.15, 0.11, 1, 1, 12, 144.73, 31.88, 1 ] + } + } + } +}, +"animations": { + "sneak": { + "bones": { + "hip": { + "rotate": [ + { "time": 0, "angle": 30.27, "curve": "stepped" }, + { "time": 0.1667, "angle": 30.27 }, + { "time": 0.3333, "angle": -31.29 }, + { "time": 0.5333, "angle": -44.75 }, + { "time": 0.7333, "angle": -25.5 }, + { "time": 0.9, "angle": -9.45 }, + { "time": 1.0667, "angle": 30.27 }, + { "time": 1.2333, "angle": -10.1 }, + { "time": 1.6333, "angle": -41.48 }, + { "time": 1.8, "angle": 30.27 } + ], + "translate": [ + { "time": 0, "x": -57.44, "y": -40.93 }, + { + "time": 0.1667, + "x": -16.16, + "y": -96.56, + "curve": [ 0.245, 0, 0.637, 0.56 ] + }, + { + "time": 0.2667, + "x": 86, + "y": -143.07, + "curve": [ 0.381, 0.55, 0.742, 1 ] + }, + { "time": 0.3333, "x": 145.45, "y": -159.28 }, + { "time": 0.4333, "x": 344.29, "y": -134.95 }, + { "time": 0.5333, "x": 543.14, "y": -81.1 }, + { "time": 0.7333, "x": 569.69, "y": -62.13 }, + { "time": 0.9, "x": 591.81, "y": -46.32 }, + { + "time": 1.0667, + "x": 653.14, + "y": -96.6, + "curve": [ 0.381, 0.55, 0.742, 1 ] + }, + { "time": 1.1333, "x": 710.17, "y": -143.1 }, + { "time": 1.2333, "x": 795.7, "y": -159.3 }, + { "time": 1.3333, "x": 986.95, "y": -153.35 }, + { "time": 1.4333, "x": 1178.2, "y": -111.89 }, + { "time": 1.6333, "x": 1195.1, "y": -62.1 }, + { "time": 1.8, "x": 1246.53, "y": -40.93 } + ] + }, + "front-leg-ik-target": { + "translate": [ + { "time": 0, "x": -50.43, "y": 44.62 }, + { "time": 0.1667, "x": -50.43, "y": 46.55 }, + { "time": 0.3333, "x": -50.43, "y": 47 }, + { + "time": 0.5333, + "x": -26.43, + "y": 50.21, + "curve": [ 0.532, 0, 0.75, 1 ] + }, + { "time": 0.7333, "x": 566.44, "y": 107.27 }, + { "time": 0.9, "x": 1215.9, "y": 68.21 }, + { "time": 1.0667, "x": 1235.47, "y": 15.8 }, + { "time": 1.2333, "x": 1235.47, "y": 0.97 }, + { "time": 1.5667, "x": 1230.16, "y": 3.76 }, + { "time": 1.7, "x": 1244, "y": 26.77 }, + { "time": 1.8, "x": 1253.54, "y": 44.62 } + ] + }, + "front-foot1": { + "rotate": [ + { "time": 0, "angle": -48.39, "curve": "stepped" }, + { "time": 0.3333, "angle": -48.39 }, + { "time": 0.7, "angle": -121.35 }, + { "time": 0.8, "angle": -80.19 }, + { "time": 0.9, "angle": 45.59 }, + { "time": 1.0667, "angle": 2.11 }, + { "time": 1.2333, "angle": 4.65 }, + { "time": 1.5667, "angle": 5.67 }, + { "time": 1.8, "angle": -48.39 } + ], + "scale": [ + { "time": 0.6, "x": 1, "y": 1 }, + { "time": 0.6333, "x": 0.955, "y": 1 }, + { "time": 0.7667, "x": 0.821, "y": 1 }, + { "time": 0.9, "x": 1, "y": 1 }, + { "time": 1.0667, "x": 0.851, "y": 1 }, + { "time": 1.3667, "x": 1, "y": 1 } + ] + }, + "front-foot3": { + "rotate": [ + { "time": 0, "angle": 36.33 }, + { "time": 0.3333, "angle": 28.46 }, + { "time": 0.5, "angle": 34.85 }, + { "time": 0.5333, "angle": 30.32 }, + { "time": 0.5667, "angle": 61.67 }, + { "time": 0.7, "angle": -19.47 }, + { "time": 0.9, "angle": -0.12 }, + { "time": 1.0667, "angle": -7.21 }, + { "time": 1.2333, "angle": -11.35 }, + { "time": 1.5667, "angle": -11.24 }, + { "time": 1.8, "angle": 36.33 } + ] + }, + "back-leg-ik-target": { + "translate": [ + { "time": 0, "x": 516.79, "y": 86.68 }, + { "time": 0.1667, "x": 523.72, "y": 16.64 }, + { "time": 0.3333, "x": 523.03, "y": -5, "curve": "stepped" }, + { "time": 0.7, "x": 523.03, "y": -5 }, + { "time": 0.9, "x": 551.32, "y": 41.87 }, + { "time": 1.0667, "x": 554.24, "y": 44.45 }, + { "time": 1.1333, "x": 555.44, "y": 44.75 }, + { "time": 1.2, "x": 556.61, "y": 46.19, "curve": "stepped" }, + { "time": 1.4333, "x": 556.61, "y": 46.19 }, + { "time": 1.5, "x": 746.97, "y": 74.82 }, + { "time": 1.6333, "x": 1127.69, "y": 103.62 }, + { "time": 1.8, "x": 1820.76, "y": 86.68 } + ] + }, + "back-foot1": { + "rotate": [ + { "time": 0, "angle": 74.18 }, + { "time": 0.1667, "angle": -17.01 }, + { "time": 0.3333, "angle": 5.06 }, + { "time": 0.7, "angle": 3.74 }, + { "time": 0.9, "angle": -65.56 }, + { "time": 1.6333, "angle": -92.53 }, + { "time": 1.8, "angle": 74.18 } + ], + "scale": [ + { "time": 0, "x": 0.824, "y": 1 }, + { "time": 0.1667, "x": 0.754, "y": 1 }, + { "time": 0.3333, "x": 0.589, "y": 1 }, + { "time": 0.5667, "x": 0.91, "y": 1 }, + { "time": 0.9, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.4, "x": 1, "y": 1 }, + { "time": 1.5, "x": 0.845, "y": 1 }, + { "time": 1.8, "x": 0.824, "y": 1 } + ] + }, + "back-foot2": { + "rotate": [ + { "time": 0, "angle": 8.14 }, + { "time": 0.1667, "angle": -3.21 }, + { "time": 0.7, "angle": -1.14 }, + { "time": 0.9, "angle": 34.12 }, + { "time": 1.4333, "angle": 46.69 }, + { "time": 1.5333, "angle": -15.6 }, + { "time": 1.6333, "angle": -11.91 }, + { "time": 1.8, "angle": 8.14 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1667, "x": 0.835, "y": 1 }, + { "time": 0.3333, "x": 1, "y": 1 } + ] + }, + "front-arm1": { + "rotate": [ + { "time": 0, "angle": -39.72 }, + { "time": 0.1667, "angle": -37.3 }, + { "time": 0.3333, "angle": 30.67 }, + { + "time": 0.9, + "angle": -53.28, + "curve": [ 0.708, 0.01, 0.75, 1 ] + }, + { "time": 1.2333, "angle": 36 }, + { "time": 1.8, "angle": -39.72 } + ] + }, + "neck1": { + "rotate": [ + { "time": 0, "angle": 21.95, "curve": "stepped" }, + { "time": 0.1667, "angle": 21.95 }, + { "time": 0.2667, "angle": 30.61 }, + { "time": 0.3333, "angle": 36.37 }, + { "time": 0.7333, "angle": 33.6 }, + { "time": 1.1667, "angle": 23.95 }, + { "time": 1.2333, "angle": 36.37 }, + { "time": 1.6333, "angle": 41.16 }, + { "time": 1.8, "angle": 21.95 } + ] + }, + "neck2": { + "rotate": [ + { "time": 0, "angle": -22.93 }, + { "time": 0.1667, "angle": -23.96 }, + { "time": 0.2667, "angle": 8.84 }, + { "time": 0.3333, "angle": 30.71 }, + { "time": 0.7333, "angle": -3.37 }, + { "time": 0.9, "angle": -17.57 }, + { "time": 1.1667, "angle": 2.19 }, + { "time": 1.2333, "angle": 15.26 }, + { "time": 1.6333, "angle": 4.42 }, + { "time": 1.8, "angle": -22.93 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": -22.93 }, + { "time": 0.1667, "angle": -13.04 }, + { "time": 0.2667, "angle": 2.65 }, + { "time": 0.3333, "angle": 13.1 }, + { "time": 0.5, "angle": 13.1 }, + { "time": 0.7333, "angle": -18.91 }, + { "time": 0.9, "angle": -41.78 }, + { "time": 1.1667, "angle": -4 }, + { "time": 1.2333, "angle": -2.35 }, + { "time": 1.6333, "angle": -22.89 }, + { "time": 1.8, "angle": -22.93 } + ] + }, + "back-arm1": { + "rotate": [ + { "time": 0, "angle": -17.24 }, + { "time": 0.1667, "angle": -18.66 }, + { "time": 0.3333, "angle": 324.99 }, + { "time": 0.5667, "angle": -6.42 }, + { "time": 0.9, "angle": -14.83 }, + { "time": 1.0667, "angle": -16.91 }, + { "time": 1.2333, "angle": 1.49 }, + { "time": 1.4, "angle": 2.56 }, + { "time": 1.8, "angle": -17.24 } + ], + "translate": [ + { "time": 0, "x": -14.26, "y": -6.6 } + ] + }, + "back-leg-ik1": { + "scale": [ + { "time": 0, "x": 2.186, "y": 1 }, + { "time": 0.1667, "x": 2.229, "y": 1 }, + { "time": 0.3333, "x": 1.532, "y": 1 }, + { "time": 0.4333, "x": 0.947, "y": 1 }, + { "time": 0.5333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0667, "x": 1, "y": 1 }, + { "time": 1.1333, "x": 0.893, "y": 1 }, + { "time": 1.2333, "x": 0.957, "y": 1 }, + { "time": 1.4333, "x": 2.315, "y": 1 }, + { "time": 1.6333, "x": 0.774, "y": 1 }, + { "time": 1.8, "x": 2.186, "y": 1 } + ] + }, + "front-leg1": { + "scale": [ + { "time": 0, "x": 1, "y": 1.118 } + ] + }, + "back-leg1": { + "scale": [ + { "time": 0, "x": 1, "y": 1.039 } + ] + }, + "front-leg-ik1": { + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.2667, "x": 0.859, "y": 1 }, + { "time": 0.3333, "x": 0.972, "y": 1 }, + { + "time": 0.5333, + "x": 2.356, + "y": 1, + "curve": [ 0.532, 0, 0.75, 1 ] + }, + { "time": 0.7, "x": 1, "y": 1 }, + { "time": 0.9, "x": 2.248, "y": 1 }, + { "time": 1.0667, "x": 2.003, "y": 1 }, + { "time": 1.2333, "x": 1.496, "y": 1 }, + { + "time": 1.3, + "x": 1.048, + "y": 1, + "curve": [ 0.34, 0.59, 0.765, 1 ] + }, + { "time": 1.4333, "x": 0.779, "y": 0.763 }, + { "time": 1.8, "x": 1, "y": 1 } + ] + }, + "front-arm3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1667, "angle": 17.37 }, + { "time": 0.3333, "angle": 31.94 }, + { + "time": 0.9, + "angle": 4.76, + "curve": [ 0.708, 0.01, 0.75, 1 ] + }, + { "time": 1.2333, "angle": 39.97 }, + { "time": 1.8, "angle": 0 } + ] + }, + "spine2": { + "rotate": [ + { "time": 0, "angle": -3.49 }, + { "time": 0.2667, "angle": -11.58 }, + { "time": 0.3333, "angle": -9.03 }, + { "time": 0.5, "angle": -2.66 }, + { "time": 0.7333, "angle": -5.78 }, + { "time": 1.1667, "angle": -11.58 }, + { "time": 1.2333, "angle": -6.7 }, + { "time": 1.6333, "angle": -2.5 }, + { "time": 1.8, "angle": -3.49 } + ] + }, + "spine3": { + "rotate": [ + { "time": 0, "angle": -20.41 }, + { "time": 0.2667, "angle": -11.58 }, + { "time": 0.3333, "angle": -9.03 }, + { "time": 0.5, "angle": -2.66 }, + { "time": 0.7333, "angle": -10.54 }, + { "time": 0.9, "angle": -16.17 }, + { "time": 1.1667, "angle": -11.58 }, + { "time": 1.2333, "angle": -9.03 }, + { "time": 1.6333, "angle": -7.26 }, + { "time": 1.8, "angle": -20.41 } + ] + }, + "back-arm3": { + "rotate": [ + { "time": 0, "angle": 26.23 }, + { "time": 0.1667, "angle": 53.15 }, + { "time": 0.3333, "angle": 116.26 }, + { "time": 0.5667, "angle": 35.72 }, + { "time": 0.9, "angle": 39.33 }, + { "time": 1.0667, "angle": 41.19 }, + { "time": 1.2333, "angle": 78.1 }, + { "time": 1.4, "angle": 36.16 }, + { "time": 1.8, "angle": 26.23 } + ] + }, + "back-foot3": { + "rotate": [ + { "time": 0, "angle": 11.35 }, + { "time": 0.7, "angle": -4.24 }, + { "time": 0.9, "angle": 25.49, "curve": "stepped" }, + { "time": 1.4333, "angle": 25.49 }, + { "time": 1.5333, "angle": -30.52 }, + { "time": 1.6333, "angle": -20.54 }, + { "time": 1.8, "angle": 11.35 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1667, "x": 0.835, "y": 1 }, + { "time": 0.3333, "x": 1, "y": 1 } + ] + }, + "spine1": { + "rotate": [ + { "time": 0, "angle": 10.81 }, + { "time": 0.2667, "angle": -28.7 }, + { "time": 0.3333, "angle": -24.32 }, + { "time": 0.5, "angle": -13.38 }, + { "time": 0.7333, "angle": 21.62 }, + { "time": 0.9, "angle": 46.61 }, + { "time": 1.1667, "angle": -28.7 }, + { "time": 1.2333, "angle": -43.34 }, + { "time": 1.6333, "angle": 24.89 }, + { "time": 1.8, "angle": 10.81 } + ] + }, + "spine4": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2667, "angle": -2.8 }, + { "time": 0.3333, "angle": -0.82 }, + { "time": 0.5, "angle": 4.14 }, + { "time": 0.7333, "angle": -3.74 }, + { "time": 0.9, "angle": -9.37 }, + { "time": 1.1667, "angle": -9.02 }, + { "time": 1.2333, "angle": -0.82 }, + { "time": 1.6333, "angle": 3.82 }, + { "time": 1.8, "angle": 0 } + ] + }, + "front-foot2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2667, "angle": -1.24 }, + { "time": 0.3333, "angle": -0.2 }, + { "time": 0.5, "angle": 22.72 }, + { "time": 0.5333, "angle": 26.87 }, + { "time": 0.7, "angle": -39.26 }, + { "time": 0.9, "angle": 11.27 }, + { "time": 1.0667, "angle": -18.18 }, + { "time": 1.2333, "angle": -2.64 }, + { "time": 1.5667, "angle": -5.84 }, + { "time": 1.8, "angle": 0 } + ] + }, + "belly": { + "translate": [ + { "time": 0, "x": 3.66, "y": -3.77 }, + { "time": 0.2667, "x": 13.83, "y": -3.82 }, + { "time": 0.6333, "x": -4.11, "y": -3.9 }, + { "time": 0.7667, "x": 10.21, "y": -2.92 }, + { "time": 0.8667, "x": 10.3, "y": -7.39 }, + { "time": 1.1, "x": -0.45, "y": -1.46 }, + { "time": 1.2333, "x": 12.38, "y": 2.33 }, + { "time": 1.3667, "x": 11.51, "y": 5.53 }, + { "time": 1.8, "x": 0, "y": 0 } + ] + }, + "butt": { + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.7667, "x": 9.88, "y": -25.41 }, + { "time": 0.8333, "x": 15.89, "y": -41.89 }, + { "time": 1.2333, "x": -12.49, "y": -33 }, + { "time": 1.8, "x": 0, "y": 0 } + ] + } + }, + "deform": { + "default": { + "back-leg": { + "back-leg": [ + { "time": 0.3 }, + { + "time": 0.3333, + "offset": 68, + "vertices": [ -1.72897, 2.75446, -1.5253, 2.94189, 0.0625, 3.6552, 0.01776, 3.65398, 0, 0, 0, 0, 0, 0, 0.0625, 3.6552, 0.01776, 3.65398, 0.90137, 3.54112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.98724, -1.57397, -0.03339, -2.08873, -0.0108, -2.08799, -0.51434, -2.02362, 0.98724, -1.57397, 0.87167, -1.68002, -0.03339, -2.08873, -0.0108, -2.08799 ] + }, + { "time": 0.4667, "curve": "stepped" }, + { "time": 1.3333 }, + { + "time": 1.4333, + "offset": 110, + "vertices": [ 2.52802, 0.00428, -0.03569, -4.90118, -3.71692, -3.19397, -4.88019, -0.43807, 5.17279, -0.0625, 5.1499, -0.4769, -0.07238, -10.06842, -7.6351, -6.56073, 6.64206, -0.09958, 6.61151, -0.62643, -0.09275, -12.93915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.01242, -1.65533, -1.25543, -1.0787, 0.86096, 0.02682, -0.01242, -1.65533, -1.25543, -1.0787 ] + }, + { "time": 1.5 } + ] + }, + "back-leg-path": { + "back-leg-path": [ + { "time": 1.4333 }, + { + "time": 1.5, + "vertices": [ 4.67719, -35.44354, 0, 0, -11.37146, 49.53738, -20.9989, -109.72336, 65.45837, -90.53627, -9.56653, -24.74756, 11.45203, -23.93552, -19.0719, 47.32281, -47.53955, 18.58409, 34.69244, -51.5341, 0, 0, 13.30164, -100.17206 ] + }, + { + "time": 1.5667, + "vertices": [ -0.9635, -22.43964, 0, 0, -13.80389, 27.61459, -41.00647, -55.1597, 7.62653, -96.25755, -24.12604, -24.11285, 7.19531, -37.87421, -31.47302, 7.7796, -12.34546, -3.32329, 26.55981, -38.73888, 0, 0, -13.62085, -280.84912 ] + }, + { "time": 1.6667 } + ] + }, + "body": { + "body": [ + { "time": 0 }, + { + "time": 0.3333, + "offset": 164, + "vertices": [ -0.01179, 0.02892, 0.00917, 0.0298, 0, 0, 1.17781, 0.89836, 1.48063, -0.04942, -6.68858, -1.30629, 4.38938, 4.03926, 4.59584, 3.27733, 5.6365, -0.11035, -4.92264, -0.8036, 4.54263, 1.06504, 3.29334, 0.58414, 2.94214, -1.40272, -4.28855, -0.56444, 5.07103, -0.2119, 2.95891, -0.75666, 1.83514, -2.22984, -4.31062, 0.6261, 6.11538, -0.87569, 3.7923, -1.67126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.17404, 0.22007, 0.27404, 0.06016 ] + }, + { + "time": 0.5333, + "offset": 164, + "vertices": [ -0.01887, 0.04627, 0.01467, 0.04768, 0, 0, 1.8845, 1.43737, 2.369, -0.07908, 1.46056, -1.33223, -0.75053, -3.7334, -2.8232, -2.55492, -3.80252, -0.19385, 2.81923, -1.5031, -0.33163, -6.75651, -4.28408, -5.23484, -6.6292, -1.34549, 3.83379, -1.12045, 0.51382, -8.79961, -4.81918, -7.38011, -8.4004, -2.66889, 3.83379, -1.12045, 0.51382, -8.79961, -4.81918, -7.38011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.27846, 0.35212, 0.43846, 0.09625 ] + }, + { + "time": 0.6333, + "offset": 170, + "vertices": [ -2.09907, 0.04961, -1.94301, 1.46154, 1.74966, 0.25744, 0.3765, -3.44555, -2.34343, -2.73069, -3.66285, -0.53693, 0, 0, 0, 0, 0, 0, 0, 0, 1.91689, -0.56022, 0.25691, -4.39981, -2.40959, -3.69006, -4.2002, -1.33444, 1.91689, -0.56022, 0.25691, -4.39981, -2.40959, -3.69006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.66468, 1.25351, 0.05177, 1.41789 ] + }, + { "time": 0.7333 }, + { + "time": 0.7667, + "offset": 264, + "vertices": [ -2.27499, -1.60417, -2.23926, -1.61371, -2.2196, -1.74294, -1.80919, 2.86346, -1.11118, 2.362, -1.14221, 2.35901, 2.63101, 1.41101, 2.63216, 1.41742, -0.8147, 8.46568, 9.45621, 1.07874, 9.45622, 1.08002, -1.00012, 6.23984, 6.96738, 1.29987, 6.96741, 1.30219, -0.68823, 4.24005, 4.73441, 0.89532, 4.73448, 0.89594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.05484, 2.78093, 0.01666, 2.78223, 3.10776, -0.05573, 3.10799, -0.05426, -1.17972, 2.87598, -0.99005, 3.55937, 3.97198, 1.27319, 3.97208, 1.27423, -2.74237, 3.14401 ] + }, + { "time": 0.8333, "curve": "stepped" }, + { "time": 1.0667 }, + { + "time": 1.3333, + "offset": 142, + "vertices": [ 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041 ] + }, + { "time": 1.4333 } + ] + }, + "front-leg-path": { + "front-leg-path": [ + { "time": 0.5667 }, + { + "time": 0.6333, + "vertices": [ 0.16366, -9.90768, 0, 0, -1.90419, 16.9905, 16.55858, -93.6721, 21.4361, -76.03695, -0.72391, -31.37989, 8.2138, -30.29725, -24.90733, 16.177, -28.83566, 5.62576, 82.90022, -63.82897, 0, 0, -39.50021, -13.99933 ] + }, + { + "time": 0.7, + "vertices": [ 0.20398, -12.34892, 0, 0, -2.37338, 21.17692, 20.63858, -116.75269, 26.71791, -94.77228, -0.90228, -39.11182, 10.23766, -37.76243, -31.04443, 20.16298, -35.9407, 7.01193, 22.68159, 24.72715, 0, 0, -292.39255, -342.79443 ] + }, + { "time": 0.8 } + ] + } + } + } + }, + "sneak-rm": { + "bones": { + "hip": { + "rotate": [ + { "time": 0, "angle": 30.27, "curve": "stepped" }, + { "time": 0.1667, "angle": 30.27 }, + { "time": 0.3333, "angle": -31.29 }, + { "time": 0.5333, "angle": -44.75 }, + { "time": 0.7333, "angle": -25.5 }, + { "time": 0.9, "angle": -9.45 }, + { "time": 1.0667, "angle": 30.27 }, + { "time": 1.2333, "angle": -10.1 }, + { "time": 1.6333, "angle": -41.48 }, + { "time": 1.8, "angle": 30.27 } + ], + "translate": [ + { "time": 0, "x": -57.44, "y": -40.93 }, + { + "time": 0.1667, + "x": -16.16, + "y": -96.56, + "curve": [ 0.245, 0, 0.637, 0.56 ] + }, + { + "time": 0.2667, + "x": 86, + "y": -143.07, + "curve": [ 0.381, 0.55, 0.742, 1 ] + }, + { "time": 0.3333, "x": 145.45, "y": -159.28 }, + { "time": 0.4333, "x": 344.29, "y": -134.95 }, + { "time": 0.5333, "x": 543.14, "y": -81.1 }, + { "time": 0.7333, "x": 569.69, "y": -62.13 }, + { "time": 0.9, "x": 591.81, "y": -46.32 }, + { + "time": 1.0667, + "x": 653.14, + "y": -96.6, + "curve": [ 0.381, 0.55, 0.742, 1 ] + }, + { "time": 1.1333, "x": 710.17, "y": -143.1 }, + { "time": 1.2333, "x": 795.7, "y": -159.3 }, + { "time": 1.3333, "x": 986.95, "y": -153.35 }, + { "time": 1.4333, "x": 1178.2, "y": -111.89 }, + { "time": 1.6333, "x": 1195.1, "y": -62.1 }, + { "time": 1.8, "x": 1246.53, "y": -40.93 } + ] + }, + "front-leg-ik-target": { + "translate": [ + { "time": 0, "x": -50.43, "y": 44.62 }, + { "time": 0.1667, "x": -50.43, "y": 46.55 }, + { "time": 0.3333, "x": -50.43, "y": 47 }, + { + "time": 0.5333, + "x": -26.43, + "y": 50.21, + "curve": [ 0.532, 0, 0.75, 1 ] + }, + { "time": 0.7333, "x": 566.44, "y": 107.27 }, + { "time": 0.9, "x": 1215.9, "y": 68.21 }, + { "time": 1.0667, "x": 1235.47, "y": 15.8 }, + { "time": 1.2333, "x": 1235.47, "y": 0.97 }, + { "time": 1.5667, "x": 1230.16, "y": 3.76 }, + { "time": 1.7, "x": 1244, "y": 26.77 }, + { "time": 1.8, "x": 1253.54, "y": 44.62 } + ] + }, + "front-foot1": { + "rotate": [ + { "time": 0, "angle": -48.39, "curve": "stepped" }, + { "time": 0.3333, "angle": -48.39 }, + { "time": 0.7, "angle": -121.35 }, + { "time": 0.8, "angle": -80.19 }, + { "time": 0.9, "angle": 45.59 }, + { "time": 1.0667, "angle": 2.11 }, + { "time": 1.2333, "angle": 4.65 }, + { "time": 1.5667, "angle": 5.67 }, + { "time": 1.8, "angle": -48.39 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.6, "x": 1, "y": 1 }, + { "time": 0.6333, "x": 0.955, "y": 1 }, + { "time": 0.7667, "x": 0.821, "y": 1 }, + { "time": 0.9, "x": 1, "y": 1 }, + { "time": 1.0667, "x": 0.851, "y": 1 }, + { "time": 1.3667, "x": 1, "y": 1 } + ] + }, + "front-foot3": { + "rotate": [ + { "time": 0, "angle": 36.33 }, + { "time": 0.3333, "angle": 28.46 }, + { "time": 0.5, "angle": 34.85 }, + { "time": 0.5333, "angle": 30.32 }, + { "time": 0.5667, "angle": 61.67 }, + { "time": 0.7, "angle": -19.47 }, + { "time": 0.9, "angle": -0.12 }, + { "time": 1.0667, "angle": -7.21 }, + { "time": 1.2333, "angle": -11.35 }, + { "time": 1.5667, "angle": -11.24 }, + { "time": 1.8, "angle": 36.33 } + ] + }, + "back-leg-ik-target": { + "translate": [ + { "time": 0, "x": 516.79, "y": 86.68 }, + { "time": 0.1667, "x": 523.72, "y": 16.64 }, + { "time": 0.3333, "x": 523.03, "y": -5, "curve": "stepped" }, + { "time": 0.7, "x": 523.03, "y": -5 }, + { "time": 0.9, "x": 551.32, "y": 41.87 }, + { "time": 1.0667, "x": 554.24, "y": 44.45 }, + { "time": 1.1333, "x": 555.44, "y": 44.75 }, + { "time": 1.2, "x": 556.61, "y": 46.19, "curve": "stepped" }, + { "time": 1.4333, "x": 556.61, "y": 46.19 }, + { "time": 1.5, "x": 746.97, "y": 74.82 }, + { "time": 1.6333, "x": 1127.69, "y": 103.62 }, + { "time": 1.8, "x": 1820.76, "y": 86.68 } + ] + }, + "back-foot1": { + "rotate": [ + { "time": 0, "angle": 74.18 }, + { "time": 0.1667, "angle": -17.01 }, + { "time": 0.3333, "angle": 5.06 }, + { "time": 0.7, "angle": 3.74 }, + { "time": 0.9, "angle": -65.56 }, + { "time": 1.6333, "angle": -92.53 }, + { "time": 1.8, "angle": 74.18 } + ], + "scale": [ + { "time": 0, "x": 0.824, "y": 1 }, + { "time": 0.1667, "x": 0.754, "y": 1 }, + { "time": 0.3333, "x": 0.589, "y": 1 }, + { "time": 0.5667, "x": 0.91, "y": 1 }, + { "time": 0.9, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.4, "x": 1, "y": 1 }, + { "time": 1.5, "x": 0.845, "y": 1 }, + { "time": 1.8, "x": 0.824, "y": 1 } + ] + }, + "back-foot2": { + "rotate": [ + { "time": 0, "angle": 8.14 }, + { "time": 0.1667, "angle": -3.21 }, + { "time": 0.7, "angle": -1.14 }, + { "time": 0.9, "angle": 34.12 }, + { "time": 1.4333, "angle": 46.69 }, + { "time": 1.5333, "angle": -15.6 }, + { "time": 1.6333, "angle": -11.91 }, + { "time": 1.8, "angle": 8.14 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1667, "x": 0.835, "y": 1 }, + { "time": 0.3333, "x": 1, "y": 1 } + ] + }, + "front-arm1": { + "rotate": [ + { "time": 0, "angle": -39.72 }, + { "time": 0.1667, "angle": -37.3 }, + { "time": 0.3333, "angle": 30.67 }, + { + "time": 0.9, + "angle": -53.28, + "curve": [ 0.708, 0.01, 0.75, 1 ] + }, + { "time": 1.2333, "angle": 36 }, + { "time": 1.8, "angle": -39.72 } + ] + }, + "neck1": { + "rotate": [ + { "time": 0, "angle": 21.95, "curve": "stepped" }, + { "time": 0.1667, "angle": 21.95 }, + { "time": 0.2667, "angle": 30.61 }, + { "time": 0.3333, "angle": 36.37 }, + { "time": 0.7333, "angle": 33.6 }, + { "time": 1.1667, "angle": 23.95 }, + { "time": 1.2333, "angle": 36.37 }, + { "time": 1.6333, "angle": 41.16 }, + { "time": 1.8, "angle": 21.95 } + ] + }, + "neck2": { + "rotate": [ + { "time": 0, "angle": -22.93 }, + { "time": 0.1667, "angle": -23.96 }, + { "time": 0.2667, "angle": 8.84 }, + { "time": 0.3333, "angle": 30.71 }, + { "time": 0.7333, "angle": -3.37 }, + { "time": 0.9, "angle": -17.57 }, + { "time": 1.1667, "angle": 2.19 }, + { "time": 1.2333, "angle": 15.26 }, + { "time": 1.6333, "angle": 4.42 }, + { "time": 1.8, "angle": -22.93 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": -22.93 }, + { "time": 0.1667, "angle": -13.04 }, + { "time": 0.2667, "angle": 2.65 }, + { "time": 0.3333, "angle": 13.1 }, + { "time": 0.5, "angle": 13.1 }, + { "time": 0.7333, "angle": -18.91 }, + { "time": 0.9, "angle": -41.78 }, + { "time": 1.1667, "angle": -4 }, + { "time": 1.2333, "angle": -2.35 }, + { "time": 1.6333, "angle": -22.89 }, + { "time": 1.8, "angle": -22.93 } + ] + }, + "back-arm1": { + "rotate": [ + { "time": 0, "angle": -17.24 }, + { "time": 0.1667, "angle": -18.66 }, + { "time": 0.3333, "angle": 324.99 }, + { "time": 0.5667, "angle": -6.42 }, + { "time": 0.9, "angle": -14.83 }, + { "time": 1.0667, "angle": -16.91 }, + { "time": 1.2333, "angle": 1.49 }, + { "time": 1.4, "angle": 2.56 }, + { "time": 1.8, "angle": -17.24 } + ], + "translate": [ + { "time": 0, "x": -14.26, "y": -6.6 } + ] + }, + "back-leg-ik1": { + "scale": [ + { "time": 0, "x": 2.186, "y": 1 }, + { "time": 0.1667, "x": 2.229, "y": 1 }, + { "time": 0.3333, "x": 1.532, "y": 1 }, + { "time": 0.4333, "x": 0.947, "y": 1 }, + { "time": 0.5333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0667, "x": 1, "y": 1 }, + { "time": 1.1333, "x": 0.893, "y": 1 }, + { "time": 1.2333, "x": 0.957, "y": 1 }, + { "time": 1.4333, "x": 2.315, "y": 1 }, + { "time": 1.6333, "x": 0.774, "y": 1 }, + { "time": 1.8, "x": 2.186, "y": 1 } + ] + }, + "front-leg1": { + "scale": [ + { "time": 0, "x": 1, "y": 1.118 } + ] + }, + "back-leg1": { + "scale": [ + { "time": 0, "x": 1, "y": 1.039 } + ] + }, + "front-leg-ik1": { + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.2667, "x": 0.859, "y": 1 }, + { "time": 0.3333, "x": 0.972, "y": 1 }, + { + "time": 0.5333, + "x": 2.356, + "y": 1, + "curve": [ 0.532, 0, 0.75, 1 ] + }, + { "time": 0.7, "x": 1, "y": 1 }, + { "time": 0.9, "x": 2.248, "y": 1 }, + { "time": 1.0667, "x": 2.003, "y": 1 }, + { "time": 1.2333, "x": 1.496, "y": 1 }, + { + "time": 1.3, + "x": 1.048, + "y": 1, + "curve": [ 0.34, 0.59, 0.765, 1 ] + }, + { "time": 1.4333, "x": 0.779, "y": 0.763 }, + { "time": 1.8, "x": 1, "y": 1 } + ] + }, + "front-leg-ik2": { + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front-arm3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1667, "angle": 17.37 }, + { "time": 0.3333, "angle": 31.94 }, + { + "time": 0.9, + "angle": 4.76, + "curve": [ 0.708, 0.01, 0.75, 1 ] + }, + { "time": 1.2333, "angle": 39.97 }, + { "time": 1.8, "angle": 0 } + ] + }, + "spine2": { + "rotate": [ + { "time": 0, "angle": -3.49 }, + { "time": 0.2667, "angle": -11.58 }, + { "time": 0.3333, "angle": -9.03 }, + { "time": 0.5, "angle": -2.66 }, + { "time": 0.7333, "angle": -5.78 }, + { "time": 1.1667, "angle": -11.58 }, + { "time": 1.2333, "angle": -6.7 }, + { "time": 1.6333, "angle": -2.5 }, + { "time": 1.8, "angle": -3.49 } + ] + }, + "spine3": { + "rotate": [ + { "time": 0, "angle": -20.41 }, + { "time": 0.2667, "angle": -11.58 }, + { "time": 0.3333, "angle": -9.03 }, + { "time": 0.5, "angle": -2.66 }, + { "time": 0.7333, "angle": -10.54 }, + { "time": 0.9, "angle": -16.17 }, + { "time": 1.1667, "angle": -11.58 }, + { "time": 1.2333, "angle": -9.03 }, + { "time": 1.6333, "angle": -7.26 }, + { "time": 1.8, "angle": -20.41 } + ] + }, + "back-arm3": { + "rotate": [ + { "time": 0, "angle": 26.23 }, + { "time": 0.1667, "angle": 53.15 }, + { "time": 0.3333, "angle": 116.26 }, + { "time": 0.5667, "angle": 35.72 }, + { "time": 0.9, "angle": 39.33 }, + { "time": 1.0667, "angle": 41.19 }, + { "time": 1.2333, "angle": 78.1 }, + { "time": 1.4, "angle": 36.16 }, + { "time": 1.8, "angle": 26.23 } + ] + }, + "back-foot3": { + "rotate": [ + { "time": 0, "angle": 11.35 }, + { "time": 0.7, "angle": -4.24 }, + { "time": 0.9, "angle": 25.49, "curve": "stepped" }, + { "time": 1.4333, "angle": 25.49 }, + { "time": 1.5333, "angle": -30.52 }, + { "time": 1.6333, "angle": -20.54 }, + { "time": 1.8, "angle": 11.35 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1667, "x": 0.835, "y": 1 }, + { "time": 0.3333, "x": 1, "y": 1 } + ] + }, + "spine1": { + "rotate": [ + { "time": 0, "angle": 10.81 }, + { "time": 0.2667, "angle": -28.7 }, + { "time": 0.3333, "angle": -24.32 }, + { "time": 0.5, "angle": -13.38 }, + { "time": 0.7333, "angle": 21.62 }, + { "time": 0.9, "angle": 46.61 }, + { "time": 1.1667, "angle": -28.7 }, + { "time": 1.2333, "angle": -43.34 }, + { "time": 1.6333, "angle": 24.89 }, + { "time": 1.8, "angle": 10.81 } + ] + }, + "spine4": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2667, "angle": -2.8 }, + { "time": 0.3333, "angle": -0.82 }, + { "time": 0.5, "angle": 4.14 }, + { "time": 0.7333, "angle": -3.74 }, + { "time": 0.9, "angle": -9.37 }, + { "time": 1.1667, "angle": -9.02 }, + { "time": 1.2333, "angle": -0.82 }, + { "time": 1.6333, "angle": 3.82 }, + { "time": 1.8, "angle": 0 } + ] + }, + "front-foot2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2667, "angle": -1.24 }, + { "time": 0.3333, "angle": -0.2 }, + { "time": 0.5, "angle": 22.72 }, + { "time": 0.5333, "angle": 26.87 }, + { "time": 0.7, "angle": -39.26 }, + { "time": 0.9, "angle": 11.27 }, + { "time": 1.0667, "angle": -18.18 }, + { "time": 1.2333, "angle": -2.64 }, + { "time": 1.5667, "angle": -5.84 }, + { "time": 1.8, "angle": 0 } + ] + }, + "belly": { + "translate": [ + { "time": 0, "x": 3.66, "y": -3.77 }, + { "time": 0.2667, "x": 13.83, "y": -3.82 }, + { "time": 0.6333, "x": -4.11, "y": -3.9 }, + { "time": 0.7667, "x": 10.21, "y": -2.92 }, + { "time": 0.8667, "x": 10.3, "y": -7.39 }, + { "time": 1.1, "x": -0.45, "y": -1.46 }, + { "time": 1.2333, "x": 12.38, "y": 2.33 }, + { "time": 1.3667, "x": 11.51, "y": 5.53 }, + { "time": 1.8, "x": 0, "y": 0 } + ] + }, + "butt": { + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.7667, "x": 9.88, "y": -25.41 }, + { "time": 0.8333, "x": 15.89, "y": -41.89 }, + { "time": 1.2333, "x": -12.49, "y": -33 }, + { "time": 1.8, "x": 0, "y": 0 } + ] + }, + "root": { + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 1.8, "x": -1276.66, "y": 0 } + ] + } + }, + "deform": { + "default": { + "back-leg": { + "back-leg": [ + { "time": 0.3 }, + { + "time": 0.3333, + "offset": 68, + "vertices": [ -1.72897, 2.75446, -1.5253, 2.94189, 0.0625, 3.6552, 0.01776, 3.65398, 0, 0, 0, 0, 0, 0, 0.0625, 3.6552, 0.01776, 3.65398, 0.90137, 3.54112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.98724, -1.57397, -0.03339, -2.08873, -0.0108, -2.08799, -0.51434, -2.02362, 0.98724, -1.57397, 0.87167, -1.68002, -0.03339, -2.08873, -0.0108, -2.08799 ] + }, + { "time": 0.4667, "curve": "stepped" }, + { "time": 1.3333 }, + { + "time": 1.4333, + "offset": 110, + "vertices": [ 2.52802, 0.00428, -0.03569, -4.90118, -3.71692, -3.19397, -4.88019, -0.43807, 5.17279, -0.0625, 5.1499, -0.4769, -0.07238, -10.06842, -7.6351, -6.56073, 6.64206, -0.09958, 6.61151, -0.62643, -0.09275, -12.93915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.01242, -1.65533, -1.25543, -1.0787, 0.86096, 0.02682, -0.01242, -1.65533, -1.25543, -1.0787 ] + }, + { "time": 1.5 } + ] + }, + "back-leg-path": { + "back-leg-path": [ + { "time": 1.4333 }, + { + "time": 1.5, + "vertices": [ 4.67719, -35.44354, 0, 0, -11.37146, 49.53738, -20.9989, -109.72336, 65.45837, -90.53627, -9.56653, -24.74756, 11.45203, -23.93552, -19.0719, 47.32281, -47.53955, 18.58409, 34.69244, -51.5341, 0, 0, 13.30164, -100.17206 ] + }, + { + "time": 1.5667, + "vertices": [ -0.9635, -22.43964, 0, 0, -13.80389, 27.61459, -41.00647, -55.1597, 7.62653, -96.25755, -24.12604, -24.11285, 7.19531, -37.87421, -31.47302, 7.7796, -12.34546, -3.32329, 26.55981, -38.73888, 0, 0, -13.62085, -280.84912 ] + }, + { "time": 1.6667 } + ] + }, + "body": { + "body": [ + { "time": 0 }, + { + "time": 0.3333, + "offset": 164, + "vertices": [ -0.01179, 0.02892, 0.00917, 0.0298, 0, 0, 1.17781, 0.89836, 1.48063, -0.04942, -6.68858, -1.30629, 4.38938, 4.03926, 4.59584, 3.27733, 5.6365, -0.11035, -4.92264, -0.8036, 4.54263, 1.06504, 3.29334, 0.58414, 2.94214, -1.40272, -4.28855, -0.56444, 5.07103, -0.2119, 2.95891, -0.75666, 1.83514, -2.22984, -4.31062, 0.6261, 6.11538, -0.87569, 3.7923, -1.67126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.17404, 0.22007, 0.27404, 0.06016 ] + }, + { + "time": 0.5333, + "offset": 164, + "vertices": [ -0.01887, 0.04627, 0.01467, 0.04768, 0, 0, 1.8845, 1.43737, 2.369, -0.07908, 1.46056, -1.33223, -0.75053, -3.7334, -2.8232, -2.55492, -3.80252, -0.19385, 2.81923, -1.5031, -0.33163, -6.75651, -4.28408, -5.23484, -6.6292, -1.34549, 3.83379, -1.12045, 0.51382, -8.79961, -4.81918, -7.38011, -8.4004, -2.66889, 3.83379, -1.12045, 0.51382, -8.79961, -4.81918, -7.38011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.27846, 0.35212, 0.43846, 0.09625 ] + }, + { + "time": 0.6333, + "offset": 170, + "vertices": [ -2.09907, 0.04961, -1.94301, 1.46154, 1.74966, 0.25744, 0.3765, -3.44555, -2.34343, -2.73069, -3.66285, -0.53693, 0, 0, 0, 0, 0, 0, 0, 0, 1.91689, -0.56022, 0.25691, -4.39981, -2.40959, -3.69006, -4.2002, -1.33444, 1.91689, -0.56022, 0.25691, -4.39981, -2.40959, -3.69006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.66468, 1.25351, 0.05177, 1.41789 ] + }, + { "time": 0.7333 }, + { + "time": 0.7667, + "offset": 264, + "vertices": [ -2.27499, -1.60417, -2.23926, -1.61371, -2.2196, -1.74294, -1.80919, 2.86346, -1.11118, 2.362, -1.14221, 2.35901, 2.63101, 1.41101, 2.63216, 1.41742, -0.8147, 8.46568, 9.45621, 1.07874, 9.45622, 1.08002, -1.00012, 6.23984, 6.96738, 1.29987, 6.96741, 1.30219, -0.68823, 4.24005, 4.73441, 0.89532, 4.73448, 0.89594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.05484, 2.78093, 0.01666, 2.78223, 3.10776, -0.05573, 3.10799, -0.05426, -1.17972, 2.87598, -0.99005, 3.55937, 3.97198, 1.27319, 3.97208, 1.27423, -2.74237, 3.14401 ] + }, + { "time": 0.8333, "curve": "stepped" }, + { "time": 1.0667 }, + { + "time": 1.3333, + "offset": 142, + "vertices": [ 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041 ] + }, + { "time": 1.4333 } + ] + }, + "front-leg-path": { + "front-leg-path": [ + { "time": 0.5667 }, + { + "time": 0.6333, + "vertices": [ 0.16366, -9.90768, 0, 0, -1.90419, 16.9905, 16.55858, -93.6721, 21.4361, -76.03695, -0.72391, -31.37989, 8.2138, -30.29725, -24.90733, 16.177, -28.83566, 5.62576, 82.90022, -63.82897, 0, 0, -39.50021, -13.99933 ] + }, + { + "time": 0.7, + "vertices": [ 0.20398, -12.34892, 0, 0, -2.37338, 21.17692, 20.63858, -116.75269, 26.71791, -94.77228, -0.90228, -39.11182, 10.23766, -37.76243, -31.04443, 20.16298, -35.9407, 7.01193, 22.68159, 24.72715, 0, 0, -292.39255, -342.79443 ] + }, + { "time": 0.8 } + ] + } + } + } + } +} +} \ No newline at end of file diff --git a/examples/stretchyman/export/stretchyman-pro.skel b/examples/stretchyman/export/stretchyman-pro.skel index b205d91b36c7e05a396817d1b93a97d8ad6abf82..771f2d3ab6beac6167465f9516a84ed4d60e9086 100644 GIT binary patch delta 1895 zcmbW1Urbw79LIm{ZcEE*hh&+=5JQl3T|*1B1&NY%whie>!d(ZFR z`JHp;wxzseJ=2;P38qt%@nmc?KbwC#lr4mdy>n-uJb!NbtSc0FBoGYybNRwVY$ft* z{MZw_mdC#rX$*8ddvW5K{N*moYR^eyYip~vI^r>EA4qNW%BlMO9rJ$Ay#HLkSK2L| zMopwv8P=kx#f}zVXz`n+*QiDKIArar&&p}BYW3Hje5l2DTC^N7UBtDR*J4|XeJy^} zqRlX8CAC;EOz-a*ruVP3IBN4Aq*)2sPS(Y!&2J3X2=zrR?r8C~7H+%w&0}^9s=Q|G z-9}2y+SKARd!YX0CoMb;=95f=-#Di}zN*D-Exy#k;V{4H)gq_G>sq|;=&O7G!C`uD zcbX#YH1jHIano5(u==UpdB33ZK4i0Dp7r3Dbn&CK{fEIWVTHzsRgLdcu4|u@` zoe+R-2;w7%k8XSf@X?76A3nU|ax=v(9nrE#Y)GW~%CS!zrDe{K>(Gas%hv(rKxhJNiyV+mP~Y?s@$L|sg|qFrLy&3tD=|W z&r6{b_-hqZ_9_77SUJqf2#mrQj7v@?VG5>U24h z97C6&!0S1f|66nFrY#c0xLkl73-tyJuxM*=8ofq+*CEORY(QK#xo)xqKG}u@%X=Lb zY5cdK$S5taW;bD!b-V>5=vxG^!^<7G&RFExyRg7G!5BN-5vmtd4|uui-LWCNuuVto z9yH`2j(2HF-KcA_2kUg!o&*DCSMPD(B=U8xdJEDkkfrf5vHR$mZ|IrNef{>*)IrOr z9sOT-?>}uI6`#sO82#j;P78HaCx>y^QiH6p>gR-{vj-28JTRD$Vnh#<)4Na~6Y7Ww zP;Y(osAEIzWEWTS7>eCbZcm9+oIQ7qT8VS>UeA7AYy?elA#}Gvz2a1>`ofJ5A9Y@y z%TGM#zjRSrtHE%>>TV!@i7eHJrTRkOy3G-?Sk;*$Rp-E)M_McvwblOkMZTSy`uN7$ LFV(jrl?Q$YDe9j` delta 316 zcmWN=JxBs!90%b0@J`<&h#bSMkMrnW&kxiyhyt~cXetVc0;LEM2lJMi5?U&#jvp;G zhC>Z4CoK(u5E{-&jm-_woI(Ewp35Vt{UF9d^`+&toU@p6ius*dW3N&>TuDSr<@G`% zKaz-~Bk=?;?>eRI@%%71x_U3T3%XmKcCQS#W4PZ2LZX3!XySn0(GSWb6B#LqeaS+L zzDpcT=9r~b*~AU)(_cE{GqFj}=o9_&B{8X3*r2CM7>|mMPlY3>a%8DPTXdjWVE!oP zXx$&dEq$Z@0EbO0^qThRkaEVcO)ppquPll`8q>nqq9>Z}wY84o$zv}8Z!q2rdQHn# Yah~d;nC@Z9?%~Jo%7P$z&lzpvAAZVdz5oCK diff --git a/examples/stretchyman/stretchyman-pro.spine b/examples/stretchyman/stretchyman-pro.spine index 12b5a52c78138ef0bb020bcfc6549c26050c1294..bcb8b25b8e21a8ba96c3736d9ba8cc24b96f4bdd 100644 GIT binary patch literal 46747 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 CJ^w5K literal 38422 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 From 7996f2bae063c46c813192788769b0346ea98ad9 Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Thu, 16 Aug 2018 02:21:11 +0200 Subject: [PATCH 09/12] [libgdx] Prevent rotation from spinning out of control. For example, when diff is -360 at the == 0 check, it later becomes 0. --- .../src/com/esotericsoftware/spine/AnimationState.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java index ebf790680..3bf31aeb2 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java @@ -356,10 +356,10 @@ public class AnimationState { // Mix between rotations using the direction of the shortest route on the first frame. float r1 = blend == MixBlend.setup ? bone.data.rotation : bone.rotation; float total, diff = r2 - r1; + diff -= (16384 - (int)(16384.499999999996 - diff / 360)) * 360; if (diff == 0) total = timelinesRotation[i]; else { - diff -= (16384 - (int)(16384.499999999996 - diff / 360)) * 360; float lastTotal, lastDiff; if (firstFrame) { lastTotal = 0; From 9b259c66e03fb08462abb6372a59cb1193b3bfdf Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Thu, 16 Aug 2018 02:51:37 +0200 Subject: [PATCH 10/12] Added TrackEntry#holdPrevious to avoid dipping in higher tracks. Also: - Added mixingTo to make track entries a doubly linked list, removing the need for the mixingTo array. - Renamed dip->hold, timelineData->timelineMode, timelineDipMix->timelineHoldMix ("dip" naming was bad). --- .../spine/AnimationStateTests.java | 12 +- .../spine/AnimationState.java | 190 ++++++++++-------- 2 files changed, 122 insertions(+), 80 deletions(-) diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTests.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTests.java index 629e22303..62c154f55 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTests.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTests.java @@ -30,6 +30,7 @@ package com.esotericsoftware.spine; +import java.lang.reflect.Field; import java.util.concurrent.atomic.AtomicInteger; import com.badlogic.gdx.Files.FileType; @@ -803,7 +804,8 @@ public class AnimationStateTests { expected.addAll(expectedArray); stateData = new AnimationStateData(skeletonData); state = new AnimationState(stateData); - state.trackEntryPool = new Pool() { + + Pool trackEntryPool = new Pool() { public TrackEntry obtain () { TrackEntry entry = super.obtain(); entryCount++; @@ -821,6 +823,14 @@ public class AnimationStateTests { super.free(entry); } }; + try { + Field field = state.getClass().getDeclaredField("trackEntryPool"); + field.setAccessible(true); + field.set(state, trackEntryPool); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + time = 0; fail = false; log(test + ": " + description); diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java index 3bf31aeb2..69626a8b5 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java @@ -38,6 +38,7 @@ import com.badlogic.gdx.utils.IntArray; import com.badlogic.gdx.utils.IntSet; import com.badlogic.gdx.utils.Pool; import com.badlogic.gdx.utils.Pool.Poolable; + import com.esotericsoftware.spine.Animation.AttachmentTimeline; import com.esotericsoftware.spine.Animation.DrawOrderTimeline; import com.esotericsoftware.spine.Animation.MixBlend; @@ -62,20 +63,20 @@ public class AnimationState { /** 1) This is the first timeline to set this property.
* 2) The next track entry to be applied does have a timeline to set this property.
* 3) The next track entry after that one does not have a timeline to set this property.
- * Result: Mix from the setup pose to the timeline pose, but avoid the "dipping" problem by not using the mix percentage. This - * means the timeline pose won't mix out toward the setup pose. A subsequent timeline will set this property using a mix. */ - static private final int DIP = 2; + * Result: Mix from the setup pose to the timeline pose, but do not mix out. This avoids "dipping" when crossfading animations + * that key the same property. A subsequent timeline will set this property using a mix. */ + static private final int HOLD = 2; /** 1) This is the first timeline to set this property.
* 2) The next track entry to be applied does have a timeline to set this property.
* 3) The next track entry after that one does have a timeline to set this property.
- * 4) timelineDipMix stores the first subsequent track entry that does not have a timeline to set this property.
- * Result: This is the same as DIP except the mix percentage from the timelineDipMix track entry is used. This handles when - * more than 2 track entries in a row have a timeline which sets the same property.
- * Eg, A -> B -> C -> D where A, B, and C have a timeline to set the same property, but D does not. When A is applied, A's mix - * percentage is not used to avoid dipping, however a later track entry (D, the first entry without a timeline which sets the - * property) is actually mixing out A (which affects B and C). Without using D's mix percentage, A would be applied fully until - * mixed out, causing snapping. */ - static private final int DIP_MIX = 3; + * 4) timelineHoldMix stores the first subsequent track entry that does not have a timeline to set this property.
+ * Result: The same as HOLD except the mix percentage from the timelineHoldMix track entry is used. This handles when more than + * 2 track entries in a row have a timeline that sets the same property.
+ * Eg, A -> B -> C -> D where A, B, and C have a timeline setting same property, but D does not. When A is applied, to avoid + * "dipping" A is not mixed out, however D (the first entry that doesn't set the property) mixing in is used to mix out A + * (which affects B and C). Without using D to mix out, A would be applied fully until mixing completes, then snap into + * place. */ + static private final int HOLD_MIX = 3; private AnimationStateData data; final Array tracks = new Array(); @@ -83,11 +84,10 @@ public class AnimationState { final Array listeners = new Array(); private final EventQueue queue = new EventQueue(); private final IntSet propertyIDs = new IntSet(); - private final Array mixingTo = new Array(); boolean animationsChanged; private float timeScale = 1; - Pool trackEntryPool = new Pool() { + final Pool trackEntryPool = new Pool() { protected Object newObject () { return new TrackEntry(); } @@ -147,6 +147,7 @@ public class AnimationState { // End mixing from entries once all have completed. TrackEntry from = current.mixingFrom; current.mixingFrom = null; + if (from != null) from.mixingTo = null; while (from != null) { queue.end(from); from = from.mixingFrom; @@ -174,6 +175,7 @@ public class AnimationState { // Require totalAlpha == 0 to ensure mixing is complete, unless mixDuration == 0 (the transition is a single frame). if (from.totalAlpha == 0 || to.mixDuration == 0) { to.mixingFrom = from.mixingFrom; + if (from.mixingFrom != null) from.mixingFrom.mixingTo = to; to.interruptAlpha = from.interruptAlpha; queue.end(from); } @@ -213,11 +215,11 @@ public class AnimationState { float animationLast = current.animationLast, animationTime = current.getAnimationTime(); int timelineCount = current.animation.timelines.size; Object[] timelines = current.animation.timelines.items; - if (mix == 1 || blend == MixBlend.add) { + if (i == 0 && (mix == 1 || blend == MixBlend.add)) { for (int ii = 0; ii < timelineCount; ii++) ((Timeline)timelines[ii]).apply(skeleton, animationLast, animationTime, events, mix, blend, MixDirection.in); } else { - int[] timelineData = current.timelineData.items; + int[] timelineMode = current.timelineMode.items; boolean firstFrame = current.timelinesRotation.size == 0; if (firstFrame) current.timelinesRotation.setSize(timelineCount << 1); @@ -225,7 +227,7 @@ public class AnimationState { for (int ii = 0; ii < timelineCount; ii++) { Timeline timeline = (Timeline)timelines[ii]; - MixBlend timelineBlend = timelineData[ii] == SUBSEQUENT ? blend : MixBlend.setup; + MixBlend timelineBlend = timelineMode[ii] == SUBSEQUENT ? blend : MixBlend.setup; if (timeline instanceof RotateTimeline) { applyRotateTimeline(timeline, skeleton, animationTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame); @@ -262,14 +264,14 @@ public class AnimationState { float animationLast = from.animationLast, animationTime = from.getAnimationTime(); int timelineCount = from.animation.timelines.size; Object[] timelines = from.animation.timelines.items; - float alphaDip = from.alpha * to.interruptAlpha, alphaMix = alphaDip * (1 - mix); + float alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix); if (blend == MixBlend.add) { for (int i = 0; i < timelineCount; i++) ((Timeline)timelines[i]).apply(skeleton, animationLast, animationTime, events, alphaMix, blend, MixDirection.out); } else { - int[] timelineData = from.timelineData.items; - Object[] timelineDipMix = from.timelineDipMix.items; + int[] timelineMode = from.timelineMode.items; + Object[] timelineHoldMix = from.timelineHoldMix.items; boolean firstFrame = from.timelinesRotation.size == 0; if (firstFrame) from.timelinesRotation.setSize(timelineCount << 1); @@ -280,7 +282,7 @@ public class AnimationState { Timeline timeline = (Timeline)timelines[i]; MixBlend timelineBlend; float alpha; - switch (timelineData[i]) { + switch (timelineMode[i]) { case SUBSEQUENT: if (!attachments && timeline instanceof AttachmentTimeline) continue; if (!drawOrder && timeline instanceof DrawOrderTimeline) continue; @@ -291,14 +293,14 @@ public class AnimationState { timelineBlend = MixBlend.setup; alpha = alphaMix; break; - case DIP: + case HOLD: timelineBlend = MixBlend.setup; - alpha = alphaDip; + alpha = alphaHold; break; default: timelineBlend = MixBlend.setup; - TrackEntry dipMix = (TrackEntry)timelineDipMix[i]; - alpha = alphaDip * Math.max(0, 1 - dipMix.mixTime / dipMix.mixDuration); + TrackEntry holdMix = (TrackEntry)timelineHoldMix[i]; + alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration); break; } from.totalAlpha += alpha; @@ -448,6 +450,7 @@ public class AnimationState { if (from == null) break; queue.end(from); entry.mixingFrom = null; + entry.mixingTo = null; entry = from; } @@ -463,6 +466,7 @@ public class AnimationState { if (from != null) { if (interrupt) queue.interrupt(from); current.mixingFrom = from; + from.mixingTo = current; current.mixTime = 0; // Store the interrupted mix percentage. @@ -625,6 +629,7 @@ public class AnimationState { entry.trackIndex = trackIndex; entry.animation = animation; entry.loop = loop; + entry.holdPrevious = false; entry.eventThreshold = 0; entry.attachmentThreshold = 0; @@ -662,15 +667,67 @@ public class AnimationState { animationsChanged = false; IntSet propertyIDs = this.propertyIDs; - propertyIDs.clear(); - Array mixingTo = this.mixingTo; + propertyIDs.clear(2048); for (int i = 0, n = tracks.size; i < n; i++) { TrackEntry entry = tracks.get(i); - if (entry != null && (i == 0 || entry.mixBlend != MixBlend.add)) entry.setTimelineData(null, mixingTo, propertyIDs); + if (entry == null) continue; + // Move to last entry, then iterate in reverse (the order animations are applied). + while (entry.mixingFrom != null) + entry = entry.mixingFrom; + do { + if (entry.mixingTo == null || entry.mixBlend != MixBlend.add) setTimelineModes(entry); + entry = entry.mixingTo; + } while (entry != null); } } + private void setTimelineModes (TrackEntry entry) { + TrackEntry to = entry.mixingTo; + Object[] timelines = entry.animation.timelines.items; + int timelinesCount = entry.animation.timelines.size; + int[] timelineMode = entry.timelineMode.setSize(timelinesCount); + entry.timelineHoldMix.clear(); + Object[] timelineHoldMix = entry.timelineHoldMix.setSize(timelinesCount); + IntSet propertyIDs = this.propertyIDs; + + if (to != null && to.holdPrevious) { + for (int i = 0; i < timelinesCount; i++) { + propertyIDs.add(((Timeline)timelines[i]).getPropertyId()); + timelineMode[i] = HOLD; + } + return; + } + + outer: + for (int i = 0; i < timelinesCount; i++) { + int id = ((Timeline)timelines[i]).getPropertyId(); + if (!propertyIDs.add(id)) + timelineMode[i] = SUBSEQUENT; + else if (to == null || !hasTimeline(to, id)) + timelineMode[i] = FIRST; + else { + for (TrackEntry next = to.mixingTo; next != null; next = next.mixingTo) { + if (hasTimeline(next, id)) continue; + if (next.mixDuration > 0) { + timelineMode[i] = HOLD_MIX; + timelineHoldMix[i] = next; + continue outer; + } + break; + } + timelineMode[i] = HOLD; + } + } + } + + private boolean hasTimeline (TrackEntry entry, int id) { + Object[] timelines = entry.animation.timelines.items; + for (int i = 0, n = entry.animation.timelines.size; i < n; i++) + if (((Timeline)timelines[i]).getPropertyId() == id) return true; + return false; + } + /** Returns the track entry for the animation currently playing on the track, or null if no animation is currently playing. */ public TrackEntry getCurrent (int trackIndex) { if (trackIndex >= tracks.size) return null; @@ -744,74 +801,30 @@ public class AnimationState { * References to a track entry must not be kept after the {@link AnimationStateListener#dispose(TrackEntry)} event occurs. */ static public class TrackEntry implements Poolable { Animation animation; - TrackEntry next, mixingFrom; + TrackEntry next, mixingFrom, mixingTo; AnimationStateListener listener; int trackIndex; - boolean loop; + boolean loop, holdPrevious; float eventThreshold, attachmentThreshold, drawOrderThreshold; float animationStart, animationEnd, animationLast, nextAnimationLast; float delay, trackTime, trackLast, nextTrackLast, trackEnd, timeScale; float alpha, mixTime, mixDuration, interruptAlpha, totalAlpha; MixBlend mixBlend = MixBlend.replace; - final IntArray timelineData = new IntArray(); - final Array timelineDipMix = new Array(); + final IntArray timelineMode = new IntArray(); + final Array timelineHoldMix = new Array(); final FloatArray timelinesRotation = new FloatArray(); public void reset () { next = null; mixingFrom = null; + mixingTo = null; animation = null; listener = null; - timelineData.clear(); - timelineDipMix.clear(); + timelineMode.clear(); + timelineHoldMix.clear(); timelinesRotation.clear(); } - /** @param to May be null. */ - TrackEntry setTimelineData (TrackEntry to, Array mixingToArray, IntSet propertyIDs) { - if (to != null) mixingToArray.add(to); - TrackEntry lastEntry = mixingFrom != null ? mixingFrom.setTimelineData(this, mixingToArray, propertyIDs) : this; - if (to != null) mixingToArray.pop(); - - Object[] mixingTo = mixingToArray.items; - int mixingToLast = mixingToArray.size - 1; - Object[] timelines = animation.timelines.items; - int timelinesCount = animation.timelines.size; - int[] timelineData = this.timelineData.setSize(timelinesCount); - timelineDipMix.clear(); - Object[] timelineDipMix = this.timelineDipMix.setSize(timelinesCount); - outer: - for (int i = 0; i < timelinesCount; i++) { - int id = ((Timeline)timelines[i]).getPropertyId(); - if (!propertyIDs.add(id)) - timelineData[i] = SUBSEQUENT; - else if (to == null || !to.hasTimeline(id)) - timelineData[i] = FIRST; - else { - for (int ii = mixingToLast; ii >= 0; ii--) { - TrackEntry entry = (TrackEntry)mixingTo[ii]; - if (!entry.hasTimeline(id)) { - if (entry.mixDuration > 0) { - timelineData[i] = DIP_MIX; - timelineDipMix[i] = entry; - continue outer; - } - break; - } - } - timelineData[i] = DIP; - } - } - return lastEntry; - } - - private boolean hasTimeline (int id) { - Object[] timelines = animation.timelines.items; - for (int i = 0, n = animation.timelines.size; i < n; i++) - if (((Timeline)timelines[i]).getPropertyId() == id) return true; - return false; - } - /** The index of the track where this track entry is either current or queued. *

* See {@link AnimationState#getCurrent(int)}. */ @@ -1054,6 +1067,25 @@ public class AnimationState { return mixingFrom; } + public void setHoldPrevious (boolean holdPrevious) { + this.holdPrevious = holdPrevious; + } + + /** If true, when mixing from the previous animation to this animation, the previous animation is applied as normal instead + * of being mixed out. + *

+ * When mixing between animations that key the same property, if a lower track also keys that property then the value will + * briefly dip toward the lower track value during the mix. This happens because the first animation mixes from 100% to 0% + * while the second animation mixes from 0% to 100%. Setting holdPrevious to true applies the first animation + * at 100% during the mix so the lower track value is overwritten. Such dipping does not occur on the lowest track which + * keys the property, only when a higher track also keys the property. + *

+ * Snapping will occur if holdPrevious is true and this animation does not key all the same properties as the + * previous animation. */ + public boolean getHoldPrevious () { + return holdPrevious; + } + /** Resets the rotation directions for mixing this entry's rotate timelines. This can be useful to avoid bones rotating the * long way around when using {@link #alpha} and starting animations on other tracks. *

@@ -1165,7 +1197,7 @@ public class AnimationState { start, interrupt, end, dispose, complete, event } - /** The interface which can be implemented to receive TrackEntry events. + /** The interface to implement for receiving TrackEntry events. *

* See TrackEntry {@link TrackEntry#setListener(AnimationStateListener)} and AnimationState * {@link AnimationState#addListener(AnimationStateListener)}. */ From 671c9210892291257be7572129a8bfb46b3353f1 Mon Sep 17 00:00:00 2001 From: pharan Date: Fri, 17 Aug 2018 23:19:49 +0800 Subject: [PATCH 11/12] [csharp] Fix rotation spinning out of control. Port of: 7996f2b --- spine-csharp/src/AnimationState.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spine-csharp/src/AnimationState.cs b/spine-csharp/src/AnimationState.cs index bf3121bc7..5a3dde2ee 100644 --- a/spine-csharp/src/AnimationState.cs +++ b/spine-csharp/src/AnimationState.cs @@ -334,10 +334,10 @@ namespace Spine { // Mix between rotations using the direction of the shortest route on the first frame while detecting crosses. float r1 = pose == MixBlend.Setup ? bone.data.rotation : bone.rotation; float total, diff = r2 - r1; + diff -= (16384 - (int)(16384.499999999996 - diff / 360)) * 360; if (diff == 0) { total = timelinesRotation[i]; } else { - diff -= (16384 - (int)(16384.499999999996 - diff / 360)) * 360; float lastTotal, lastDiff; if (firstFrame) { lastTotal = 0; From 7df713b13f2096f1df5fe2644311402a067ffb80 Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Thu, 23 Aug 2018 12:15:32 +0200 Subject: [PATCH 12/12] Added IK constraint compress and uniform settings. --- .../com/esotericsoftware/spine/Animation.java | 27 ++++++--- .../esotericsoftware/spine/IkConstraint.java | 38 ++++++++---- .../spine/IkConstraintData.java | 59 ++++++++++++------- .../com/esotericsoftware/spine/Skeleton.java | 5 +- .../spine/SkeletonBinary.java | 7 ++- .../esotericsoftware/spine/SkeletonJson.java | 9 ++- 6 files changed, 98 insertions(+), 47 deletions(-) diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java index 6fa9f2d8c..87e9eba9c 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java @@ -1295,15 +1295,15 @@ public class Animation { } } - /** Changes an IK constraint's {@link IkConstraint#getMix()}, {@link IkConstraint#getBendDirection()}, and - * {@link IkConstraint#getStretch()}. */ + /** Changes an IK constraint's {@link IkConstraint#getMix()}, {@link IkConstraint#getBendDirection()}, + * {@link IkConstraint#getStretch()}, and {@link IkConstraint#getCompress()}. */ static public class IkConstraintTimeline extends CurveTimeline { - static public final int ENTRIES = 4; - static private final int PREV_TIME = -4, PREV_MIX = -3, PREV_BEND_DIRECTION = -2, PREV_STRETCH = -1; - static private final int MIX = 1, BEND_DIRECTION = 2, STRETCH = 3; + static public final int ENTRIES = 5; + static private final int PREV_TIME = -5, PREV_MIX = -4, PREV_BEND_DIRECTION = -3, PREV_COMPRESS = -2, PREV_STRETCH = -1; + static private final int MIX = 1, BEND_DIRECTION = 2, COMPRESS = 3, STRETCH = 4; int ikConstraintIndex; - private final float[] frames; // time, mix, bendDirection, ... + private final float[] frames; // time, mix, bendDirection, compress, stretch, ... public IkConstraintTimeline (int frameCount) { super(frameCount); @@ -1324,17 +1324,18 @@ public class Animation { return ikConstraintIndex; } - /** The time in seconds, mix, and bend direction for each key frame. */ + /** The time in seconds, mix, bend direction, compress, and stretch for each key frame. */ public float[] getFrames () { return frames; } - /** Sets the time in seconds, mix, and bend direction for the specified key frame. */ - public void setFrame (int frameIndex, float time, float mix, int bendDirection, boolean stretch) { + /** Sets the time in seconds, mix, bend direction, compress, and stretch for the specified key frame. */ + public void setFrame (int frameIndex, float time, float mix, int bendDirection, boolean compress, boolean stretch) { frameIndex *= ENTRIES; frames[frameIndex] = time; frames[frameIndex + MIX] = mix; frames[frameIndex + BEND_DIRECTION] = bendDirection; + frames[frameIndex + COMPRESS] = compress ? 1 : 0; frames[frameIndex + STRETCH] = stretch ? 1 : 0; } @@ -1348,11 +1349,13 @@ public class Animation { case setup: constraint.mix = constraint.data.mix; constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; constraint.stretch = constraint.data.stretch; return; case first: constraint.mix += (constraint.data.mix - constraint.mix) * alpha; constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; constraint.stretch = constraint.data.stretch; } return; @@ -1363,15 +1366,18 @@ public class Animation { constraint.mix = constraint.data.mix + (frames[frames.length + PREV_MIX] - constraint.data.mix) * alpha; if (direction == out) { constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; constraint.stretch = constraint.data.stretch; } else { constraint.bendDirection = (int)frames[frames.length + PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + PREV_COMPRESS] != 0; constraint.stretch = frames[frames.length + PREV_STRETCH] != 0; } } else { constraint.mix += (frames[frames.length + PREV_MIX] - constraint.mix) * alpha; if (direction == in) { constraint.bendDirection = (int)frames[frames.length + PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + PREV_COMPRESS] != 0; constraint.stretch = frames[frames.length + PREV_STRETCH] != 0; } } @@ -1388,15 +1394,18 @@ public class Animation { constraint.mix = constraint.data.mix + (mix + (frames[frame + MIX] - mix) * percent - constraint.data.mix) * alpha; if (direction == out) { constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; constraint.stretch = constraint.data.stretch; } else { constraint.bendDirection = (int)frames[frame + PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + PREV_COMPRESS] != 0; constraint.stretch = frames[frame + PREV_STRETCH] != 0; } } else { constraint.mix += (mix + (frames[frame + MIX] - mix) * percent - constraint.mix) * alpha; if (direction == in) { constraint.bendDirection = (int)frames[frame + PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + PREV_COMPRESS] != 0; constraint.stretch = frames[frame + PREV_STRETCH] != 0; } } diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java index 77623cbad..4fbcebab4 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java @@ -43,7 +43,7 @@ public class IkConstraint implements Constraint { final Array bones; Bone target; int bendDirection; - boolean stretch; + boolean compress, stretch; float mix = 1; public IkConstraint (IkConstraintData data, Skeleton skeleton) { @@ -52,6 +52,7 @@ public class IkConstraint implements Constraint { this.data = data; mix = data.mix; bendDirection = data.bendDirection; + compress = data.compress; stretch = data.stretch; bones = new Array(data.bones.size); @@ -71,6 +72,7 @@ public class IkConstraint implements Constraint { target = skeleton.bones.get(constraint.target.data.index); mix = constraint.mix; bendDirection = constraint.bendDirection; + compress = constraint.compress; stretch = constraint.stretch; } @@ -84,7 +86,7 @@ public class IkConstraint implements Constraint { Array bones = this.bones; switch (bones.size) { case 1: - apply(bones.first(), target.worldX, target.worldY, stretch, mix); + apply(bones.first(), target.worldX, target.worldY, compress, stretch, data.uniform, mix); break; case 2: apply(bones.first(), bones.get(1), target.worldX, target.worldY, bendDirection, stretch, mix); @@ -128,8 +130,17 @@ public class IkConstraint implements Constraint { this.bendDirection = bendDirection; } - /** When true, if the target is out of range, the parent bone is scaled on the X axis to reach it. If the parent bone has local - * nonuniform scale, stretching is not applied. */ + /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */ + public boolean getCompress () { + return compress; + } + + public void setCompress (boolean compress) { + this.compress = compress; + } + + /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained + * and the parent bone has local nonuniform scale, stretch is not applied. */ public boolean getStretch () { return stretch; } @@ -148,7 +159,8 @@ public class IkConstraint implements Constraint { } /** Applies 1 bone IK. The target is specified in the world coordinate system. */ - static public void apply (Bone bone, float targetX, float targetY, boolean stretch, float alpha) { + static public void apply (Bone bone, float targetX, float targetY, boolean compress, boolean stretch, boolean uniform, + float alpha) { if (!bone.appliedValid) bone.updateAppliedTransform(); Bone p = bone.parent; float id = 1 / (p.a * p.d - p.b * p.c); @@ -158,14 +170,18 @@ public class IkConstraint implements Constraint { if (bone.ascaleX < 0) rotationIK += 180; if (rotationIK > 180) rotationIK -= 360; - else if (rotationIK < -180) rotationIK += 360; - float sx = bone.ascaleX; - if (stretch) { + else if (rotationIK < -180) // + rotationIK += 360; + float sx = bone.ascaleX, sy = bone.ascaleY; + if (compress || stretch) { float b = bone.data.length * sx, dd = (float)Math.sqrt(tx * tx + ty * ty); - if (dd > b && b > 0.0001f) sx *= (dd / b - 1) * alpha + 1; + if ((compress && dd < b) || (stretch && dd > b) && b > 0.0001f) { + float s = (dd / b - 1) * alpha + 1; + sx *= s; + if (uniform) sy *= s; + } } - bone.updateWorldTransform(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, bone.ascaleY, bone.ashearX, - bone.ashearY); + bone.updateWorldTransform(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY); } /** Applies 2 bone IK. The target is specified in the world coordinate system. diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraintData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraintData.java index 81bceb23b..0ef63a675 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraintData.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraintData.java @@ -41,7 +41,7 @@ public class IkConstraintData { final Array bones = new Array(); BoneData target; int bendDirection = 1; - boolean stretch; + boolean compress, stretch, uniform; float mix = 1; public IkConstraintData (String name) { @@ -78,25 +78,6 @@ public class IkConstraintData { this.target = target; } - /** Controls the bend direction of the IK bones, either 1 or -1. */ - public int getBendDirection () { - return bendDirection; - } - - public void setBendDirection (int bendDirection) { - this.bendDirection = bendDirection; - } - - /** When true, if the target is out of range, the parent bone is scaled on the X axis to reach it. If the parent bone has local - * nonuniform scale, stretching is not applied. */ - public boolean getStretch () { - return stretch; - } - - public void setStretch (boolean stretch) { - this.stretch = stretch; - } - /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */ public float getMix () { return mix; @@ -106,6 +87,44 @@ public class IkConstraintData { this.mix = mix; } + /** Controls the bend direction of the IK bones, either 1 or -1. */ + public int getBendDirection () { + return bendDirection; + } + + public void setBendDirection (int bendDirection) { + this.bendDirection = bendDirection; + } + + /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */ + public boolean getCompress () { + return compress; + } + + public void setCompress (boolean compress) { + this.compress = compress; + } + + /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained + * and the parent bone has local nonuniform scale, stretch is not applied. */ + public boolean getStretch () { + return stretch; + } + + public void setStretch (boolean stretch) { + this.stretch = stretch; + } + + /** When true, only a single bone is being constrained, and {@link #getCompress()} or {@link #getStretch()} is used, the bone + * is scaled on both the X and Y axes. */ + public boolean getUniform () { + return uniform; + } + + public void setUniform (boolean uniform) { + this.uniform = uniform; + } + public String toString () { return name; } diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java index 1e3168037..498dd54d2 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java @@ -394,9 +394,10 @@ public class Skeleton { Array ikConstraints = this.ikConstraints; for (int i = 0, n = ikConstraints.size; i < n; i++) { IkConstraint constraint = ikConstraints.get(i); - constraint.bendDirection = constraint.data.bendDirection; - constraint.stretch = constraint.data.stretch; constraint.mix = constraint.data.mix; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; } Array transformConstraints = this.transformConstraints; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java index 1d5e0959b..3f88d8651 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java @@ -232,7 +232,9 @@ public class SkeletonBinary { data.target = skeletonData.bones.get(input.readInt(true)); data.mix = input.readFloat(); data.bendDirection = input.readByte(); + data.compress = input.readBoolean(); data.stretch = input.readBoolean(); + data.uniform = input.readBoolean(); skeletonData.ikConstraints.add(data); } @@ -307,7 +309,7 @@ public class SkeletonBinary { data.intValue = input.readInt(false); data.floatValue = input.readFloat(); data.stringValue = input.readString(); - data.audioPath = input.readString(); + data.audioPath = input.readString(); skeletonData.events.add(data); } @@ -661,7 +663,8 @@ public class SkeletonBinary { IkConstraintTimeline timeline = new IkConstraintTimeline(frameCount); timeline.ikConstraintIndex = index; for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) { - timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readByte(), input.readBoolean()); + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readByte(), input.readBoolean(), + input.readBoolean()); if (frameIndex < frameCount - 1) readCurve(input, frameIndex, timeline); } timelines.add(timeline); diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java index 3120595b6..9ec1d11ab 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java @@ -185,9 +185,11 @@ public class SkeletonJson { data.target = skeletonData.findBone(targetName); if (data.target == null) throw new SerializationException("IK target bone not found: " + targetName); - data.bendDirection = constraintMap.getBoolean("bendPositive", true) ? 1 : -1; - data.stretch = constraintMap.getBoolean("stretch", false); data.mix = constraintMap.getFloat("mix", 1); + data.bendDirection = constraintMap.getBoolean("bendPositive", true) ? 1 : -1; + data.compress = constraintMap.getBoolean("compress", false); + data.stretch = constraintMap.getBoolean("stretch", false); + data.uniform = constraintMap.getBoolean("uniform", false); skeletonData.ikConstraints.add(data); } @@ -569,7 +571,8 @@ public class SkeletonJson { int frameIndex = 0; for (JsonValue valueMap = constraintMap.child; valueMap != null; valueMap = valueMap.next) { timeline.setFrame(frameIndex, valueMap.getFloat("time"), valueMap.getFloat("mix", 1), - valueMap.getBoolean("bendPositive", true) ? 1 : -1, valueMap.getBoolean("stretch", false)); + valueMap.getBoolean("bendPositive", true) ? 1 : -1, valueMap.getBoolean("compress", false), + valueMap.getBoolean("stretch", false)); readCurve(valueMap, timeline, frameIndex); frameIndex++; }