diff --git a/spine-tk2d/Assets/Spine/BoneComponent.cs b/spine-tk2d/Assets/Spine/BoneComponent.cs index 946ef09d9..ea88c227e 100644 --- a/spine-tk2d/Assets/Spine/BoneComponent.cs +++ b/spine-tk2d/Assets/Spine/BoneComponent.cs @@ -38,44 +38,52 @@ using Spine; [ExecuteInEditMode] [AddComponentMenu("Spine/BoneComponent")] public class BoneComponent : MonoBehaviour { - public SkeletonComponent skeletonComponent; + public bool valid; + public SkeletonRenderer skeletonRenderer; public Bone bone; /// If a bone isn't set, boneName is used to find the bone. public String boneName; protected Transform cachedTransform; - protected Transform skeletonComponentTransform; + protected Transform skeletonTransform; - void Awake () { + public void Reset () { + bone = null; cachedTransform = transform; + valid = skeletonRenderer != null && skeletonRenderer.valid; + if (!valid) return; + skeletonTransform = skeletonRenderer.transform; + } - if(skeletonComponent == null) return; - skeletonComponentTransform = skeletonComponent.transform; + public void Awake () { + Reset(); } public void LateUpdate () { - if (skeletonComponent == null || skeletonComponent.skeleton == null) return; + if (!valid) { + Reset(); + return; + } + if (bone == null) { - if (boneName == null) return; - bone = skeletonComponent.skeleton.FindBone(boneName); + if (boneName == null || boneName.Length == 0) return; + bone = skeletonRenderer.skeleton.FindBone(boneName); if (bone == null) { - Debug.Log("Bone not found: " + boneName, this); + Debug.LogError("Bone not found: " + boneName, this); return; } } - if (cachedTransform.parent == skeletonComponentTransform) { + if (cachedTransform.parent == skeletonTransform) { cachedTransform.localPosition = new Vector3(bone.worldX, bone.worldY, cachedTransform.localPosition.z); Vector3 rotation = cachedTransform.localRotation.eulerAngles; cachedTransform.localRotation = Quaternion.Euler(rotation.x, rotation.y, bone.worldRotation); } else { - cachedTransform.position = skeletonComponentTransform.TransformPoint(new Vector3(bone.worldX, bone.worldY, cachedTransform.position.z)); - Vector3 rotation = skeletonComponentTransform.rotation.eulerAngles; + cachedTransform.position = skeletonTransform.TransformPoint(new Vector3(bone.worldX, bone.worldY, cachedTransform.position.z)); + Vector3 rotation = skeletonTransform.rotation.eulerAngles; cachedTransform.rotation = Quaternion.Euler(rotation.x, rotation.y, - skeletonComponentTransform.rotation.eulerAngles.z + bone.worldRotation); + skeletonTransform.rotation.eulerAngles.z + bone.worldRotation); } - } - -} +} \ No newline at end of file diff --git a/spine-tk2d/Assets/Spine/Editor/BoneComponentInspector.cs b/spine-tk2d/Assets/Spine/Editor/BoneComponentInspector.cs index 4767372eb..494b3db2d 100644 --- a/spine-tk2d/Assets/Spine/Editor/BoneComponentInspector.cs +++ b/spine-tk2d/Assets/Spine/Editor/BoneComponentInspector.cs @@ -34,10 +34,10 @@ using UnityEngine; [CustomEditor(typeof(BoneComponent))] public class BoneComponentInspector : Editor { - private SerializedProperty boneName, skeletonComponent; + private SerializedProperty boneName, skeletonRenderer; void OnEnable () { - skeletonComponent = serializedObject.FindProperty("skeletonComponent"); + skeletonRenderer = serializedObject.FindProperty("skeletonRenderer"); boneName = serializedObject.FindProperty("boneName"); } @@ -45,13 +45,13 @@ public class BoneComponentInspector : Editor { serializedObject.Update(); BoneComponent component = (BoneComponent)target; - EditorGUILayout.PropertyField(skeletonComponent); + EditorGUILayout.PropertyField(skeletonRenderer); - if (component.skeletonComponent != null) { - String[] bones = new String[component.skeletonComponent.skeleton.Data.Bones.Count + 1]; + if (component.valid) { + String[] bones = new String[component.skeletonRenderer.skeleton.Data.Bones.Count + 1]; bones[0] = ""; for (int i = 0; i < bones.Length - 1; i++) - bones[i + 1] = component.skeletonComponent.skeleton.Data.Bones[i].Name; + bones[i + 1] = component.skeletonRenderer.skeleton.Data.Bones[i].Name; Array.Sort(bones); int boneIndex = Math.Max(0, Array.IndexOf(bones, boneName.stringValue)); @@ -61,14 +61,13 @@ public class BoneComponentInspector : Editor { boneIndex = EditorGUILayout.Popup(boneIndex, bones); EditorGUILayout.EndHorizontal(); - boneName.stringValue = bones[boneIndex];; + boneName.stringValue = boneIndex == 0 ? null : bones[boneIndex]; } if (serializedObject.ApplyModifiedProperties() || (Event.current.type == EventType.ValidateCommand && Event.current.commandName == "UndoRedoPerformed") ) { - component.bone = null; - component.LateUpdate(); + component.Reset(); } } } diff --git a/spine-tk2d/Assets/Spine/Editor/Menus.cs b/spine-tk2d/Assets/Spine/Editor/Menus.cs index 1ad559627..a01ad8312 100644 --- a/spine-tk2d/Assets/Spine/Editor/Menus.cs +++ b/spine-tk2d/Assets/Spine/Editor/Menus.cs @@ -54,9 +54,9 @@ public class Menus { Selection.activeObject = asset; } - [MenuItem("GameObject/Create Other/Spine SkeletonComponent")] - static public void CreateSkeletonComponentGameObject () { - GameObject gameObject = new GameObject("New SkeletonComponent", typeof(SkeletonComponent)); + [MenuItem("GameObject/Create Other/Spine SkeletonRenderer")] + static public void CreateSkeletonRendererGameObject () { + GameObject gameObject = new GameObject("New SkeletonRenderer", typeof(SkeletonRenderer)); EditorUtility.FocusProjectWindow(); Selection.activeObject = gameObject; } diff --git a/spine-tk2d/Assets/Spine/Editor/SkeletonAnimationInspector.cs b/spine-tk2d/Assets/Spine/Editor/SkeletonAnimationInspector.cs index c0b248af5..9f646f281 100644 --- a/spine-tk2d/Assets/Spine/Editor/SkeletonAnimationInspector.cs +++ b/spine-tk2d/Assets/Spine/Editor/SkeletonAnimationInspector.cs @@ -89,10 +89,8 @@ public class SkeletonAnimationInspector : Editor { animationIndex = EditorGUILayout.Popup(animationIndex, animations); EditorGUILayout.EndHorizontal(); - if (animationIndex == 0) - component.animationName = null; - else - component.animationName = animations[animationIndex]; + component.animationName = animationIndex == 0 ? null : animations[animationIndex]; + animationName.stringValue = component.animationName; } // Animation loop. @@ -109,8 +107,7 @@ public class SkeletonAnimationInspector : Editor { (Event.current.type == EventType.ValidateCommand && Event.current.commandName == "UndoRedoPerformed") ) { if (!Application.isPlaying) { - component.Clear(); - component.Update(); + component.Reset(); } } } diff --git a/spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs b/spine-tk2d/Assets/Spine/Editor/SkeletonRendererInspector.cs similarity index 94% rename from spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs rename to spine-tk2d/Assets/Spine/Editor/SkeletonRendererInspector.cs index e384db750..bb3916c61 100644 --- a/spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs +++ b/spine-tk2d/Assets/Spine/Editor/SkeletonRendererInspector.cs @@ -32,8 +32,8 @@ using System; using UnityEditor; using UnityEngine; -[CustomEditor(typeof(SkeletonComponent))] -public class SkeletonComponentInspector : Editor { +[CustomEditor(typeof(SkeletonRenderer))] +public class SkeletonRendererInspector : Editor { private SerializedProperty skeletonDataAsset, initialSkinName, timeScale, normals, tangents; void OnEnable () { @@ -46,7 +46,7 @@ public class SkeletonComponentInspector : Editor { override public void OnInspectorGUI () { serializedObject.Update(); - SkeletonComponent component = (SkeletonComponent)target; + SkeletonRenderer component = (SkeletonRenderer)target; EditorGUILayout.PropertyField(skeletonDataAsset); @@ -78,8 +78,7 @@ public class SkeletonComponentInspector : Editor { (Event.current.type == EventType.ValidateCommand && Event.current.commandName == "UndoRedoPerformed") ) { if (!Application.isPlaying) { - component.Clear(); - component.Update(); + component.Reset(); } } } diff --git a/spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs.meta b/spine-tk2d/Assets/Spine/Editor/SkeletonRendererInspector.cs.meta similarity index 78% rename from spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs.meta rename to spine-tk2d/Assets/Spine/Editor/SkeletonRendererInspector.cs.meta index 59915bafb..9d775f336 100644 --- a/spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs.meta +++ b/spine-tk2d/Assets/Spine/Editor/SkeletonRendererInspector.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: dbb89dadcac8d6b48869aeb81b0ae88f +guid: 350bd1e336864e045a8d44c7afe923e8 MonoImporter: serializedVersion: 2 defaultReferences: [] diff --git a/spine-tk2d/Assets/Spine/SkeletonAnimation.cs b/spine-tk2d/Assets/Spine/SkeletonAnimation.cs index d6289b3d2..63a4be1a5 100644 --- a/spine-tk2d/Assets/Spine/SkeletonAnimation.cs +++ b/spine-tk2d/Assets/Spine/SkeletonAnimation.cs @@ -34,10 +34,10 @@ using System.Collections.Generic; using UnityEngine; using Spine; -/** Extends SkeletonComponent to apply an animation. */ -[ExecuteInEditMode, RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))] +[ExecuteInEditMode] [AddComponentMenu("Spine/SkeletonAnimation")] -public class SkeletonAnimation : SkeletonComponent { +public class SkeletonAnimation : SkeletonRenderer { + public float timeScale = 1; public bool loop; public Spine.AnimationState state; @@ -59,24 +59,30 @@ public class SkeletonAnimation : SkeletonComponent { state.SetAnimation(0, value, loop); } } - - override public void Initialize () { - if (Initialized) return; - base.Initialize(); - + public override void Reset () { + base.Reset(); + if (!valid) return; + state = new Spine.AnimationState(skeletonDataAsset.GetAnimationStateData()); - if (_animationName != null && _animationName.Length > 0) state.SetAnimation(0, _animationName, loop); + if (_animationName != null && _animationName.Length > 0) { + state.SetAnimation(0, _animationName, loop); + Update(0); + } } - override public void UpdateSkeleton (float deltaTime) { - // Apply the animation. + public virtual void Update () { + Update(Time.deltaTime); + } + + public virtual void Update (float deltaTime) { + if (!valid) return; + + deltaTime *= timeScale; + skeleton.Update(deltaTime); state.Update(deltaTime * timeScale); state.Apply(skeleton); - if (UpdateBones != null) UpdateBones(this); - - // Call overridden method to call skeleton Update and UpdateWorldTransform. - base.UpdateSkeleton(deltaTime); + skeleton.UpdateWorldTransform(); } } diff --git a/spine-tk2d/Assets/Spine/SkeletonComponent.cs b/spine-tk2d/Assets/Spine/SkeletonComponent.cs deleted file mode 100644 index 16f23d6dd..000000000 --- a/spine-tk2d/Assets/Spine/SkeletonComponent.cs +++ /dev/null @@ -1,334 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.1 - * - * Copyright (c) 2013, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to install, execute and perform the Spine Runtimes - * Software (the "Software") solely for internal use. Without the written - * permission of Esoteric Software (typically granted by licensing Spine), you - * may not (a) modify, translate, adapt or otherwise create derivative works, - * improvements of the Software or develop new applications using the Software - * or (b) remove, delete, alter or obscure any trademarks or any copyright, - * trademark, patent or other intellectual property or proprietary rights - * notices on or in the Software, including any copy thereof. Redistributions - * in binary or source form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -using System; -using System.IO; -using System.Collections.Generic; -using UnityEngine; -using Spine; - -/** Renders a skeleton. Extend to apply animations, get bones and manipulate them, etc. */ -[ExecuteInEditMode, RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))] -[AddComponentMenu("Spine/SkeletonComponent")] -public class SkeletonComponent : MonoBehaviour { - public SkeletonDataAsset skeletonDataAsset; - public Skeleton skeleton; - public String initialSkinName; - public float timeScale = 1; - public bool calculateNormals; - public bool calculateTangents; - public float zSpacing; - private MeshFilter meshFilter; - private Mesh mesh, mesh1, mesh2; - private bool useMesh1; - private float[] vertexPositions = new float[8]; - private int lastVertexCount; - private Vector3[] vertices; - private Color32[] colors; - private Vector2[] uvs; - private Material[] sharedMaterials = new Material[0]; - private List submeshMaterials = new List(); - private List submeshes = new List(); - - /// False if Initialize needs to be called. - public bool Initialized { - get { - if (skeletonDataAsset == null) return true; - SkeletonData skeletonData = skeletonDataAsset.GetSkeletonData(false); - if (skeletonData == null) return true; - return skeleton != null && skeleton.Data == skeletonData; - } - } - - public virtual void Clear () { - if (meshFilter != null) meshFilter.sharedMesh = null; - if (mesh != null) DestroyImmediate(mesh); - if (renderer != null) renderer.sharedMaterial = null; - mesh = null; - mesh1 = null; - mesh2 = null; - lastVertexCount = 0; - vertices = null; - colors = null; - uvs = null; - sharedMaterials = new Material[0]; - submeshMaterials.Clear(); - submeshes.Clear(); - skeleton = null; - } - - public virtual void Initialize () { - if (Initialized) return; - - meshFilter = GetComponent(); - mesh1 = newMesh(); - mesh2 = newMesh(); - - vertices = new Vector3[0]; - - skeleton = new Skeleton(skeletonDataAsset.GetSkeletonData(false)); - - if (initialSkinName != null && initialSkinName.Length > 0 && initialSkinName != "default") { - skeleton.SetSkin(initialSkinName); - skeleton.SetSlotsToSetupPose(); - } - } - - private Mesh newMesh () { - Mesh mesh = new Mesh(); - mesh.name = "Skeleton Mesh"; - mesh.hideFlags = HideFlags.HideAndDontSave; - mesh.MarkDynamic(); - return mesh; - } - - public virtual void UpdateSkeleton (float deltaTime) { - skeleton.Update(deltaTime * timeScale); - skeleton.UpdateWorldTransform(); - } - - public virtual void Update () { - if (skeletonDataAsset == null) { - Clear(); - return; - } - - SkeletonData skeletonData = skeletonDataAsset.GetSkeletonData(false); - - if (skeletonData == null) { - Clear(); - return; - } - - // Initialize fields. - if (skeleton == null || skeleton.Data != skeletonData) - Initialize(); - - UpdateSkeleton(Time.deltaTime); - - // Count quads and submeshes. - int quadCount = 0, submeshQuadCount = 0; - Material lastMaterial = null; - submeshMaterials.Clear(); - List drawOrder = skeleton.DrawOrder; - for (int i = 0, n = drawOrder.Count; i < n; i++) { - RegionAttachment regionAttachment = drawOrder[i].Attachment as RegionAttachment; - if (regionAttachment == null) - continue; - - // Add submesh when material changes. - Material material = (Material)regionAttachment.RendererObject; - if (lastMaterial != material && lastMaterial != null) { - addSubmesh(lastMaterial, quadCount, submeshQuadCount, false); - submeshQuadCount = 0; - } - lastMaterial = material; - - quadCount++; - submeshQuadCount++; - } - addSubmesh(lastMaterial, quadCount, submeshQuadCount, true); - - // Set materials. - if (submeshMaterials.Count == sharedMaterials.Length) - submeshMaterials.CopyTo(sharedMaterials); - else - sharedMaterials = submeshMaterials.ToArray(); - renderer.sharedMaterials = sharedMaterials; - - // Double buffer mesh. - Mesh mesh = useMesh1 ? mesh1 : mesh2; - meshFilter.sharedMesh = mesh; - - // Ensure mesh data is the right size. - Vector3[] vertices = this.vertices; - int vertexCount = quadCount * 4; - bool newTriangles = vertexCount > vertices.Length; - if (newTriangles) { - // Not enough vertices, increase size. - this.vertices = vertices = new Vector3[vertexCount]; - this.colors = new Color32[vertexCount]; - this.uvs = new Vector2[vertexCount]; - mesh1.Clear(); - mesh2.Clear(); - } else { - // Too many vertices, zero the extra. - Vector3 zero = Vector3.zero; - for (int i = vertexCount, n = lastVertexCount; i < n; i++) - vertices[i] = zero; - } - lastVertexCount = vertexCount; - - // Setup mesh. - float[] vertexPositions = this.vertexPositions; - Vector2[] uvs = this.uvs; - Color32[] colors = this.colors; - int vertexIndex = 0; - Color32 color = new Color32(); - float a = skeleton.A * 255, r = skeleton.R, g = skeleton.G, b = skeleton.B, zSpacing = this.zSpacing; - for (int i = 0, n = drawOrder.Count; i < n; i++) { - Slot slot = drawOrder[i]; - RegionAttachment regionAttachment = slot.Attachment as RegionAttachment; - if (regionAttachment == null) - continue; - - regionAttachment.ComputeWorldVertices(skeleton.X, skeleton.Y, slot.Bone, vertexPositions); - - float z = i * zSpacing; - vertices[vertexIndex] = new Vector3(vertexPositions[RegionAttachment.X1], vertexPositions[RegionAttachment.Y1], z); - vertices[vertexIndex + 1] = new Vector3(vertexPositions[RegionAttachment.X4], vertexPositions[RegionAttachment.Y4], z); - vertices[vertexIndex + 2] = new Vector3(vertexPositions[RegionAttachment.X2], vertexPositions[RegionAttachment.Y2], z); - vertices[vertexIndex + 3] = new Vector3(vertexPositions[RegionAttachment.X3], vertexPositions[RegionAttachment.Y3], z); - - color.a = (byte)(a * slot.A); - color.r = (byte)(r * slot.R * color.a); - color.g = (byte)(g * slot.G * color.a); - color.b = (byte)(b * slot.B * color.a); - if (slot.Data.AdditiveBlending) color.a = 0; - colors[vertexIndex] = color; - colors[vertexIndex + 1] = color; - colors[vertexIndex + 2] = color; - colors[vertexIndex + 3] = color; - - float[] regionUVs = regionAttachment.UVs; - uvs[vertexIndex] = new Vector2(regionUVs[RegionAttachment.X1], regionUVs[RegionAttachment.Y1]); - uvs[vertexIndex + 1] = new Vector2(regionUVs[RegionAttachment.X4], regionUVs[RegionAttachment.Y4]); - uvs[vertexIndex + 2] = new Vector2(regionUVs[RegionAttachment.X2], regionUVs[RegionAttachment.Y2]); - uvs[vertexIndex + 3] = new Vector2(regionUVs[RegionAttachment.X3], regionUVs[RegionAttachment.Y3]); - - vertexIndex += 4; - } - - mesh.vertices = vertices; - mesh.colors32 = colors; - mesh.uv = uvs; - - int submeshCount = submeshMaterials.Count; - mesh.subMeshCount = submeshCount; - for (int i = 0; i < submeshCount; ++i) - mesh.SetTriangles(submeshes[i].indexes, i); - mesh.RecalculateBounds(); - - if (newTriangles && calculateNormals) { - Vector3[] normals = new Vector3[vertexCount]; - Vector3 normal = new Vector3(0, 0, -1); - for (int i = 0; i < vertexCount; i++) - normals[i] = normal; - (useMesh1 ? mesh2 : mesh1).vertices = vertices; // Set other mesh vertices. - mesh1.normals = normals; - mesh2.normals = normals; - - if (calculateTangents) { - Vector4[] tangents = new Vector4[vertexCount]; - Vector3 tangent = new Vector3(0, 0, 1); - for (int i = 0; i < vertexCount; i++) - tangents[i] = tangent; - mesh1.tangents = tangents; - mesh2.tangents = tangents; - } - } - - useMesh1 = !useMesh1; - } - - /** Adds a material. Adds submesh indexes if existing indexes aren't sufficient. */ - private void addSubmesh (Material material, int endQuadCount, int submeshQuadCount, bool lastSubmesh) { - int submeshIndex = submeshMaterials.Count; - submeshMaterials.Add(material); - - int indexCount = submeshQuadCount * 6; - int vertexIndex = (endQuadCount - submeshQuadCount) * 4; - - if (submeshes.Count <= submeshIndex) submeshes.Add(new Submesh()); - Submesh submesh = submeshes[submeshIndex]; - - int[] indexes = submesh.indexes; - if (lastSubmesh && submesh.indexCount > indexCount) { - // Last submesh may have more indices than required, so zero indexes to the end. - submesh.indexCount = indexCount; - for (int i = indexCount, n = indexes.Length; i < n; i++) - indexes[i] = 0; - } else if (indexes.Length != indexCount) { - // Reallocate indexes if not the right size. - submesh.indexes = indexes = new int[indexCount]; - submesh.indexCount = 0; - } - - // Set indexes if not already set. - if (submesh.firstVertex != vertexIndex || submesh.indexCount < indexCount) { - submesh.indexCount = indexCount; - submesh.firstVertex = vertexIndex; - for (int i = 0; i < indexCount; i += 6, vertexIndex += 4) { - indexes[i] = vertexIndex; - indexes[i + 1] = vertexIndex + 2; - indexes[i + 2] = vertexIndex + 1; - indexes[i + 3] = vertexIndex + 2; - indexes[i + 4] = vertexIndex + 3; - indexes[i + 5] = vertexIndex + 1; - } - } - } - - public virtual void OnEnable () { - Initialize(); - } - - public virtual void Reset () { - Initialize(); - } - -#if UNITY_EDITOR - void OnDrawGizmos() { - // Make selection easier by drawing a clear gizmo over the skeleton. - if (vertices == null) return; - Vector3 gizmosCenter = new Vector3(); - Vector3 gizmosSize = new Vector3(); - Vector3 min = new Vector3(float.MaxValue, float.MaxValue, 0f); - Vector3 max = new Vector3(float.MinValue, float.MinValue, 0f); - foreach (Vector3 vert in vertices) { - min = Vector3.Min (min, vert); - max = Vector3.Max (max, vert); - } - float width = max.x - min.x; - float height = max.y - min.y; - gizmosCenter = new Vector3(min.x + (width / 2f), min.y + (height / 2f), 0f); - gizmosSize = new Vector3(width, height, 1f); - Gizmos.color = Color.clear; - Gizmos.matrix = transform.localToWorldMatrix; - Gizmos.DrawCube(gizmosCenter, gizmosSize); - } -#endif -} - -class Submesh { - public int[] indexes = new int[0]; - public int firstVertex = -1; - public int indexCount; -} diff --git a/spine-tk2d/Assets/Spine/SkeletonDataAsset.cs b/spine-tk2d/Assets/Spine/SkeletonDataAsset.cs index a6b2557ea..fcf90df0e 100644 --- a/spine-tk2d/Assets/Spine/SkeletonDataAsset.cs +++ b/spine-tk2d/Assets/Spine/SkeletonDataAsset.cs @@ -30,6 +30,7 @@ using System; using System.IO; +using System.Collections.Generic; using UnityEngine; using Spine; @@ -51,14 +52,14 @@ public class SkeletonDataAsset : ScriptableObject { public SkeletonData GetSkeletonData (bool quiet) { if (spriteCollection == null) { if (!quiet) - Debug.LogWarning("Sprite collection not set for skeleton data asset: " + name, this); + Debug.LogError("Sprite collection not set for skeleton data asset: " + name, this); Clear(); return null; } - + if (skeletonJSON == null) { if (!quiet) - Debug.LogWarning("Skeleton JSON file not set for skeleton data asset: " + name, this); + Debug.LogError("Skeleton JSON file not set for skeleton data asset: " + name, this); Clear(); return null; } @@ -68,19 +69,17 @@ public class SkeletonDataAsset : ScriptableObject { SkeletonJson json = new SkeletonJson(new SpriteCollectionAttachmentLoader(spriteCollection)); json.Scale = 1.0f / (spriteCollection.invOrthoSize * spriteCollection.halfTargetHeight) * scale; - try { skeletonData = json.ReadSkeletonData(new StringReader(skeletonJSON.text)); } catch (Exception ex) { - Debug.Log("Error reading skeleton JSON file for skeleton data asset: " + name + "\n" + - ex.Message + "\n" + ex.StackTrace, this); + if (!quiet) + Debug.LogError("Error reading skeleton JSON file for SkeletonData asset: " + name + "\n" + ex.Message + "\n" + ex.StackTrace, this); return null; } stateData = new AnimationStateData(skeletonData); for (int i = 0, n = fromAnimation.Length; i < n; i++) { - if (fromAnimation[i].Length == 0 || toAnimation[i].Length == 0) - continue; + if (fromAnimation[i].Length == 0 || toAnimation[i].Length == 0) continue; stateData.SetMix(fromAnimation[i], toAnimation[i], duration[i]); } diff --git a/spine-tk2d/Assets/Spine/SkeletonRenderer.cs b/spine-tk2d/Assets/Spine/SkeletonRenderer.cs new file mode 100644 index 000000000..69c668079 --- /dev/null +++ b/spine-tk2d/Assets/Spine/SkeletonRenderer.cs @@ -0,0 +1,366 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.1 + * + * Copyright (c) 2013, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable and + * non-transferable license to install, execute and perform the Spine Runtimes + * Software (the "Software") solely for internal use. Without the written + * permission of Esoteric Software (typically granted by licensing Spine), you + * may not (a) modify, translate, adapt or otherwise create derivative works, + * improvements of the Software or develop new applications using the Software + * or (b) remove, delete, alter or obscure any trademarks or any copyright, + * trademark, patent or other intellectual property or proprietary rights + * notices on or in the Software, including any copy thereof. Redistributions + * in binary or source form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +using System; +using System.IO; +using System.Collections.Generic; +using UnityEngine; +using Spine; + +/// Renders a skeleton. +[ExecuteInEditMode, RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))] +public class SkeletonRenderer : MonoBehaviour { + public bool valid; + public Skeleton skeleton; + + public SkeletonDataAsset skeletonDataAsset; + public String initialSkinName; + public bool calculateNormals; + public bool calculateTangents; + public float zSpacing; + + private MeshFilter meshFilter; + private Mesh mesh, mesh1, mesh2; + private bool useMesh1; + private float[] tempVertices = new float[8]; + private int lastVertexCount; + private Vector3[] vertices; + private Color32[] colors; + private Vector2[] uvs; + private Material[] sharedMaterials = new Material[0]; + private readonly List submeshMaterials = new List(); + private readonly List submeshes = new List(); + private readonly int[] quadTriangles = {0, 2, 1, 2, 3, 1}; + + public virtual void Reset () { + if (meshFilter != null) meshFilter.sharedMesh = null; + if (mesh != null) DestroyImmediate(mesh); + if (renderer != null) renderer.sharedMaterial = null; + mesh = null; + mesh1 = null; + mesh2 = null; + lastVertexCount = 0; + vertices = null; + colors = null; + uvs = null; + sharedMaterials = new Material[0]; + submeshMaterials.Clear(); + submeshes.Clear(); + skeleton = null; + + if (!skeletonDataAsset) { + Debug.LogError("Missing SkeletonData asset.", this); + valid = false; + return; + } + valid = true; + + meshFilter = GetComponent(); + mesh1 = newMesh(); + mesh2 = newMesh(); + vertices = new Vector3[0]; + + skeleton = new Skeleton(skeletonDataAsset.GetSkeletonData(false)); + if (initialSkinName != null && initialSkinName.Length > 0 && initialSkinName != "default") + skeleton.SetSkin(initialSkinName); + } + + public void Awake () { + Reset(); + } + + private Mesh newMesh () { + Mesh mesh = new Mesh(); + mesh.name = "Skeleton Mesh"; + mesh.hideFlags = HideFlags.HideAndDontSave; + mesh.MarkDynamic(); + return mesh; + } + + public virtual void OnWillRenderObject () { + if (!valid) return; + + // Count vertices and submesh triangles. + int vertexCount = 0; + int submeshTriangleCount = 0, submeshFirstVertex = 0, submeshStartSlotIndex = 0; + Material lastMaterial = null; + submeshMaterials.Clear(); + List drawOrder = skeleton.DrawOrder; + int drawOrderCount = drawOrder.Count; + for (int i = 0; i < drawOrderCount; i++) { + Attachment attachment = drawOrder[i].attachment; + + object rendererObject; + int attachmentVertexCount, attachmentTriangleCount; + + if (attachment is RegionAttachment) { + rendererObject = ((RegionAttachment)attachment).RendererObject; + attachmentVertexCount = 4; + attachmentTriangleCount = 6; + } else if (attachment is MeshAttachment) { + MeshAttachment meshAttachment = (MeshAttachment)attachment; + rendererObject = meshAttachment.RendererObject; + attachmentVertexCount = meshAttachment.vertices.Length / 2; + attachmentTriangleCount = meshAttachment.triangles.Length; + } else if (attachment is SkinnedMeshAttachment) { + SkinnedMeshAttachment meshAttachment = (SkinnedMeshAttachment)attachment; + rendererObject = meshAttachment.RendererObject; + attachmentVertexCount = meshAttachment.uvs.Length / 2; + attachmentTriangleCount = meshAttachment.triangles.Length; + } else + continue; + + // Populate submesh when material changes. + Material material = (Material)rendererObject; + if (lastMaterial != material && lastMaterial != null) { + addSubmesh(lastMaterial, submeshStartSlotIndex, i, submeshTriangleCount, submeshFirstVertex, false); + submeshTriangleCount = 0; + submeshFirstVertex = vertexCount; + submeshStartSlotIndex = i; + } + lastMaterial = material; + + submeshTriangleCount += attachmentTriangleCount; + vertexCount += attachmentVertexCount; + } + addSubmesh(lastMaterial, submeshStartSlotIndex, drawOrderCount, submeshTriangleCount, submeshFirstVertex, true); + + // Set materials. + if (submeshMaterials.Count == sharedMaterials.Length) + submeshMaterials.CopyTo(sharedMaterials); + else + sharedMaterials = submeshMaterials.ToArray(); + renderer.sharedMaterials = sharedMaterials; + + // Ensure mesh data is the right size. + Vector3[] vertices = this.vertices; + bool newTriangles = vertexCount > vertices.Length; + if (newTriangles) { + // Not enough vertices, increase size. + this.vertices = vertices = new Vector3[vertexCount]; + this.colors = new Color32[vertexCount]; + this.uvs = new Vector2[vertexCount]; + mesh1.Clear(); + mesh2.Clear(); + } else { + // Too many vertices, zero the extra. + Vector3 zero = Vector3.zero; + for (int i = vertexCount, n = lastVertexCount; i < n; i++) + vertices[i] = zero; + } + lastVertexCount = vertexCount; + + // Setup mesh. + float[] tempVertices = this.tempVertices; + Vector2[] uvs = this.uvs; + Color32[] colors = this.colors; + int vertexIndex = 0; + Color32 color = new Color32(); + float x = skeleton.x, y = skeleton.y, zSpacing = this.zSpacing; + float a = skeleton.a * 255, r = skeleton.r, g = skeleton.g, b = skeleton.b; + for (int i = 0; i < drawOrderCount; i++) { + Slot slot = drawOrder[i]; + Attachment attachment = slot.attachment; + if (attachment is RegionAttachment) { + RegionAttachment regionAttachment = (RegionAttachment)attachment; + regionAttachment.ComputeWorldVertices(x, y, slot.bone, tempVertices); + + float z = i * zSpacing; + vertices[vertexIndex] = new Vector3(tempVertices[RegionAttachment.X1], tempVertices[RegionAttachment.Y1], z); + vertices[vertexIndex + 1] = new Vector3(tempVertices[RegionAttachment.X4], tempVertices[RegionAttachment.Y4], z); + vertices[vertexIndex + 2] = new Vector3(tempVertices[RegionAttachment.X2], tempVertices[RegionAttachment.Y2], z); + vertices[vertexIndex + 3] = new Vector3(tempVertices[RegionAttachment.X3], tempVertices[RegionAttachment.Y3], z); + + color.a = (byte)(a * slot.a * regionAttachment.a); + color.r = (byte)(r * slot.r * regionAttachment.r * color.a); + color.g = (byte)(g * slot.g * regionAttachment.g * color.a); + color.b = (byte)(b * slot.b * regionAttachment.b * color.a); + if (slot.data.additiveBlending) color.a = 0; + colors[vertexIndex] = color; + colors[vertexIndex + 1] = color; + colors[vertexIndex + 2] = color; + colors[vertexIndex + 3] = color; + + float[] regionUVs = regionAttachment.uvs; + uvs[vertexIndex] = new Vector2(regionUVs[RegionAttachment.X1], regionUVs[RegionAttachment.Y1]); + uvs[vertexIndex + 1] = new Vector2(regionUVs[RegionAttachment.X4], regionUVs[RegionAttachment.Y4]); + uvs[vertexIndex + 2] = new Vector2(regionUVs[RegionAttachment.X2], regionUVs[RegionAttachment.Y2]); + uvs[vertexIndex + 3] = new Vector2(regionUVs[RegionAttachment.X3], regionUVs[RegionAttachment.Y3]); + + vertexIndex += 4; + } else if (attachment is MeshAttachment) { + MeshAttachment meshAttachment = (MeshAttachment)attachment; + int meshVertexCount = meshAttachment.vertices.Length; + if (tempVertices.Length < meshVertexCount) tempVertices = new float[meshVertexCount]; + meshAttachment.ComputeWorldVertices(x, y, slot, tempVertices); + + color.a = (byte)(a * slot.a * meshAttachment.a); + color.r = (byte)(r * slot.r * meshAttachment.r * color.a); + color.g = (byte)(g * slot.g * meshAttachment.g * color.a); + color.b = (byte)(b * slot.b * meshAttachment.b * color.a); + if (slot.data.additiveBlending) color.a = 0; + + float[] meshUVs = meshAttachment.uvs; + float z = i * zSpacing; + for (int ii = 0; ii < meshVertexCount; ii += 2, vertexIndex++) { + vertices[vertexIndex] = new Vector3(tempVertices[ii], tempVertices[ii + 1], z); + colors[vertexIndex] = color; + uvs[vertexIndex] = new Vector2(meshUVs[ii], meshUVs[ii + 1]); + } + } else if (attachment is SkinnedMeshAttachment) { + SkinnedMeshAttachment meshAttachment = (SkinnedMeshAttachment)attachment; + int meshVertexCount = meshAttachment.uvs.Length; + if (tempVertices.Length < meshVertexCount) tempVertices = new float[meshVertexCount]; + meshAttachment.ComputeWorldVertices(x, y, slot, tempVertices); + + color.a = (byte)(a * slot.a * meshAttachment.a); + color.r = (byte)(r * slot.r * meshAttachment.r * color.a); + color.g = (byte)(g * slot.g * meshAttachment.g * color.a); + color.b = (byte)(b * slot.b * meshAttachment.b * color.a); + if (slot.data.additiveBlending) color.a = 0; + + float[] meshUVs = meshAttachment.uvs; + float z = i * zSpacing; + for (int ii = 0; ii < meshVertexCount; ii += 2, vertexIndex++) { + vertices[vertexIndex] = new Vector3(tempVertices[ii], tempVertices[ii + 1], z); + colors[vertexIndex] = color; + uvs[vertexIndex] = new Vector2(meshUVs[ii], meshUVs[ii + 1]); + } + } + } + + // Double buffer mesh. + Mesh mesh = useMesh1 ? mesh1 : mesh2; + meshFilter.sharedMesh = mesh; + + mesh.vertices = vertices; + mesh.colors32 = colors; + mesh.uv = uvs; + + int submeshCount = submeshMaterials.Count; + mesh.subMeshCount = submeshCount; + for (int i = 0; i < submeshCount; ++i) + mesh.SetTriangles(submeshes[i].triangles, i); + mesh.RecalculateBounds(); + + if (newTriangles && calculateNormals) { + Vector3[] normals = new Vector3[vertexCount]; + Vector3 normal = new Vector3(0, 0, -1); + for (int i = 0; i < vertexCount; i++) + normals[i] = normal; + (useMesh1 ? mesh2 : mesh1).vertices = vertices; // Set other mesh vertices. + mesh1.normals = normals; + mesh2.normals = normals; + + if (calculateTangents) { + Vector4[] tangents = new Vector4[vertexCount]; + Vector3 tangent = new Vector3(0, 0, 1); + for (int i = 0; i < vertexCount; i++) + tangents[i] = tangent; + mesh1.tangents = tangents; + mesh2.tangents = tangents; + } + } + + useMesh1 = !useMesh1; + } + + /** Stores vertices and triangles for a single material. */ + private void addSubmesh (Material material, int startSlot, int endSlot, int triangleCount, int firstVertex, bool lastSubmesh) { + int submeshIndex = submeshMaterials.Count; + submeshMaterials.Add(material); + + if (submeshes.Count <= submeshIndex) submeshes.Add(new Submesh()); + Submesh submesh = submeshes[submeshIndex]; + + int[] triangles = submesh.triangles; + int trianglesCapacity = triangles.Length; + if (lastSubmesh && trianglesCapacity > triangleCount) { + // Last submesh may have more triangles than required, so zero triangles to the end. + for (int i = triangleCount; i < trianglesCapacity; i++) + triangles[i] = 0; + submesh.triangleCount = triangleCount; + } else if (trianglesCapacity != triangleCount) { + // Reallocate triangles when not the exact size needed. + submesh.triangles = triangles = new int[triangleCount]; + submesh.triangleCount = 0; + } + + List drawOrder = skeleton.DrawOrder; + for (int i = startSlot, triangleIndex = 0; i < endSlot; i++) { + Attachment attachment = drawOrder[i].attachment; + int[] attachmentTriangles; + int attachmentVertexCount; + if (attachment is RegionAttachment) { + attachmentVertexCount = 4; + attachmentTriangles = quadTriangles; + } else if (attachment is MeshAttachment) { + MeshAttachment meshAttachment = (MeshAttachment)attachment; + attachmentVertexCount = meshAttachment.vertices.Length / 2; + attachmentTriangles = meshAttachment.triangles; + } else if (attachment is SkinnedMeshAttachment) { + SkinnedMeshAttachment meshAttachment = (SkinnedMeshAttachment)attachment; + attachmentVertexCount = meshAttachment.uvs.Length / 2; + attachmentTriangles = meshAttachment.triangles; + } else + continue; + for (int ii = 0, nn = attachmentTriangles.Length; ii < nn; ii++, triangleIndex++) + triangles[triangleIndex] = firstVertex + attachmentTriangles[ii]; + firstVertex += attachmentVertexCount; + } + } + + #if UNITY_EDITOR + void OnDrawGizmos() { + // Make selection easier by drawing a clear gizmo over the skeleton. + if (vertices == null) return; + Vector3 gizmosCenter = new Vector3(); + Vector3 gizmosSize = new Vector3(); + Vector3 min = new Vector3(float.MaxValue, float.MaxValue, 0f); + Vector3 max = new Vector3(float.MinValue, float.MinValue, 0f); + foreach (Vector3 vert in vertices) { + min = Vector3.Min (min, vert); + max = Vector3.Max (max, vert); + } + float width = max.x - min.x; + float height = max.y - min.y; + gizmosCenter = new Vector3(min.x + (width / 2f), min.y + (height / 2f), 0f); + gizmosSize = new Vector3(width, height, 1f); + Gizmos.color = Color.clear; + Gizmos.matrix = transform.localToWorldMatrix; + Gizmos.DrawCube(gizmosCenter, gizmosSize); + } + #endif +} + +class Submesh { + public int[] triangles = new int[0]; + public int triangleCount; +} diff --git a/spine-tk2d/Assets/Spine/SkeletonComponent.cs.meta b/spine-tk2d/Assets/Spine/SkeletonRenderer.cs.meta similarity index 78% rename from spine-tk2d/Assets/Spine/SkeletonComponent.cs.meta rename to spine-tk2d/Assets/Spine/SkeletonRenderer.cs.meta index c765d154a..1bc275571 100644 --- a/spine-tk2d/Assets/Spine/SkeletonComponent.cs.meta +++ b/spine-tk2d/Assets/Spine/SkeletonRenderer.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9da572b571dc33444bd6622951ef62ba +guid: 0f77b79230dc4c246a1194a03578bb4e MonoImporter: serializedVersion: 2 defaultReferences: [] diff --git a/spine-tk2d/Assets/examples/goblins.meta b/spine-tk2d/Assets/examples/goblins.meta new file mode 100644 index 000000000..c23c0f726 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: a9308cf14d9ae5040ad789b02f1b3baf +folderAsset: yes +DefaultImporter: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/Goblins SkeletonData.asset b/spine-tk2d/Assets/examples/goblins/Goblins SkeletonData.asset new file mode 100644 index 000000000..f76e1dbf7 Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/Goblins SkeletonData.asset differ diff --git a/spine-tk2d/Assets/examples/goblins/Goblins SkeletonData.asset.meta b/spine-tk2d/Assets/examples/goblins/Goblins SkeletonData.asset.meta new file mode 100644 index 000000000..8aaba0e3b --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/Goblins SkeletonData.asset.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 4a195bd4c354a814b86d191f4921f54b +NativeFormatImporter: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/Goblins.cs b/spine-tk2d/Assets/examples/goblins/Goblins.cs new file mode 100644 index 000000000..c30e677b0 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/Goblins.cs @@ -0,0 +1,63 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.1 + * + * Copyright (c) 2013, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable and + * non-transferable license to install, execute and perform the Spine Runtimes + * Software (the "Software") solely for internal use. Without the written + * permission of Esoteric Software (typically granted by licensing Spine), you + * may not (a) modify, translate, adapt or otherwise create derivative works, + * improvements of the Software or develop new applications using the Software + * or (b) remove, delete, alter or obscure any trademarks or any copyright, + * trademark, patent or other intellectual property or proprietary rights + * notices on or in the Software, including any copy thereof. Redistributions + * in binary or source form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +using UnityEngine; +using System.Collections; +using Spine; + +public class Goblins : MonoBehaviour { + private bool girlSkin; + private SkeletonAnimation skeletonAnimation; + private Bone headBone; + + public void Start () { + skeletonAnimation = GetComponent(); + headBone = skeletonAnimation.skeleton.FindBone("head"); + skeletonAnimation.UpdateBones += UpdateBones; + } + + // This is called after the animation is applied to the skeleton and can be used to adjust the bones dynamically. + public void UpdateBones (SkeletonAnimation skeletonAnimation) { + headBone.Rotation += 15; + } + + public void OnMouseDown () { + skeletonAnimation.skeleton.SetSkin(girlSkin ? "goblin" : "goblingirl"); + skeletonAnimation.skeleton.SetSlotsToSetupPose(); + + girlSkin = !girlSkin; + + if (girlSkin) { + skeletonAnimation.skeleton.SetAttachment("right hand item", null); + skeletonAnimation.skeleton.SetAttachment("left hand item", "spear"); + } else + skeletonAnimation.skeleton.SetAttachment("left hand item", "dagger"); + } +} diff --git a/spine-tk2d/Assets/examples/goblins/Goblins.cs.meta b/spine-tk2d/Assets/examples/goblins/Goblins.cs.meta new file mode 100644 index 000000000..7a04efa06 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/Goblins.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3a41b9a80b4f2c045b7ad76e0d652ddc +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data.meta b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data.meta new file mode 100644 index 000000000..1211c5e9f --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 982b49f422d2cb04bbaf38993fef207b +folderAsset: yes +DefaultImporter: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/GoblinsAtlas.prefab b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/GoblinsAtlas.prefab new file mode 100644 index 000000000..bc65b6ebb Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/GoblinsAtlas.prefab differ diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/GoblinsAtlas.prefab.meta b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/GoblinsAtlas.prefab.meta new file mode 100644 index 000000000..d04510ff6 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/GoblinsAtlas.prefab.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 31c989bbbeeeab24e99b68ac7975d2b8 +NativeFormatImporter: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0 material.mat b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0 material.mat new file mode 100644 index 000000000..4628c57e2 Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0 material.mat differ diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0 material.mat.meta b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0 material.mat.meta new file mode 100644 index 000000000..d30a0f6fe --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0 material.mat.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 0b38b0b706d87b04ab4621c37c7d5019 +NativeFormatImporter: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0.png b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0.png new file mode 100644 index 000000000..d6820aa68 Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0.png differ diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0.png.meta b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0.png.meta new file mode 100644 index 000000000..19b7c864d --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: e76e8228e3b38264194b3dfad10b7af7 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas.prefab b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas.prefab new file mode 100644 index 000000000..08d4890a3 Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas.prefab differ diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas.prefab.meta b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas.prefab.meta new file mode 100644 index 000000000..788714172 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas.prefab.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: db91f44e9acec474fb74db538fe06935 +NativeFormatImporter: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/goblins-ffd.json.txt b/spine-tk2d/Assets/examples/goblins/goblins-ffd.json.txt new file mode 100644 index 000000000..a778c0f15 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/goblins-ffd.json.txt @@ -0,0 +1,1005 @@ +{ +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 }, + { "name": "left upper leg", "parent": "hip", "length": 50.39, "x": 14.45, "y": 2.81, "rotation": -89.09 }, + { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 }, + { "name": "right upper leg", "parent": "hip", "length": 42.45, "x": -20.07, "y": -6.83, "rotation": -97.49 }, + { "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 93.92 }, + { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "x": 56.34, "y": 0.98, "rotation": -16.65 }, + { "name": "left shoulder", "parent": "torso", "length": 35.43, "x": 74.04, "y": -20.38, "rotation": -156.96 }, + { "name": "neck", "parent": "torso", "length": 18.38, "x": 81.67, "y": -6.34, "rotation": -1.51 }, + { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 42.99, "y": -0.61, "rotation": -14.34 }, + { "name": "right shoulder", "parent": "torso", "length": 37.24, "x": 76.02, "y": 18.14, "rotation": 133.88 }, + { "name": "head", "parent": "neck", "length": 68.28, "x": 20.93, "y": 11.59, "rotation": -13.92 }, + { "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 37.85, "y": -2.34, "rotation": 28.16 }, + { "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 58.94, "y": -7.61, "rotation": 102.43 }, + { "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 37.6, "y": 0.31, "rotation": 36.32 }, + { "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 }, + { "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 }, + { "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 }, + { "name": "spear1", "parent": "left hand", "length": 65.06, "x": 0.48, "y": 17.03, "rotation": 102.43 }, + { "name": "spear2", "parent": "spear1", "length": 61.41, "x": 65.05, "y": 0.04, "rotation": 0.9 }, + { "name": "spear3", "parent": "spear2", "length": 76.79, "x": 61.88, "y": 0.57, "rotation": -0.9 } +], +"slots": [ + { "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" }, + { "name": "left arm", "bone": "left arm", "attachment": "left arm" }, + { "name": "left hand item", "bone": "left hand", "attachment": "spear" }, + { "name": "left hand", "bone": "left hand", "attachment": "left hand" }, + { "name": "left foot", "bone": "left foot", "attachment": "left foot" }, + { "name": "left lower leg", "bone": "left lower leg", "attachment": "left lower leg" }, + { "name": "left upper leg", "bone": "left upper leg", "attachment": "left upper leg" }, + { "name": "neck", "bone": "neck", "attachment": "neck" }, + { "name": "torso", "bone": "torso", "attachment": "torso" }, + { "name": "pelvis", "bone": "pelvis", "attachment": "pelvis" }, + { "name": "right foot", "bone": "right foot", "attachment": "right foot" }, + { "name": "right lower leg", "bone": "right lower leg", "attachment": "right lower leg" }, + { "name": "undie straps", "bone": "pelvis", "attachment": "undie straps" }, + { "name": "undies", "bone": "pelvis", "attachment": "undies" }, + { "name": "right upper leg", "bone": "right upper leg", "attachment": "right upper leg" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "eyes", "bone": "head" }, + { "name": "right shoulder", "bone": "right shoulder", "attachment": "right shoulder" }, + { "name": "right arm", "bone": "right arm", "attachment": "right arm" }, + { "name": "right hand thumb", "bone": "right hand", "attachment": "right hand thumb" }, + { "name": "right hand item", "bone": "right hand", "attachment": "dagger" }, + { "name": "right hand", "bone": "right hand", "attachment": "right hand" }, + { "name": "right hand item 2", "bone": "right hand", "attachment": "shield" } +], +"skins": { + "default": { + "left hand item": { + "dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 }, + "spear": { + "type": "skinnedmesh", + "uvs": [ 1, 0.11236, 0.77096, 0.13278, 0.76608, 0.21781, 0.75642, 0.386, 0.74723, 0.54607, 0.72117, 1, 0.28838, 1, 0.24208, 0.54327, 0.22589, 0.38361, 0.2089, 0.21605, 0.20043, 0.13242, 0, 0.11519, 0.4527, 0, 0.58399, 0 ], + "triangles": [ 4, 7, 3, 6, 7, 4, 5, 6, 4, 10, 11, 12, 1, 13, 0, 12, 13, 1, 10, 12, 1, 9, 10, 1, 2, 9, 1, 8, 9, 2, 3, 8, 2, 7, 8, 3 ], + "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.51, 20, -0.31, -6.16, 0.48, 2, 18, 64.73, -5.03, 0.5, 19, -0.4, -5.06, 0.49, 1, 16, 4.56, 23.91, 1, 1, 16, 41.7, -138.95, 1, 1, 16, 32.42, -141.1, 1, 1, 16, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.5, 19, 0.53, 6.59, 0.49, 2, 19, 62.18, 6.66, 0.51, 20, 0.2, 6.09, 0.48, 1, 20, 30.96, 6.61, 1, 1, 20, 37.26, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], + "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], + "hull": 14, + "width": 22, + "height": 368 + } + }, + "right hand item": { + "dagger": { + "type": "mesh", + "uvs": [ 0.78091, 0.38453, 1, 0.38405, 1, 0.44881, 0.73953, 0.4687, 0.74641, 0.81344, 0.34022, 1, 0.15434, 1, 0.11303, 0.78858, 0.23007, 0.47367, 0, 0.45047, 0, 0.38621, 0.22367, 0.38573, 0.24384, 0, 1, 0 ], + "triangles": [ 5, 7, 8, 4, 8, 3, 4, 5, 8, 5, 6, 7, 9, 11, 8, 8, 11, 3, 3, 0, 2, 3, 11, 0, 9, 10, 11, 0, 1, 2, 11, 12, 0, 0, 12, 13 ], + "vertices": [ 15.49, -12.82, 21.13, -13.57, 20.16, -20.49, 13.15, -21.67, 8.13, -58.56, -5.13, -77.04, -9.92, -76.36, -7.79, -53.6, -0.03, -20.36, -5.6, -17.04, -4.63, -10.17, 1.12, -10.93, 7.46, 30.24, 26.93, 27.49 ], + "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], + "hull": 14, + "width": 26, + "height": 108 + } + }, + "right hand item 2": { + "shield": { "rotation": 93.49, "width": 70, "height": 72 } + } + }, + "goblin": { + "eyes": { + "eyes closed": { "name": "goblin/eyes-closed", "x": 29.19, "y": -24.89, "rotation": -88.92, "width": 34, "height": 12 } + }, + "head": { + "head": { + "name": "goblin/head", + "type": "mesh", + "uvs": [ 0, 0.60494, 0.14172, 0.5145, 0.24218, 0.55229, 0.32667, 0.67806, 0.37969, 0.79352, 0.53505, 0.93014, 0.86056, 1, 0.94071, 0.94169, 0.92098, 0.69923, 0.9888, 0.65497, 0.99003, 0.51643, 0.89632, 0.43561, 0.94487, 0.41916, 1, 0.39713, 1, 0.2836, 0.94017, 0.27027, 0.87906, 0.25666, 0.80754, 0.16044, 0.66698, 0.01997, 0.4734, 0.01805, 0.29215, 0.19893, 0.25392, 0.31823, 0.09117, 0.324, 0, 0.44331, 0.43271, 0.69153, 0.466, 0.47794, 0.35996, 0.31246, 0.73473, 0.68593, 0.72215, 0.57425, 0.88179, 0.5583, 0.80267, 0.51015 ], + "triangles": [ 5, 27, 6, 7, 27, 8, 7, 6, 27, 4, 24, 5, 5, 24, 27, 4, 3, 24, 27, 29, 8, 8, 29, 9, 24, 28, 27, 24, 25, 28, 24, 3, 25, 29, 28, 30, 29, 27, 28, 25, 2, 26, 25, 3, 2, 9, 29, 10, 0, 23, 1, 28, 25, 30, 29, 11, 10, 29, 30, 11, 2, 21, 26, 2, 1, 21, 23, 22, 1, 1, 22, 21, 30, 16, 11, 30, 17, 16, 30, 25, 17, 17, 26, 18, 18, 26, 19, 26, 17, 25, 11, 15, 12, 11, 16, 15, 12, 15, 13, 15, 14, 13, 21, 20, 26, 26, 20, 19 ], + "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.46, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.6, 23.41, 35.89, 40.17, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.8, -24.31, 17.2, -40.65, 20.68, -33.02 ], + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], + "hull": 24, + "width": 103, + "height": 66 + } + }, + "left arm": { + "left arm": { + "name": "goblin/left-arm", + "type": "mesh", + "uvs": [ 0.68992, 0.29284, 1, 0.46364, 1, 0.74643, 0.84089, 1, 0.66344, 1, 0.33765, 0.64284, 0, 0.44124, 0, 0, 0.34295, 0 ], + "triangles": [ 3, 4, 2, 4, 5, 2, 5, 0, 2, 0, 1, 2, 0, 5, 8, 5, 6, 8, 6, 7, 8 ], + "vertices": [ 18.6, 8.81, 32.19, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], + "hull": 9, + "width": 37, + "height": 35 + } + }, + "left foot": { + "left foot": { + "name": "goblin/left-foot", + "type": "mesh", + "uvs": [ 0.15733, 0.31873, 0.08195, 0.78502, 0.15884, 0.99366, 0.41633, 0.96804, 0.68822, 0.97636, 1, 0.96388, 0.99385, 0.73501, 0.85294, 0.51862, 0.61479, 0.31056, 0.46991, 0, 0.48032, 0.75604, 0.75994, 0.77706 ], + "triangles": [ 2, 1, 3, 3, 10, 4, 4, 11, 5, 4, 10, 11, 3, 1, 10, 11, 6, 5, 1, 0, 10, 11, 7, 6, 11, 10, 7, 10, 8, 7, 10, 0, 8, 0, 9, 8 ], + "vertices": [ 2.28, 13.07, -1.76, -1.64, 3.59, -7.8, 20.25, -6.04, 37.91, -5.27, 58.12, -3.71, 57.31, 3.34, 47.78, 9.51, 31.95, 15.05, 21.99, 24.11, 24.03, 0.75, 42.21, 1.16 ], + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], + "hull": 10, + "width": 65, + "height": 31 + } + }, + "left hand": { + "left hand": { + "name": "goblin/left-hand", + "type": "mesh", + "uvs": [ 0.518, 0.12578, 1, 0.16285, 0.99788, 0.50578, 0.69745, 1, 0.37445, 1, 0, 0.80051, 0, 0.42792, 0.17601, 0, 0.43567, 0 ], + "triangles": [ 2, 3, 0, 4, 5, 0, 3, 4, 0, 0, 7, 8, 6, 7, 0, 0, 5, 6, 2, 0, 1 ], + "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.48, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], + "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], + "hull": 9, + "width": 36, + "height": 41 + } + }, + "left lower leg": { + "left lower leg": { + "name": "goblin/left-lower-leg", + "type": "mesh", + "uvs": [ 0.95508, 0.20749, 0.81927, 0.65213, 0.94754, 0.77308, 0.67842, 0.97346, 0.46463, 1, 0.26845, 1, 0.04963, 0.90706, 0.2106, 0.60115, 0.07478, 0.40195, 0.18545, 0, 0.28857, 0 ], + "triangles": [ 1, 3, 4, 7, 4, 5, 5, 6, 7, 3, 1, 2, 1, 4, 7, 0, 1, 10, 7, 8, 10, 1, 7, 10, 10, 8, 9 ], + "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.19, -18.29 ], + "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], + "hull": 11, + "width": 33, + "height": 70 + } + }, + "left shoulder": { + "left shoulder": { + "name": "goblin/left-shoulder", + "type": "mesh", + "uvs": [ 0.7377, 0.40692, 1, 0.75237, 1, 1, 0.62046, 1, 0.26184, 0.56601, 0, 0.29783, 0, 0, 0.44115, 0 ], + "triangles": [ 3, 1, 2, 3, 0, 1, 3, 4, 0, 4, 7, 0, 4, 5, 7, 5, 6, 7 ], + "vertices": [ 15.18, 5.74, 32.17, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.74, -4.66, 6.54 ], + "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], + "hull": 8, + "width": 29, + "height": 44 + } + }, + "left upper leg": { + "left upper leg": { + "name": "goblin/left-upper-leg", + "type": "mesh", + "uvs": [ 1, 0.12167, 1, 0.54873, 0.91067, 0.78907, 0.76567, 1, 0.3087, 0.9579, 0, 0.68777, 0, 0.219, 0.51961, 0, 0.87552, 0 ], + "triangles": [ 3, 4, 2, 2, 4, 1, 1, 4, 7, 4, 5, 7, 0, 1, 7, 5, 6, 7, 7, 8, 0 ], + "vertices": [ 2.33, 13.06, 33.5, 12.57, 51, 9.34, 66.32, 4.31, 63, -10.71, 43.13, -20.58, 8.91, -20.04, -6.79, -2.64, -6.61, 9.1 ], + "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], + "hull": 9, + "width": 33, + "height": 73 + } + }, + "neck": { + "neck": { + "name": "goblin/neck", + "type": "mesh", + "uvs": [ 0.81967, 0.27365, 0.92101, 0.82048, 0.47134, 1, 0.15679, 0.9354, 0, 0.7556, 0.19268, 0.51833, 0.15468, 0.35706, 0, 0.21989, 0.13568, 0, 0.68878, 0, 0.70145, 0.53872 ], + "triangles": [ 3, 5, 2, 2, 10, 1, 2, 5, 10, 3, 4, 5, 10, 0, 1, 0, 10, 6, 10, 5, 6, 7, 8, 6, 6, 9, 0, 6, 8, 9 ], + "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.05, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], + "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], + "hull": 10, + "width": 36, + "height": 41 + } + }, + "pelvis": { + "pelvis": { + "name": "goblin/pelvis", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 25.38, -20.73, -36.61, -20.73, -36.61, 22.26, 25.38, 22.26 ], + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "hull": 4, + "width": 62, + "height": 43 + } + }, + "right arm": { + "right arm": { + "name": "goblin/right-arm", + "type": "mesh", + "uvs": [ 1, 0.09223, 1, 0.8501, 0.72058, 1, 0.24384, 1, 0, 0.86558, 0.20822, 0.10919, 0.50903, 0, 0.85342, 0 ], + "triangles": [ 1, 2, 6, 6, 2, 5, 1, 6, 0, 4, 5, 3, 2, 3, 5, 6, 7, 0 ], + "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.18 ], + "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], + "hull": 8, + "width": 23, + "height": 50 + } + }, + "right foot": { + "right foot": { + "name": "goblin/right-foot", + "type": "mesh", + "uvs": [ 0.40851, 0.0047, 0.59087, 0.33404, 0.75959, 0.48311, 0.88907, 0.59751, 0.97532, 0.89391, 0.90385, 1, 0.6722, 1, 0.38633, 1, 0.08074, 1, 0, 0.88921, 0, 0.65984, 0, 0.46577, 0.0906, 0.0988, 0.305, 0, 0.47461, 0.71257, 0.715, 0.74681 ], + "triangles": [ 4, 5, 15, 7, 14, 6, 5, 6, 15, 6, 14, 15, 14, 7, 9, 7, 8, 9, 15, 3, 4, 9, 10, 14, 15, 2, 3, 15, 14, 2, 14, 10, 1, 12, 1, 11, 1, 12, 13, 14, 1, 2, 1, 13, 0, 1, 10, 11 ], + "vertices": [ 17.36, 25.99, 29.13, 15.44, 39.89, 10.8, 48.14, 7.24, 53.84, -2.38, 49.43, -6, 34.84, -6.39, 16.84, -6.87, -2.4, -7.38, -7.58, -3.86, -7.78, 3.7, -7.95, 10.1, -2.57, 22.36, 10.84, 25.97, 22.14, 2.75, 37.31, 2.03 ], + "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], + "hull": 14, + "width": 63, + "height": 33 + } + }, + "right hand": { + "right hand": { + "name": "goblin/right-hand", + "type": "mesh", + "uvs": [ 0.17957, 0, 0, 0.44772, 0, 0.79734, 0.20057, 0.94264, 0.55057, 1, 0.8539, 1, 0.89823, 0.82004, 0.8259, 0.74285, 0.84223, 0.49993, 0.96356, 0.34102, 0.66023, 0 ], + "triangles": [ 4, 7, 5, 5, 7, 6, 4, 3, 7, 3, 2, 8, 7, 3, 8, 8, 1, 10, 8, 2, 1, 0, 10, 1, 8, 10, 9 ], + "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.88, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "hull": 11, + "width": 36, + "height": 37 + } + }, + "right hand thumb": { + "right hand thumb": { + "name": "goblin/right-hand", + "type": "mesh", + "uvs": [ 0.88538, 0.22262, 0.76167, 0.3594, 0.75088, 0.78308, 0.95326, 0.84981, 1, 0.60302 ], + "triangles": [ 3, 2, 4, 2, 1, 4, 1, 0, 4 ], + "vertices": [ -2.82, 15.97, 2.4, 11.71, 18.08, 11.9, 20.27, 19.27, 11.09, 20.62 ], + "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], + "hull": 5, + "width": 36, + "height": 37 + } + }, + "right lower leg": { + "right lower leg": { + "name": "goblin/right-lower-leg", + "type": "mesh", + "uvs": [ 1, 0.27261, 0.81312, 0.52592, 0.79587, 0.71795, 0.95544, 0.80988, 0.85193, 0.95493, 0.47241, 1, 0.14033, 1, 0, 0.8773, 0.14896, 0.67914, 0.1619, 0.30325, 0.60611, 0 ], + "triangles": [ 4, 5, 2, 2, 5, 8, 5, 6, 8, 6, 7, 8, 4, 2, 3, 2, 8, 1, 8, 9, 1, 9, 10, 1, 1, 10, 0 ], + "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.1, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.77, -1.03, 58.99, -9.19, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], + "hull": 11, + "width": 36, + "height": 76 + } + }, + "right shoulder": { + "right shoulder": { + "name": "goblin/right-shoulder", + "type": "mesh", + "uvs": [ 0.62008, 0.03708, 0.92131, 0.09048, 1, 0.38319, 0.72049, 0.6937, 0.31656, 1, 0, 1, 0, 0.75106, 0.28233, 0.49988 ], + "triangles": [ 4, 6, 7, 4, 7, 3, 4, 5, 6, 7, 0, 3, 2, 0, 1, 2, 3, 0 ], + "vertices": [ -3.17, -11.05, -9, -0.57, -1.01, 10.33, 16.69, 11.17, 37.41, 8.2, 45.45, -1.16, 36.95, -8.46, 21.2, -7.47 ], + "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], + "hull": 8, + "width": 39, + "height": 45 + } + }, + "right upper leg": { + "right upper leg": { + "name": "goblin/right-upper-leg", + "type": "mesh", + "uvs": [ 0.27018, 0, 0.11618, 0.18177, 0, 0.70688, 0, 0.89577, 0.26668, 1, 0.48718, 1, 0.67618, 0.83532, 1, 0.5161, 1, 0.25543, 0.74618, 0.0571 ], + "triangles": [ 5, 4, 6, 6, 4, 2, 4, 3, 2, 2, 1, 6, 6, 1, 9, 6, 9, 7, 9, 1, 0, 9, 8, 7 ], + "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.51, 10.18, 19.13, 18.47, 2.85, 16.32, -8.4, 6.14 ], + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "hull": 10, + "width": 34, + "height": 63 + } + }, + "torso": { + "torso": { + "name": "goblin/torso", + "type": "mesh", + "uvs": [ 0, 0.33287, 0.15945, 0.46488, 0.15761, 0.60314, 0.15502, 0.79806, 0.32807, 0.93478, 0.6875, 1, 0.80731, 1, 1, 0.77763, 1, 0.66147, 1, 0.56703, 0.93207, 0.4771, 0.86944, 0.39416, 0.83837, 0.226, 0.68085, 0, 0.14836, 0, 0, 0.07199, 0.78734, 0.86249, 0.43679, 0.79649, 0.76738, 0.61733, 0.44345, 0.58747, 0.54329, 0.38316, 0.77692, 0.73446, 0.66478, 0.51012 ], + "triangles": [ 5, 16, 6, 6, 16, 7, 4, 17, 5, 5, 17, 16, 4, 3, 17, 17, 21, 16, 16, 21, 7, 3, 2, 17, 21, 19, 18, 21, 17, 19, 17, 2, 19, 21, 8, 7, 21, 18, 8, 18, 9, 8, 19, 22, 18, 18, 10, 9, 18, 22, 10, 2, 1, 19, 19, 20, 22, 19, 1, 20, 22, 11, 10, 22, 20, 11, 20, 1, 14, 20, 12, 11, 1, 0, 14, 20, 13, 12, 20, 14, 13, 0, 15, 14 ], + "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.88, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], + "hull": 16, + "width": 68, + "height": 96 + } + }, + "undie straps": { + "undie straps": { + "name": "goblin/undie-straps", + "type": "mesh", + "uvs": [ 0.36097, 0.44959, 0.66297, 0.60591, 1, 0.19486, 1, 0.57117, 0.75897, 1, 0.38697, 1, 0, 0.26433, 0, 0, 0.12497, 0 ], + "triangles": [ 5, 1, 4, 4, 1, 3, 6, 0, 5, 5, 0, 1, 3, 1, 2, 6, 8, 0, 6, 7, 8 ], + "vertices": [ -10.56, 12.87, 6.53, 9.9, 25.62, 17.71, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], + "hull": 9, + "width": 55, + "height": 19 + } + }, + "undies": { + "undies": { + "name": "goblin/undies", + "type": "mesh", + "uvs": [ 0, 0.32029, 0.14893, 0.59457, 0.22437, 1, 0.35909, 1, 0.50998, 1, 0.79559, 0.58453, 0.9842, 0.28015, 1, 0.00588, 0.46957, 0.17646, 0, 0.03933, 0.48843, 0.59122, 0.48114, 0.43099 ], + "triangles": [ 3, 10, 4, 4, 10, 5, 10, 3, 1, 3, 2, 1, 1, 11, 10, 1, 0, 11, 10, 11, 5, 5, 11, 6, 0, 8, 11, 11, 8, 6, 0, 9, 8, 6, 8, 7 ], + "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.59, 22.22, 6.11, 22.92, 14.05, 3.75, 9.44, -13.08, 13.71, 4.21, -2.59, 4.03, 2.05 ], + "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], + "hull": 10, + "width": 36, + "height": 29 + } + } + } +}, +"animations": { + "walk": { + "slots": { + "eyes": { + "attachment": [ + { "time": 0.7, "name": "eyes closed" }, + { "time": 0.8, "name": null } + ] + } + }, + "bones": { + "left upper leg": { + "rotate": [ + { "time": 0, "angle": -26.55 }, + { "time": 0.1333, "angle": -8.78 }, + { "time": 0.2333, "angle": 9.51 }, + { "time": 0.3666, "angle": 30.74 }, + { "time": 0.5, "angle": 25.33 }, + { "time": 0.6333, "angle": 26.11 }, + { "time": 0.7333, "angle": 7.45 }, + { "time": 0.8666, "angle": -21.19 }, + { "time": 1, "angle": -26.55 } + ], + "translate": [ + { "time": 0, "x": -1.32, "y": 1.7 }, + { "time": 0.3666, "x": -0.06, "y": 2.42 }, + { "time": 1, "x": -1.32, "y": 1.7 } + ] + }, + "right upper leg": { + "rotate": [ + { "time": 0, "angle": 42.45 }, + { + "time": 0.1333, + "angle": 49.86, + "curve": [ 0.414, 0, 0.705, 0.99 ] + }, + { "time": 0.2333, "angle": 22.51 }, + { "time": 0.5, "angle": -16.93 }, + { "time": 0.6333, "angle": 1.89 }, + { + "time": 0.7333, + "angle": 34.86, + "curve": [ 0.462, 0.11, 1, 1 ] + }, + { + "time": 0.8666, + "angle": 58.68, + "curve": [ 0.5, 0.02, 1, 1 ] + }, + { "time": 1, "angle": 42.45 } + ], + "translate": [ + { "time": 0, "x": 6.23, "y": 0 }, + { "time": 0.2333, "x": 2.14, "y": 2.4 }, + { "time": 0.5, "x": 2.44, "y": 4.8 }, + { "time": 1, "x": 6.23, "y": 0 } + ] + }, + "left lower leg": { + "rotate": [ + { "time": 0, "angle": -18.05 }, + { "time": 0.1333, "angle": -63.5 }, + { "time": 0.2333, "angle": -83.01 }, + { "time": 0.5, "angle": 5.11 }, + { "time": 0.6333, "angle": -28.29 }, + { "time": 0.7333, "angle": -27.52 }, + { "time": 0.8666, "angle": 3.53 }, + { "time": 1, "angle": -18.05 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.2333, "x": 2.55, "y": -0.47 }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "left foot": { + "rotate": [ + { "time": 0, "angle": -14.56 }, + { "time": 0.1333, "angle": -10.42 }, + { "time": 0.2333, "angle": -5.01 }, + { "time": 0.3, "angle": 6.67 }, + { "time": 0.3666, "angle": 3.87 }, + { "time": 0.5, "angle": -3.87 }, + { "time": 0.6333, "angle": 2.78 }, + { "time": 0.7333, "angle": -11.99 }, + { "time": 0.8666, "angle": -12.45 }, + { "time": 1, "angle": -14.56 } + ] + }, + "right shoulder": { + "rotate": [ + { + "time": 0, + "angle": 5.29, + "curve": [ 0.264, 0, 0.75, 1 ] + }, + { "time": 0.6333, "angle": 6.65 }, + { "time": 1, "angle": 5.29 } + ] + }, + "right arm": { + "rotate": [ + { + "time": 0, + "angle": -4.02, + "curve": [ 0.267, 0, 0.804, 0.99 ] + }, + { + "time": 0.6333, + "angle": 19.78, + "curve": [ 0.307, 0, 0.787, 0.99 ] + }, + { "time": 1, "angle": -4.02 } + ] + }, + "right hand": { + "rotate": [ + { "time": 0, "angle": 8.98 }, + { "time": 0.6333, "angle": 0.51 }, + { "time": 1, "angle": 8.98 } + ] + }, + "left shoulder": { + "rotate": [ + { + "time": 0, + "angle": 6.25, + "curve": [ 0.339, 0, 0.683, 1 ] + }, + { + "time": 0.5, + "angle": -11.78, + "curve": [ 0.281, 0, 0.686, 0.99 ] + }, + { "time": 1, "angle": 6.25 } + ], + "translate": [ + { "time": 0, "x": 1.15, "y": 0.23 } + ] + }, + "left hand": { + "rotate": [ + { + "time": 0, + "angle": -21.23, + "curve": [ 0.295, 0, 0.755, 0.98 ] + }, + { + "time": 0.5, + "angle": -27.28, + "curve": [ 0.241, 0, 0.75, 0.97 ] + }, + { "time": 1, "angle": -21.23 } + ] + }, + "left arm": { + "rotate": [ + { + "time": 0, + "angle": 28.37, + "curve": [ 0.339, 0, 0.683, 1 ] + }, + { + "time": 0.5, + "angle": 60.09, + "curve": [ 0.281, 0, 0.686, 0.99 ] + }, + { "time": 1, "angle": 28.37 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -10.28 }, + { + "time": 0.1333, + "angle": -15.38, + "curve": [ 0.545, 0, 0.818, 1 ] + }, + { + "time": 0.3666, + "angle": -9.78, + "curve": [ 0.58, 0.17, 0.669, 0.99 ] + }, + { + "time": 0.6333, + "angle": -15.75, + "curve": [ 0.235, 0.01, 0.795, 1 ] + }, + { + "time": 0.8666, + "angle": -7.06, + "curve": [ 0.209, 0, 0.816, 0.98 ] + }, + { "time": 1, "angle": -10.28 } + ], + "translate": [ + { "time": 0, "x": -3.72, "y": -0.01 } + ] + }, + "right foot": { + "rotate": [ + { "time": 0, "angle": -5.25 }, + { "time": 0.2333, "angle": -17.76 }, + { "time": 0.3666, "angle": -20.09 }, + { "time": 0.5, "angle": -19.73 }, + { "time": 0.7333, "angle": -11.68 }, + { "time": 0.8, "angle": 4.46 }, + { "time": 0.8666, "angle": 0.46 }, + { "time": 1, "angle": -5.25 } + ] + }, + "right lower leg": { + "rotate": [ + { + "time": 0, + "angle": -3.39, + "curve": [ 0.316, 0.01, 0.741, 0.98 ] + }, + { + "time": 0.1333, + "angle": -43.21, + "curve": [ 0.414, 0, 0.705, 0.99 ] + }, + { "time": 0.2333, "angle": -25.98 }, + { "time": 0.5, "angle": -19.53 }, + { "time": 0.6333, "angle": -64.8 }, + { + "time": 0.7333, + "angle": -89.54, + "curve": [ 0.557, 0.18, 1, 1 ] + }, + { "time": 1, "angle": -3.39 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0 }, + { "time": 0.6333, "x": 2.18, "y": 0.21 }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": -8.4 }, + { + "time": 0.1333, + "x": 0, + "y": -9.35, + "curve": [ 0.326, 0.05, 0.674, 0.93 ] + }, + { + "time": 0.2333, + "x": 0, + "y": -0.59, + "curve": [ 0.325, 0.39, 0.643, 0.7 ] + }, + { "time": 0.3666, "x": 0, "y": -3.96 }, + { "time": 0.5, "x": 0, "y": -8.4 }, + { + "time": 0.6333, + "x": 0, + "y": -10, + "curve": [ 0.359, 0.47, 0.646, 0.74 ] + }, + { + "time": 0.7333, + "x": 0, + "y": -5.29, + "curve": [ 0.333, 0.36, 0.662, 0.69 ] + }, + { + "time": 0.8, + "x": 0, + "y": -2.49, + "curve": [ 0.322, 0.35, 0.651, 0.68 ] + }, + { "time": 0.8666, "x": 0, "y": -3.96 }, + { "time": 1, "x": 0, "y": -8.4 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 3.6 }, + { "time": 0.1333, "angle": 17.49 }, + { "time": 0.2333, "angle": 6.1 }, + { "time": 0.3666, "angle": 3.45 }, + { "time": 0.5, "angle": 5.17 }, + { "time": 0.6333, "angle": 18.36 }, + { "time": 0.7333, "angle": 6.09 }, + { "time": 0.8666, "angle": 2.28 }, + { "time": 1, "angle": 3.6 } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 3.6, + "curve": [ 0, 0, 0.704, 1.17 ] + }, + { "time": 0.1333, "angle": -0.2 }, + { "time": 0.2333, "angle": 6.1 }, + { "time": 0.3666, "angle": 3.45 }, + { + "time": 0.5, + "angle": 5.17, + "curve": [ 0, 0, 0.704, 1.61 ] + }, + { "time": 0.6666, "angle": 1.1 }, + { "time": 0.7333, "angle": 6.09 }, + { "time": 0.8666, "angle": 2.28 }, + { "time": 1, "angle": 3.6 } + ] + }, + "pelvis": { + "rotate": [ + { "time": 0, "angle": -1.33 } + ], + "translate": [ + { "time": 0, "x": 0.39, "y": -0.78 } + ] + }, + "spear1": { + "rotate": [ + { "time": 0, "angle": 1.84 }, + { "time": 0.2, "angle": -5.38 }, + { "time": 0.5, "angle": 2.95 }, + { "time": 0.7333, "angle": -3.67 }, + { "time": 1, "angle": 1.84 } + ] + }, + "spear2": { + "rotate": [ + { "time": 0, "angle": 1.84 }, + { "time": 0.2, "angle": -5.38 }, + { "time": 0.5, "angle": 2.95 }, + { "time": 0.7333, "angle": -3.67 }, + { "time": 1, "angle": 1.84 } + ] + }, + "spear3": { + "rotate": [ + { "time": 0, "angle": 3.64 }, + { "time": 0.2, "angle": -3.59 }, + { "time": 0.5, "angle": 4.74 }, + { "time": 0.7333, "angle": -1.87 }, + { "time": 1, "angle": 3.64 } + ] + } + }, + "ffd": { + "default": { + "right hand item": { + "dagger": [ + { + "time": 0, + "offset": 26, + "vertices": [ 2.34, 0.14 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "offset": 8, + "vertices": [ -1.19, 4.31, 0.07, 6.41, 1.66, 6.18, 1.75, 3.59 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "offset": 26, + "vertices": [ 2.34, 0.14 ] + } + ] + } + }, + "goblin": { + "head": { + "head": [ + { + "time": 0, + "curve": [ 0.632, 0, 0.75, 1 ] + }, + { + "time": 0.2, + "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08, -1.08, 0.08, -1.08, 0.08, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.3666, + "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09, 1.47, 0.09, 1.47, 0.09, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09 ], + "curve": [ 0.621, 0, 0.75, 1 ] + }, + { + "time": 0.7, + "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17, -1.17, -0.17, -1.17, -0.17, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8666, + "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08, 0.38, 0.08, 0.38, 0.08, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1 } + ] + }, + "left foot": { + "left foot": [ + { + "time": 0, + "offset": 8, + "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] + }, + { "time": 0.1333 }, + { + "time": 0.2333, + "offset": 8, + "vertices": [ -3.96, -2.34, -5.8, -12.47, -2.23, -12.99, 2.02, -9.1, 0, 0, 0, 0, 0, 0, -1.35, -5.28 ] + }, + { + "time": 0.3666, + "offset": 8, + "vertices": [ 0.66, 0.33, 0.33, 2.69, -0.48, 2.54, -1.13, 1.38, 0, 0, 0, 0, 0, 0, -0.11, 0.79 ] + }, + { "time": 0.5, "curve": "stepped" }, + { "time": 0.6333 }, + { + "time": 0.7333, + "offset": 8, + "vertices": [ -2.97, 9.4, -6.91, 19.92, -10.55, 18.41, -12.37, 12.38, -4.72, 6.3, 0, 0, -1.48, 4.88, -7.06, 10.7 ] + }, + { + "time": 0.8333, + "offset": 6, + "vertices": [ 1.05, 1.56, -2.52, 7.99, -5.52, 17.14, -8.93, 15.79, -10.73, 10.22, -4.23, 5.36, 0, 0, 0, 0, -5.83, 8.55 ] + }, + { + "time": 1, + "offset": 8, + "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] + } + ] + }, + "pelvis": { + "pelvis": [ + { "time": 0 }, + { + "time": 0.1333, + "offset": 6, + "vertices": [ -0.68, -4.13 ] + }, + { + "time": 0.3333, + "offset": 6, + "vertices": [ -1.04, -3.1 ] + }, + { + "time": 0.7, + "offset": 6, + "vertices": [ -1.42, -6.3 ] + }, + { + "time": 0.8666, + "offset": 6, + "vertices": [ -1.13, -1.79 ] + }, + { "time": 1 } + ] + }, + "right foot": { + "right foot": [ + { "time": 0 }, + { + "time": 0.1333, + "offset": 2, + "vertices": [ -2.81, 2.63, -2.35, 3.89, -1.99, 4.86, -0.93, 5.57, -0.48, 5.09, -0.34, 3.42, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31, 1.91, -1.32, 3.65 ] + }, + { + "time": 0.2333, + "offset": 2, + "vertices": [ -6.39, 6.41, -7.74, 8.27, -7.02, 11.35, -4.03, 13.93, -2.5, 12.62, -1.46, 7.58, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84, 2.61, -4.53, 7.92 ] + }, + { + "time": 0.3, + "offset": 2, + "vertices": [ -8.27, 6.68, -9.29, 10.13, -8.62, 14.71, -4.58, 18.81, -2.2, 17.1, -0.07, 9.9, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94, 2.38, -4.59, 10.01 ] + }, + { + "time": 0.3666, + "offset": 2, + "vertices": [ -10.47, 9.44, -13.36, 12.4, -14.32, 16.94, -9.24, 23.55, -5.51, 21.51, -1.19, 11.53, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14, 2.29, -6.63, 11.37 ] + }, + { + "time": 0.5, + "offset": 2, + "vertices": [ -5.42, 4.36, -10.59, 7.04, -11.64, 11.55, -6.19, 20.12, -1.45, 18.05, 4.86, 6.41, 2.81, 0.27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96, 4.94 ] + }, + { "time": 0.6333 }, + { + "time": 0.7333, + "offset": 4, + "vertices": [ 1.31, -6.84, -0.87, -12.54, -5.98, -14.08, -7.15, -11.63, -5.67, -4.83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06, -6.93 ] + }, + { + "time": 0.8, + "offset": 4, + "vertices": [ 0.65, -3.42, -0.43, -6.27, -2.99, -7.04, -3.57, -5.81, -2.83, -2.41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79, -1.28, 0, 0, 0, 0, -1.03, -3.46 ] + }, + { "time": 0.8666 } + ] + }, + "right hand": { + "right hand": [ + { + "time": 0, + "offset": 4, + "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] + }, + { "time": 0.5 }, + { + "time": 1, + "offset": 4, + "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] + } + ] + }, + "right lower leg": { + "right lower leg": [ + { "time": 0 }, + { + "time": 0.6, + "offset": 6, + "vertices": [ 1.8, -1.56 ] + }, + { "time": 1 } + ] + }, + "right upper leg": { + "right upper leg": [ + { + "time": 0, + "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] + }, + { "time": 0.3333 }, + { + "time": 0.8666, + "offset": 14, + "vertices": [ 0.13, -2.35, -1.33, -5.99, -1.35, -4.43 ] + }, + { + "time": 1, + "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] + } + ] + }, + "torso": { + "torso": [ + { + "time": 0, + "offset": 14, + "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] + }, + { + "time": 0.1333, + "offset": 14, + "vertices": [ 1.31, -0.59, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] + }, + { + "time": 0.3, + "offset": 14, + "vertices": [ 6.03, -3.13, 7.55, -1.38, 6.79, 0.31, 4.23, 1.14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07, -5.16, 0, 0, 4, 0.27, 0, 0, 0, 0, 3.43, -3.52 ] + }, + { + "time": 0.5, + "offset": 14, + "vertices": [ 2.25, -0.87, 2.57, -0.56, 3.17, -0.57, 1.48, 0.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22, -4.43, 0, 0, 1.48, 0.01, 0, 0, 0, 0, 0.31, -3.28, -1.53, 0.17 ] + }, + { + "time": 0.6333, + "offset": 14, + "vertices": [ 0.75, -1.51, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] + }, + { + "time": 0.8666, + "offset": 14, + "vertices": [ 0.62, -1.26, 0.38, -2.2, 3.25, -0.5, 2.41, 2.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.66, -3.1, 0, 0, 2.3, -1.15, 0, 0, 0, 0, -0.07, -3.63, -0.93, 0.1 ] + }, + { + "time": 1, + "offset": 14, + "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] + } + ] + }, + "undie straps": { + "undie straps": [ + { + "time": 0, + "offset": 2, + "vertices": [ -1.77, 0.54, -0.96, -1.03, -0.39, -0.24, -1.77, 0.54 ] + }, + { + "time": 0.1333, + "offset": 2, + "vertices": [ -2.25, -1.03, -1.49, -4.23, -0.74, -2.84, -1.9, 0.54 ] + }, + { + "time": 0.3333, + "offset": 2, + "vertices": [ -2.37, -0.05, -0.49, 0.19, -0.9, 1.16, -1.6, 2.7, 0.96, 0.8 ] + }, + { + "time": 0.7, + "offset": 2, + "vertices": [ -0.91, -2.76, -0.62, -3.63, -0.84, -2.26, -2.56, 0.52 ] + }, + { + "time": 0.8666, + "offset": 2, + "vertices": [ -2.56, 0.52, -1.58, 0.32, -1.38, 0.32, -2.56, 0.52 ] + }, + { + "time": 1, + "offset": 2, + "vertices": [ -1.77, 0.54, -0.8, 0.53, -0.8, 0.53, -1.77, 0.54 ] + } + ] + }, + "undies": { + "undies": [ + { + "time": 0, + "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] + }, + { + "time": 0.1333, + "vertices": [ 0.72, 0.43, 7.2, -0.16, 1.37, 0, 1.37, 0, 1.37, 0, 1.25, 0.04, -0.99, -2.95, -1.37, -3.07, 1.37, 0, 0.35, -0.29, 2.99, -0.07, 3.9, -0.14 ] + }, + { + "time": 0.3333, + "vertices": [ 1.16, 0, 2.1, -0.23, 0, 0, 0, 0, 0, 0, 2.24, -0.24, -0.43, 0.6, -1.55, 0.48 ] + }, + { + "time": 0.5333, + "vertices": [ 1.16, 0, -0.23, -0.93, -2.92, 0.35, 0, 0, 0, 0, 0.49, -0.24, -0.64, -2.07, -0.64, -2.07 ] + }, + { + "time": 0.7, + "vertices": [ 1.86, -0.11, 4.66, -0.09, -1.76, 0.21, 0, 0, -0.56, 0.32, -1.13, -1.15, -2.19, -3.47, -1.29, -3.47, 0, 0, 0, 0, 1.58, -0.04, 2.65, 0.16 ] + }, + { + "time": 0.8333, + "vertices": [ 2.41, -0.2, 8.58, 0.58, -0.83, 0.1, 0, 0, -1.02, 0.59, -2.44, -1.87, -1.62, 0, 0, 0, 0, 0, 0, 0, 2.85, -0.08, 4.78, 0.3 ] + }, + { + "time": 0.8666, + "vertices": [ 2.01, -0.02, 8.98, 0.44, -0.2, 0.08, 0.45, 0, -0.35, 0.47, -1.84, -1.44, -0.79, 1.26, 0.53, 1.23, 0.45, 0, 0.11, -0.09, 3.28, -0.09, 5.13, 0.19 ] + }, + { + "time": 1, + "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] + } + ] + } + } + } + } +} +} \ No newline at end of file diff --git a/spine-tk2d/Assets/examples/goblins/goblins-ffd.json.txt.meta b/spine-tk2d/Assets/examples/goblins/goblins-ffd.json.txt.meta new file mode 100644 index 000000000..680370fa4 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/goblins-ffd.json.txt.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 03dfe4c9b91b93b47816439a1f91a48a +TextScriptImporter: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/goblins.unity b/spine-tk2d/Assets/examples/goblins/goblins.unity new file mode 100644 index 000000000..816643e01 Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/goblins.unity differ diff --git a/spine-tk2d/Assets/examples/goblins/goblins.unity.meta b/spine-tk2d/Assets/examples/goblins/goblins.unity.meta new file mode 100644 index 000000000..8d920a5d3 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/goblins.unity.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: cc2d822d0267e2e46bd5ee22ebc89b36 +DefaultImporter: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images.meta b/spine-tk2d/Assets/examples/goblins/images.meta new file mode 100644 index 000000000..4e2133603 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 4b989f3dd92ba6d46b9f473be0ef27fc +folderAsset: yes +DefaultImporter: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/dagger.png b/spine-tk2d/Assets/examples/goblins/images/dagger.png new file mode 100644 index 000000000..9a666d631 Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/dagger.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/dagger.png.meta b/spine-tk2d/Assets/examples/goblins/images/dagger.png.meta new file mode 100644 index 000000000..defa4e75a --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/dagger.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: cff16cdb2ad3d54478e6d12afd6f835c +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin.meta b/spine-tk2d/Assets/examples/goblins/images/goblin.meta new file mode 100644 index 000000000..9c6edceca --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 5ec67732682a81943a13b2dfd7b316d1 +folderAsset: yes +DefaultImporter: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/eyes-closed.png b/spine-tk2d/Assets/examples/goblins/images/goblin/eyes-closed.png new file mode 100644 index 000000000..e306dd40f Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/eyes-closed.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/eyes-closed.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/eyes-closed.png.meta new file mode 100644 index 000000000..700d6c794 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/eyes-closed.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 2f9da4d291a7421488b5d8c4c33fc5b4 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/head.png b/spine-tk2d/Assets/examples/goblins/images/goblin/head.png new file mode 100644 index 000000000..81c1b5e1b Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/head.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/head.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/head.png.meta new file mode 100644 index 000000000..9ae734efd --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/head.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: bcce48841f8498e49876846c151dc4d7 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-arm.png b/spine-tk2d/Assets/examples/goblins/images/goblin/left-arm.png new file mode 100644 index 000000000..42f60e0aa Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/left-arm.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-arm.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/left-arm.png.meta new file mode 100644 index 000000000..68c269c84 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/left-arm.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: cf0aa5059c48db64380b5d8d9d48bbf7 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-foot.png b/spine-tk2d/Assets/examples/goblins/images/goblin/left-foot.png new file mode 100644 index 000000000..89c142b7c Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/left-foot.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-foot.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/left-foot.png.meta new file mode 100644 index 000000000..f6ba394a8 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/left-foot.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 14451be1ccd40764e9be7944b1b35d7e +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-hand.png b/spine-tk2d/Assets/examples/goblins/images/goblin/left-hand.png new file mode 100644 index 000000000..39700f014 Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/left-hand.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-hand.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/left-hand.png.meta new file mode 100644 index 000000000..6eaa71a39 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/left-hand.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 2f39487177b6d0f429497745e64e1db0 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-lower-leg.png b/spine-tk2d/Assets/examples/goblins/images/goblin/left-lower-leg.png new file mode 100644 index 000000000..dd3e83b67 Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/left-lower-leg.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-lower-leg.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/left-lower-leg.png.meta new file mode 100644 index 000000000..b4be08c2f --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/left-lower-leg.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: d875337f331493b448affcae727ab7b0 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-shoulder.png b/spine-tk2d/Assets/examples/goblins/images/goblin/left-shoulder.png new file mode 100644 index 000000000..220b09cbf Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/left-shoulder.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-shoulder.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/left-shoulder.png.meta new file mode 100644 index 000000000..f5255ab88 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/left-shoulder.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 6c0265e742cac734e86738c88cac3187 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-upper-leg.png b/spine-tk2d/Assets/examples/goblins/images/goblin/left-upper-leg.png new file mode 100644 index 000000000..a031cf682 Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/left-upper-leg.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-upper-leg.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/left-upper-leg.png.meta new file mode 100644 index 000000000..cf0fb0e1e --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/left-upper-leg.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 30edd05fdf3f3ec4897c5f095cfba8f9 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/neck.png b/spine-tk2d/Assets/examples/goblins/images/goblin/neck.png new file mode 100644 index 000000000..f4f3f04dc Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/neck.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/neck.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/neck.png.meta new file mode 100644 index 000000000..026b96f68 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/neck.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 946e1ac49a597d642940d2bc61a74ceb +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/pelvis.png b/spine-tk2d/Assets/examples/goblins/images/goblin/pelvis.png new file mode 100644 index 000000000..a8fc15c0d Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/pelvis.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/pelvis.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/pelvis.png.meta new file mode 100644 index 000000000..5989ae20d --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/pelvis.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 34721831e8dc33048a1c642af9c91860 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-arm.png b/spine-tk2d/Assets/examples/goblins/images/goblin/right-arm.png new file mode 100644 index 000000000..c7b752bb2 Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/right-arm.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-arm.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/right-arm.png.meta new file mode 100644 index 000000000..c98922722 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/right-arm.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 0fc0421ba4507d7479276646539febf7 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-foot.png b/spine-tk2d/Assets/examples/goblins/images/goblin/right-foot.png new file mode 100644 index 000000000..ce982d310 Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/right-foot.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-foot.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/right-foot.png.meta new file mode 100644 index 000000000..8e4e299ef --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/right-foot.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 232f1d4aee7e76547b4a3349b7fd4f29 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-hand.png b/spine-tk2d/Assets/examples/goblins/images/goblin/right-hand.png new file mode 100644 index 000000000..2363fba02 Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/right-hand.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-hand.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/right-hand.png.meta new file mode 100644 index 000000000..dec41eb80 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/right-hand.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: e89eca7d89b489f4491b5ec1cbb3ddf7 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-lower-leg.png b/spine-tk2d/Assets/examples/goblins/images/goblin/right-lower-leg.png new file mode 100644 index 000000000..b9bb49654 Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/right-lower-leg.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-lower-leg.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/right-lower-leg.png.meta new file mode 100644 index 000000000..f5cca1a75 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/right-lower-leg.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: aab7b79018a3ec84baccbeb6d9c40554 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-shoulder.png b/spine-tk2d/Assets/examples/goblins/images/goblin/right-shoulder.png new file mode 100644 index 000000000..48baa266c Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/right-shoulder.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-shoulder.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/right-shoulder.png.meta new file mode 100644 index 000000000..64eabbccc --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/right-shoulder.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: d0937186e72f856419c9dbcaec82762d +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-upper-leg.png b/spine-tk2d/Assets/examples/goblins/images/goblin/right-upper-leg.png new file mode 100644 index 000000000..d5fac4424 Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/right-upper-leg.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-upper-leg.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/right-upper-leg.png.meta new file mode 100644 index 000000000..a5298629c --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/right-upper-leg.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 438e00f2d68cac24bace724555e443b5 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/torso.png b/spine-tk2d/Assets/examples/goblins/images/goblin/torso.png new file mode 100644 index 000000000..f9b4314ae Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/torso.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/torso.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/torso.png.meta new file mode 100644 index 000000000..56d9f6e3b --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/torso.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 9427b1a031010ab41b9cda104be8c204 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/undie-straps.png b/spine-tk2d/Assets/examples/goblins/images/goblin/undie-straps.png new file mode 100644 index 000000000..6088d3544 Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/undie-straps.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/undie-straps.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/undie-straps.png.meta new file mode 100644 index 000000000..eca91be55 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/undie-straps.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 9cfb974ed9f3dd042895ccfe0e2461b1 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/undies.png b/spine-tk2d/Assets/examples/goblins/images/goblin/undies.png new file mode 100644 index 000000000..95016babd Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/undies.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/undies.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/undies.png.meta new file mode 100644 index 000000000..de460e4e0 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblin/undies.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 10fccc8bd5aead04ca7376a040205f6f +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/goblingirl.meta b/spine-tk2d/Assets/examples/goblins/images/goblingirl.meta new file mode 100644 index 000000000..6d452d669 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/goblingirl.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 1c61c40d4513f844b9c4bb7bfb8992a6 +folderAsset: yes +DefaultImporter: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/shield.png b/spine-tk2d/Assets/examples/goblins/images/shield.png new file mode 100644 index 000000000..de431217c Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/shield.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/shield.png.meta b/spine-tk2d/Assets/examples/goblins/images/shield.png.meta new file mode 100644 index 000000000..4b45b9fed --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/shield.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 95c2d261ccd8d8c4b8760693cba0e08a +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/goblins/images/spear.png b/spine-tk2d/Assets/examples/goblins/images/spear.png new file mode 100644 index 000000000..0704dc326 Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/spear.png differ diff --git a/spine-tk2d/Assets/examples/goblins/images/spear.png.meta b/spine-tk2d/Assets/examples/goblins/images/spear.png.meta new file mode 100644 index 000000000..b14274471 --- /dev/null +++ b/spine-tk2d/Assets/examples/goblins/images/spear.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 54e7cc7562d107b4d96e0422dc7ed587 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 4096 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/spine-tk2d/Assets/examples/spineboy/Spineboy SkeletonData.asset b/spine-tk2d/Assets/examples/spineboy/Spineboy SkeletonData.asset index bd6d5fa87..e93322ba0 100644 Binary files a/spine-tk2d/Assets/examples/spineboy/Spineboy SkeletonData.asset and b/spine-tk2d/Assets/examples/spineboy/Spineboy SkeletonData.asset differ diff --git a/spine-tk2d/Assets/examples/spineboy/Spineboy.cs b/spine-tk2d/Assets/examples/spineboy/Spineboy.cs index 2ca754fab..615b0e4e0 100644 --- a/spine-tk2d/Assets/examples/spineboy/Spineboy.cs +++ b/spine-tk2d/Assets/examples/spineboy/Spineboy.cs @@ -41,8 +41,8 @@ public class Spineboy : MonoBehaviour { skeletonAnimation = GetComponent(); // Call our method any time an animation fires an event. skeletonAnimation.state.Event += Event; - // Queue jump to be played on track 0 after the starting animation. - skeletonAnimation.state.AddAnimation(0, "jump", false, 0); + // Queue jump to be played on track 0 three seconds after the starting animation. + skeletonAnimation.state.AddAnimation(0, "jump", false, 3); // Queue walk to be looped on track 0 after the jump animation. skeletonAnimation.state.AddAnimation(0, "run", true, 0); } diff --git a/spine-tk2d/Assets/examples/spineboy/spineboy.json.txt b/spine-tk2d/Assets/examples/spineboy/spineboy.json.txt index a673cd0f8..1ffa7aad5 100644 --- a/spine-tk2d/Assets/examples/spineboy/spineboy.json.txt +++ b/spine-tk2d/Assets/examples/spineboy/spineboy.json.txt @@ -1815,55 +1815,55 @@ "slots": { "front_fist": { "attachment": [ - { "time": 0, "name": "front_fist_closed" }, - { "time": 0.2666, "name": "front_fist_open" } + { "time": 0.1333, "name": "front_fist_closed" }, + { "time": 0.4, "name": "front_fist_open" } ] }, "mouth": { "attachment": [ - { "time": 0, "name": "mouth_grind" } + { "time": 0.1333, "name": "mouth_grind" } ] }, "muzzle": { "attachment": [ - { "time": 0, "name": "muzzle" }, - { "time": 0.1333, "name": null } + { "time": 0.1333, "name": "muzzle" }, + { "time": 0.2666, "name": null } ], "color": [ { - "time": 0, + "time": 0.1333, "color": "ffffff00", "curve": [ 0.118, 0.99, 0.75, 1 ] }, { - "time": 0.0333, + "time": 0.1666, "color": "ffffffff", "curve": [ 0.821, 0, 0.909, 0.89 ] }, - { "time": 0.1333, "color": "ffffff00" } + { "time": 0.2666, "color": "ffffff00" } ] } }, "bones": { "front_fist": { "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.2666, "x": 1, "y": 1 } + { "time": 0.1333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } ] }, "gunTip": { "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.0666, "x": 20.93, "y": 1.57 } + { "time": 0.1333, "x": 0, "y": 0 }, + { "time": 0.2, "x": 20.93, "y": 1.57 } ], "scale": [ - { "time": 0, "x": 1, "y": 1 }, - { "time": 0.0666, "x": 1.247, "y": 1.516 } + { "time": 0.1333, "x": 1, "y": 1 }, + { "time": 0.2, "x": 1.247, "y": 1.516 } ] }, "gun": { "rotate": [ - { "time": 0, "angle": 0 } + { "time": 0, "angle": 1.9 } ], "translate": [ { @@ -1872,13 +1872,13 @@ "y": 5.84, "curve": [ 0, 0.3, 0.678, 1 ] }, - { "time": 0.1666, "x": -9.3, "y": -1.41 }, - { "time": 0.2666, "x": 0, "y": 0 } + { "time": 0.3, "x": -9.3, "y": -1.41 }, + { "time": 0.4, "x": 0, "y": 0 } ] }, "rear_bracer": { "rotate": [ - { "time": 0, "angle": 0 } + { "time": 0, "angle": -30.47 } ], "translate": [ { @@ -1887,13 +1887,13 @@ "y": 0, "curve": [ 0, 0.3, 0.678, 1 ] }, - { "time": 0.1666, "x": -5.99, "y": -3.71 }, - { "time": 0.2666, "x": 0, "y": 0 } + { "time": 0.3, "x": -5.99, "y": -3.71 }, + { "time": 0.4, "x": 0, "y": 0 } ] }, "rear_upper_arm": { "rotate": [ - { "time": 0, "angle": 0 } + { "time": 0, "angle": 62.3 } ], "translate": [ { @@ -1902,8 +1902,8 @@ "y": 0, "curve": [ 0, 0.3, 0.678, 1 ] }, - { "time": 0.1666, "x": 2.81, "y": 11.41 }, - { "time": 0.2666, "x": 0, "y": 0 } + { "time": 0.3, "x": 2.81, "y": 11.41 }, + { "time": 0.4, "x": 0, "y": 0 } ] } } diff --git a/spine-tk2d/Assets/examples/spineboy/spineboy.unity b/spine-tk2d/Assets/examples/spineboy/spineboy.unity index 14bfa345c..49906cadd 100644 Binary files a/spine-tk2d/Assets/examples/spineboy/spineboy.unity and b/spine-tk2d/Assets/examples/spineboy/spineboy.unity differ