From 335259f954dcdd02fe73fefe58469281f34285dc Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Sat, 3 Aug 2013 15:44:31 +0200 Subject: [PATCH] Rewrote spine-tk2d to match spine-unity. --- .gitignore | 9 + spine-tk2d/Assets/Spine.meta | 5 + spine-tk2d/Assets/Spine/Editor.meta | 5 + spine-tk2d/Assets/Spine/Editor/Menus.cs | 61 +++++ .../Spine/Editor/Menus.cs.meta} | 2 +- .../Editor/SkeletonAnimationInspector.cs | 117 ++++++++ .../SkeletonAnimationInspector.cs.meta} | 2 +- .../Editor/SkeletonComponentInspector.cs | 78 ++++++ .../SkeletonComponentInspector.cs.meta} | 2 +- .../Editor/SkeletonDataAssetInspector.cs | 101 +++++++ .../SkeletonDataAssetInspector.cs.meta} | 2 +- spine-tk2d/Assets/Spine/SkeletonAnimation.cs | 66 +++++ .../Assets/Spine/SkeletonAnimation.cs.meta | 8 + spine-tk2d/Assets/Spine/SkeletonComponent.cs | 252 ++++++++++++++++++ .../Assets/Spine/SkeletonComponent.cs.meta | 8 + spine-tk2d/Assets/Spine/SkeletonDataAsset.cs | 90 +++++++ .../Assets/Spine/SkeletonDataAsset.cs.meta | 8 + .../SpriteCollectionAttachmentLoader.cs} | 26 +- .../SpriteCollectionAttachmentLoader.cs.meta | 8 + spine-tk2d/Assets/Spine/spine-csharp.meta | 5 + spine-tk2d/Assets/examples.meta | 5 + spine-tk2d/Assets/examples/spineboy.meta | 5 + .../spineboy/Spineboy SkeletonData.asset} | Bin 4244 -> 4244 bytes .../Spineboy SkeletonData.asset.meta} | 0 .../examples/spineboy/Spineboy.cs} | 8 +- .../examples/spineboy/Spineboy.cs.meta} | 0 .../spineboy}/SpineboyAtlas Data.meta | 1 + .../SpineboyAtlas Data/SpineboyAtlas.prefab | Bin 18496 -> 18656 bytes .../SpineboyAtlas.prefab.meta | 2 +- .../SpineboyAtlas Data/atlas0 material.mat | Bin 4196 -> 4196 bytes .../atlas0 material.mat.meta | 0 .../spineboy}/SpineboyAtlas Data/atlas0.png | Bin .../SpineboyAtlas Data/atlas0.png.meta | 1 + .../SpineboyAtlas Data/atlas1 material.mat | Bin 0 -> 4196 bytes .../atlas1 material.mat.meta | 0 .../spineboy}/SpineboyAtlas Data/atlas1.png | Bin .../SpineboyAtlas Data/atlas1.png.meta | 1 + .../SpineboyAtlas Data/atlas2 material.mat | Bin 0 -> 4196 bytes .../atlas2 material.mat.meta | 0 .../spineboy}/SpineboyAtlas Data/atlas2.png | Bin .../SpineboyAtlas Data/atlas2.png.meta | 1 + .../examples/spineboy/SpineboyAtlas.prefab | Bin 0 -> 22576 bytes .../spineboy}/SpineboyAtlas.prefab.meta | 0 .../Assets/examples/spineboy/images.meta | 5 + .../examples/spineboy/images}/eyes-closed.png | Bin .../spineboy/images}/eyes-closed.png.meta | 1 + .../examples/spineboy/images}/eyes.png | Bin .../examples/spineboy/images}/eyes.png.meta | 1 + .../examples/spineboy/images}/head.png | Bin .../examples/spineboy/images}/head.png.meta | 1 + .../examples/spineboy/images}/left-ankle.png | Bin .../spineboy/images}/left-ankle.png.meta | 1 + .../examples/spineboy/images}/left-arm.png | Bin .../spineboy/images}/left-arm.png.meta | 1 + .../examples/spineboy/images}/left-foot.png | Bin .../spineboy/images}/left-foot.png.meta | 1 + .../examples/spineboy/images}/left-hand.png | Bin .../spineboy/images}/left-hand.png.meta | 1 + .../spineboy/images}/left-lower-leg.png | Bin .../spineboy/images}/left-lower-leg.png.meta | 1 + .../spineboy/images}/left-pant-bottom.png | Bin .../images}/left-pant-bottom.png.meta | 1 + .../spineboy/images}/left-shoulder.png | Bin .../spineboy/images}/left-shoulder.png.meta | 1 + .../spineboy/images}/left-upper-leg.png | Bin .../spineboy/images}/left-upper-leg.png.meta | 1 + .../examples/spineboy/images}/neck.png | Bin .../examples/spineboy/images}/neck.png.meta | 1 + .../examples/spineboy/images}/pelvis.png | Bin .../examples/spineboy/images}/pelvis.png.meta | 1 + .../examples/spineboy/images}/right-ankle.png | Bin .../spineboy/images}/right-ankle.png.meta | 1 + .../examples/spineboy/images}/right-arm.png | Bin .../spineboy/images}/right-arm.png.meta | 1 + .../spineboy/images}/right-foot-idle.png | Bin .../spineboy/images}/right-foot-idle.png.meta | 1 + .../examples/spineboy/images}/right-foot.png | Bin .../spineboy/images}/right-foot.png.meta | 1 + .../examples/spineboy/images}/right-hand.png | Bin .../spineboy/images}/right-hand.png.meta | 1 + .../spineboy/images}/right-lower-leg.png | Bin .../spineboy/images}/right-lower-leg.png.meta | 1 + .../spineboy/images}/right-pant-bottom.png | Bin .../images}/right-pant-bottom.png.meta | 1 + .../spineboy/images}/right-shoulder.png | Bin .../spineboy/images}/right-shoulder.png.meta | 1 + .../spineboy/images}/right-upper-leg.png | Bin .../spineboy/images}/right-upper-leg.png.meta | 1 + .../examples/spineboy/images}/torso.png | Bin .../examples/spineboy/images}/torso.png.meta | 1 + .../examples/spineboy/spineboy.json.txt} | 0 .../examples/spineboy/spineboy.json.txt.meta} | 0 .../examples/spineboy/spineboy.unity} | Bin 19032 -> 18576 bytes .../examples/spineboy/spineboy.unity.meta} | 2 +- spine-tk2d/Code/tk2dSpineAnimation.cs | 44 --- spine-tk2d/Code/tk2dSpineSkeleton.cs | 237 ---------------- spine-tk2d/Code/tk2dSpineSkeletonDataAsset.cs | 64 ----- spine-tk2d/Editor/tk2dSpineMenus.cs | 74 ----- spine-tk2d/Editor/tk2dSpineMenus.cs.meta | 8 - .../tk2dSpineSkeletonDataAssetInspector.cs | 113 -------- ...k2dSpineSkeletonDataAssetInspector.cs.meta | 8 - spine-tk2d/Example/Scripts.meta | 4 - spine-tk2d/Example/Spineboy.meta | 4 - spine-tk2d/Example/Spineboy/Atlas.meta | 4 - .../SpineboyAtlas material.mat | Bin 4200 -> 0 bytes .../SpineboyAtlas material.mat.meta | 4 - .../SpineboyAtlas Data/SpineboyAtlas.png | Bin 77953 -> 0 bytes .../SpineboyAtlas Data/SpineboyAtlas.png.meta | 35 --- .../SpineboyAtlasData.prefab | Bin 18792 -> 0 bytes .../SpineboyAtlasData.prefab.meta | 4 - .../SpineboyAtlas Data/atlas1 material.mat | Bin 4192 -> 0 bytes .../SpineboyAtlas Data/atlas2 material.mat | Bin 4192 -> 0 bytes .../Spineboy/Atlas/SpineboyAtlas.prefab | Bin 22416 -> 0 bytes spine-tk2d/Example/Spineboy/Skeleton.meta | 4 - spine-tk2d/Example/Spineboy/Textures.meta | 4 - spine-tk2d/README.md | 15 +- 116 files changed, 896 insertions(+), 639 deletions(-) create mode 100644 spine-tk2d/Assets/Spine.meta create mode 100644 spine-tk2d/Assets/Spine/Editor.meta create mode 100644 spine-tk2d/Assets/Spine/Editor/Menus.cs rename spine-tk2d/{Code/tk2dSpineSkeleton.cs.meta => Assets/Spine/Editor/Menus.cs.meta} (78%) create mode 100644 spine-tk2d/Assets/Spine/Editor/SkeletonAnimationInspector.cs rename spine-tk2d/{Code/tk2dSpineAnimation.cs.meta => Assets/Spine/Editor/SkeletonAnimationInspector.cs.meta} (78%) create mode 100644 spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs rename spine-tk2d/{Code/tk2dSpineSkeletonDataAsset.cs.meta => Assets/Spine/Editor/SkeletonComponentInspector.cs.meta} (78%) create mode 100644 spine-tk2d/Assets/Spine/Editor/SkeletonDataAssetInspector.cs rename spine-tk2d/{Code/tk2dSpineAttachmentLoader.cs.meta => Assets/Spine/Editor/SkeletonDataAssetInspector.cs.meta} (78%) create mode 100644 spine-tk2d/Assets/Spine/SkeletonAnimation.cs create mode 100644 spine-tk2d/Assets/Spine/SkeletonAnimation.cs.meta create mode 100644 spine-tk2d/Assets/Spine/SkeletonComponent.cs create mode 100644 spine-tk2d/Assets/Spine/SkeletonComponent.cs.meta create mode 100644 spine-tk2d/Assets/Spine/SkeletonDataAsset.cs create mode 100644 spine-tk2d/Assets/Spine/SkeletonDataAsset.cs.meta rename spine-tk2d/{Code/tk2dSpineAttachmentLoader.cs => Assets/Spine/SpriteCollectionAttachmentLoader.cs} (65%) create mode 100644 spine-tk2d/Assets/Spine/SpriteCollectionAttachmentLoader.cs.meta create mode 100644 spine-tk2d/Assets/Spine/spine-csharp.meta create mode 100644 spine-tk2d/Assets/examples.meta create mode 100644 spine-tk2d/Assets/examples/spineboy.meta rename spine-tk2d/{Example/Spineboy/Skeleton/SpineboySkeletonAsset.asset => Assets/examples/spineboy/Spineboy SkeletonData.asset} (63%) rename spine-tk2d/{Example/Spineboy/Skeleton/SpineboySkeletonAsset.asset.meta => Assets/examples/spineboy/Spineboy SkeletonData.asset.meta} (100%) rename spine-tk2d/{Example/Scripts/tk2dSpineboy.cs => Assets/examples/spineboy/Spineboy.cs} (73%) rename spine-tk2d/{Example/Scripts/tk2dSpineboy.cs.meta => Assets/examples/spineboy/Spineboy.cs.meta} (100%) rename spine-tk2d/{Example/Spineboy/Atlas => Assets/examples/spineboy}/SpineboyAtlas Data.meta (84%) rename spine-tk2d/{Example/Spineboy/Atlas => Assets/examples/spineboy}/SpineboyAtlas Data/SpineboyAtlas.prefab (63%) rename spine-tk2d/{Example/Spineboy/Atlas => Assets/examples/spineboy}/SpineboyAtlas Data/SpineboyAtlas.prefab.meta (58%) rename spine-tk2d/{Example/Spineboy/Atlas => Assets/examples/spineboy}/SpineboyAtlas Data/atlas0 material.mat (98%) rename spine-tk2d/{Example/Spineboy/Atlas => Assets/examples/spineboy}/SpineboyAtlas Data/atlas0 material.mat.meta (100%) rename spine-tk2d/{Example/Spineboy/Atlas => Assets/examples/spineboy}/SpineboyAtlas Data/atlas0.png (100%) rename spine-tk2d/{Example/Spineboy/Atlas => Assets/examples/spineboy}/SpineboyAtlas Data/atlas0.png.meta (96%) create mode 100644 spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/atlas1 material.mat rename spine-tk2d/{Example/Spineboy/Atlas => Assets/examples/spineboy}/SpineboyAtlas Data/atlas1 material.mat.meta (100%) rename spine-tk2d/{Example/Spineboy/Atlas => Assets/examples/spineboy}/SpineboyAtlas Data/atlas1.png (100%) rename spine-tk2d/{Example/Spineboy/Atlas => Assets/examples/spineboy}/SpineboyAtlas Data/atlas1.png.meta (96%) create mode 100644 spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/atlas2 material.mat rename spine-tk2d/{Example/Spineboy/Atlas => Assets/examples/spineboy}/SpineboyAtlas Data/atlas2 material.mat.meta (100%) rename spine-tk2d/{Example/Spineboy/Atlas => Assets/examples/spineboy}/SpineboyAtlas Data/atlas2.png (100%) rename spine-tk2d/{Example/Spineboy/Atlas => Assets/examples/spineboy}/SpineboyAtlas Data/atlas2.png.meta (96%) create mode 100644 spine-tk2d/Assets/examples/spineboy/SpineboyAtlas.prefab rename spine-tk2d/{Example/Spineboy/Atlas => Assets/examples/spineboy}/SpineboyAtlas.prefab.meta (100%) create mode 100644 spine-tk2d/Assets/examples/spineboy/images.meta rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/eyes-closed.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/eyes-closed.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/eyes.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/eyes.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/head.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/head.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/left-ankle.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/left-ankle.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/left-arm.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/left-arm.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/left-foot.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/left-foot.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/left-hand.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/left-hand.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/left-lower-leg.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/left-lower-leg.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/left-pant-bottom.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/left-pant-bottom.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/left-shoulder.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/left-shoulder.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/left-upper-leg.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/left-upper-leg.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/neck.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/neck.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/pelvis.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/pelvis.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-ankle.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-ankle.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-arm.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-arm.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-foot-idle.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-foot-idle.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-foot.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-foot.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-hand.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-hand.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-lower-leg.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-lower-leg.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-pant-bottom.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-pant-bottom.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-shoulder.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-shoulder.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-upper-leg.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/right-upper-leg.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/torso.png (100%) rename spine-tk2d/{Example/Spineboy/Textures => Assets/examples/spineboy/images}/torso.png.meta (96%) rename spine-tk2d/{Example/Spineboy/Skeleton/Spineboy.json.txt => Assets/examples/spineboy/spineboy.json.txt} (100%) rename spine-tk2d/{Example/Spineboy/Skeleton/Spineboy.json.txt.meta => Assets/examples/spineboy/spineboy.json.txt.meta} (100%) rename spine-tk2d/{Example/Example.unity => Assets/examples/spineboy/spineboy.unity} (75%) rename spine-tk2d/{Example/Example.unity.meta => Assets/examples/spineboy/spineboy.unity.meta} (56%) delete mode 100644 spine-tk2d/Code/tk2dSpineAnimation.cs delete mode 100644 spine-tk2d/Code/tk2dSpineSkeleton.cs delete mode 100644 spine-tk2d/Code/tk2dSpineSkeletonDataAsset.cs delete mode 100644 spine-tk2d/Editor/tk2dSpineMenus.cs delete mode 100644 spine-tk2d/Editor/tk2dSpineMenus.cs.meta delete mode 100644 spine-tk2d/Editor/tk2dSpineSkeletonDataAssetInspector.cs delete mode 100644 spine-tk2d/Editor/tk2dSpineSkeletonDataAssetInspector.cs.meta delete mode 100644 spine-tk2d/Example/Scripts.meta delete mode 100644 spine-tk2d/Example/Spineboy.meta delete mode 100644 spine-tk2d/Example/Spineboy/Atlas.meta delete mode 100644 spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas material.mat delete mode 100644 spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas material.mat.meta delete mode 100644 spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas.png delete mode 100644 spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas.png.meta delete mode 100644 spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlasData.prefab delete mode 100644 spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlasData.prefab.meta delete mode 100644 spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/atlas1 material.mat delete mode 100644 spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/atlas2 material.mat delete mode 100644 spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas.prefab delete mode 100644 spine-tk2d/Example/Spineboy/Skeleton.meta delete mode 100644 spine-tk2d/Example/Spineboy/Textures.meta diff --git a/.gitignore b/.gitignore index 55bf694d7..72b73798b 100644 --- a/.gitignore +++ b/.gitignore @@ -49,6 +49,15 @@ spine-unity/*.sln Assembly-*.csproj Assembly-*.pidb +spine-tk2d/Assets/Spine/spine-csharp +!spine-tk2d/Assets/Spine/spine-csharp/Place spine-csharp here.txt +spine-tk2d/ProjectSettings +spine-tk2d/Temp +spine-tk2d/Library +spine-tk2d/*.sln +spine-tk2d/Assets/TK2DROOT* +spine-tk2d/Assets/-tk2d* + spine-corona/spine-lua/ !spine-corona/spine-lua/Place spine-lua here.txt diff --git a/spine-tk2d/Assets/Spine.meta b/spine-tk2d/Assets/Spine.meta new file mode 100644 index 000000000..661958cff --- /dev/null +++ b/spine-tk2d/Assets/Spine.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 1fdd5b9e3e0974d40b1b149ec5a15662 +folderAsset: yes +DefaultImporter: + userData: diff --git a/spine-tk2d/Assets/Spine/Editor.meta b/spine-tk2d/Assets/Spine/Editor.meta new file mode 100644 index 000000000..18a2e4c7e --- /dev/null +++ b/spine-tk2d/Assets/Spine/Editor.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: ad07f9d157ce0a1468016aa5b6683e2a +folderAsset: yes +DefaultImporter: + userData: diff --git a/spine-tk2d/Assets/Spine/Editor/Menus.cs b/spine-tk2d/Assets/Spine/Editor/Menus.cs new file mode 100644 index 000000000..0811a2151 --- /dev/null +++ b/spine-tk2d/Assets/Spine/Editor/Menus.cs @@ -0,0 +1,61 @@ +using System; +using System.IO; +using UnityEditor; +using UnityEngine; +using Spine; + +public class Menus { + [MenuItem("Assets/Create/Spine SkeletonData")] + static public void CreateSkeletonData () { + CreateAsset("New SkeletonData"); + } + + static private void CreateAsset (String path) where T : ScriptableObject { + try { + path = Path.GetDirectoryName(AssetDatabase.GetAssetPath(Selection.activeObject)) + "/" + path; + } catch (Exception) { + path = "Assets/" + path; + } + ScriptableObject asset = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(asset, path + ".asset"); + AssetDatabase.SaveAssets(); + EditorUtility.FocusProjectWindow(); + Selection.activeObject = asset; + } + + [MenuItem("GameObject/Create Other/Spine SkeletonComponent")] + static public void CreateSkeletonComponentGameObject () { + GameObject gameObject = new GameObject("New SkeletonComponent", typeof(SkeletonComponent)); + EditorUtility.FocusProjectWindow(); + Selection.activeObject = gameObject; + } + + [MenuItem("GameObject/Create Other/Spine SkeletonAnimation")] + static public void CreateSkeletonAnimationGameObject () { + GameObject gameObject = new GameObject("New SkeletonAnimation", typeof(SkeletonAnimation)); + EditorUtility.FocusProjectWindow(); + Selection.activeObject = gameObject; + } + + [MenuItem("Component/Spine SkeletonComponent")] + static public void CreateSkeletonComponent () { + Selection.activeGameObject.AddComponent(typeof(SkeletonComponent)); + } + + [MenuItem("Component/Spine SkeletonAnimation")] + static public void CreateSkeletonAnimation () { + Selection.activeGameObject.AddComponent(typeof(SkeletonAnimation)); + } + + [MenuItem("Component/Spine SkeletonComponent", true)] + static public bool ValidateCreateSkeletonComponent () { + return Selection.activeGameObject != null + && Selection.activeGameObject.GetComponent(typeof(SkeletonComponent)) == null + && Selection.activeGameObject.GetComponent(typeof(SkeletonAnimation)) == null; + } + + [MenuItem("Component/Spine SkeletonAnimation", true)] + static public bool ValidateCreateSkeletonAnimation () { + return ValidateCreateSkeletonComponent(); + } +} diff --git a/spine-tk2d/Code/tk2dSpineSkeleton.cs.meta b/spine-tk2d/Assets/Spine/Editor/Menus.cs.meta similarity index 78% rename from spine-tk2d/Code/tk2dSpineSkeleton.cs.meta rename to spine-tk2d/Assets/Spine/Editor/Menus.cs.meta index fa2a45a66..f524d5648 100644 --- a/spine-tk2d/Code/tk2dSpineSkeleton.cs.meta +++ b/spine-tk2d/Assets/Spine/Editor/Menus.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b2ccbecf56104874f886da59557ff3e4 +guid: 1907c00e57244fd4c8ff68eee5a58761 MonoImporter: serializedVersion: 2 defaultReferences: [] diff --git a/spine-tk2d/Assets/Spine/Editor/SkeletonAnimationInspector.cs b/spine-tk2d/Assets/Spine/Editor/SkeletonAnimationInspector.cs new file mode 100644 index 000000000..6524c387f --- /dev/null +++ b/spine-tk2d/Assets/Spine/Editor/SkeletonAnimationInspector.cs @@ -0,0 +1,117 @@ +/******************************************************************************* + * Copyright (c) 2013, Esoteric Software + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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 UnityEditor; +using UnityEngine; + +[CustomEditor(typeof(SkeletonAnimation))] +public class SkeletonAnimationInspector : Editor { + private SerializedProperty skeletonDataAsset, animationName, loop, useAnimationName, initialSkinName, timeScale; + + void OnEnable () { + skeletonDataAsset = serializedObject.FindProperty("skeletonDataAsset"); + animationName = serializedObject.FindProperty("animationName"); + loop = serializedObject.FindProperty("loop"); + useAnimationName = serializedObject.FindProperty("useAnimationName"); + initialSkinName = serializedObject.FindProperty("initialSkinName"); + timeScale = serializedObject.FindProperty("timeScale"); + } + + override public void OnInspectorGUI () { + serializedObject.Update(); + SkeletonComponent component = (SkeletonComponent)target; + + EditorGUIUtility.LookLikeInspector(); + EditorGUILayout.PropertyField(skeletonDataAsset); + + if (component.skeleton != null) { + // Initial skin name. + String[] skins = new String[component.skeleton.Data.Skins.Count + 1]; + int skinIndex = 0; + for (int i = 0; i < skins.Length - 1; i++) { + String name = component.skeleton.Data.Skins[i].Name; + skins[i] = name; + if (name == initialSkinName.stringValue) + skinIndex = i; + } + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("Initial Skin"); + EditorGUIUtility.LookLikeControls(); + skinIndex = EditorGUILayout.Popup(skinIndex, skins); + EditorGUIUtility.LookLikeInspector(); + EditorGUILayout.EndHorizontal(); + + initialSkinName.stringValue = skinIndex == 0 ? null : skins[skinIndex]; + + // Animation name. + String[] animations = new String[component.skeleton.Data.Animations.Count + 2]; + animations[0] = ""; + animations[1] = ""; + int animationIndex = useAnimationName.boolValue ? 1 : 0; + for (int i = 0; i < animations.Length - 2; i++) { + String name = component.skeleton.Data.Animations[i].Name; + animations[i + 2] = name; + if (name == animationName.stringValue) + animationIndex = i + 2; + } + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("Animation"); + EditorGUIUtility.LookLikeControls(); + animationIndex = EditorGUILayout.Popup(animationIndex, animations); + EditorGUIUtility.LookLikeInspector(); + EditorGUILayout.EndHorizontal(); + + if (animationIndex == 0) { + animationName.stringValue = null; + useAnimationName.boolValue = false; + } else if (animationIndex == 1) { + animationName.stringValue = null; + useAnimationName.boolValue = true; + } else { + animationName.stringValue = animations[animationIndex]; + useAnimationName.boolValue = true; + } + } + + // Animation loop. + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("Loop"); + loop.boolValue = EditorGUILayout.Toggle(loop.boolValue); + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.PropertyField(timeScale); + + if (serializedObject.ApplyModifiedProperties() || + (Event.current.type == EventType.ValidateCommand && Event.current.commandName == "UndoRedoPerformed") + ) { + if (!Application.isPlaying) { + component.Clear(); + component.Update(); + } + } + } +} diff --git a/spine-tk2d/Code/tk2dSpineAnimation.cs.meta b/spine-tk2d/Assets/Spine/Editor/SkeletonAnimationInspector.cs.meta similarity index 78% rename from spine-tk2d/Code/tk2dSpineAnimation.cs.meta rename to spine-tk2d/Assets/Spine/Editor/SkeletonAnimationInspector.cs.meta index 8ee863adb..890c139f8 100644 --- a/spine-tk2d/Code/tk2dSpineAnimation.cs.meta +++ b/spine-tk2d/Assets/Spine/Editor/SkeletonAnimationInspector.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c36a835202febaa4ba99b918635b1920 +guid: a21294688dd7a7349a5ca17241fb40e0 MonoImporter: serializedVersion: 2 defaultReferences: [] diff --git a/spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs b/spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs new file mode 100644 index 000000000..cb23a1546 --- /dev/null +++ b/spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs @@ -0,0 +1,78 @@ +/******************************************************************************* + * Copyright (c) 2013, Esoteric Software + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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 UnityEditor; +using UnityEngine; + +[CustomEditor(typeof(SkeletonComponent))] +public class SkeletonComponentInspector : Editor { + private SerializedProperty skeletonDataAsset, initialSkinName, timeScale; + + void OnEnable () { + skeletonDataAsset = serializedObject.FindProperty("skeletonDataAsset"); + initialSkinName = serializedObject.FindProperty("initialSkinName"); + timeScale = serializedObject.FindProperty("timeScale"); + } + + override public void OnInspectorGUI () { + serializedObject.Update(); + SkeletonComponent component = (SkeletonComponent)target; + + EditorGUIUtility.LookLikeInspector(); + EditorGUILayout.PropertyField(skeletonDataAsset); + + if (component.skeleton != null) { + // Initial skin name. + String[] skins = new String[component.skeleton.Data.Skins.Count + 1]; + int skinIndex = 0; + for (int i = 0; i < skins.Length - 1; i++) { + String name = component.skeleton.Data.Skins[i].Name; + skins[i] = name; + if (name == initialSkinName.stringValue) + skinIndex = i; + } + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("Initial Skin"); + EditorGUIUtility.LookLikeControls(); + skinIndex = EditorGUILayout.Popup(skinIndex, skins); + EditorGUIUtility.LookLikeInspector(); + EditorGUILayout.EndHorizontal(); + + initialSkinName.stringValue = skinIndex == 0 ? null : skins[skinIndex]; + } + + EditorGUILayout.PropertyField(timeScale); + + if (serializedObject.ApplyModifiedProperties() || + (Event.current.type == EventType.ValidateCommand && Event.current.commandName == "UndoRedoPerformed") + ) { + if (!Application.isPlaying) { + component.Clear(); + component.Update(); + } + } + } +} diff --git a/spine-tk2d/Code/tk2dSpineSkeletonDataAsset.cs.meta b/spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs.meta similarity index 78% rename from spine-tk2d/Code/tk2dSpineSkeletonDataAsset.cs.meta rename to spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs.meta index ef43eb95e..59915bafb 100644 --- a/spine-tk2d/Code/tk2dSpineSkeletonDataAsset.cs.meta +++ b/spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c62fe2307a465b14793b8fdde54fdbe4 +guid: dbb89dadcac8d6b48869aeb81b0ae88f MonoImporter: serializedVersion: 2 defaultReferences: [] diff --git a/spine-tk2d/Assets/Spine/Editor/SkeletonDataAssetInspector.cs b/spine-tk2d/Assets/Spine/Editor/SkeletonDataAssetInspector.cs new file mode 100644 index 000000000..15ad75fc4 --- /dev/null +++ b/spine-tk2d/Assets/Spine/Editor/SkeletonDataAssetInspector.cs @@ -0,0 +1,101 @@ +/******************************************************************************* + * Copyright (c) 2013, Esoteric Software + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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 UnityEditor; +using UnityEngine; +using Spine; + +[CustomEditor(typeof(SkeletonDataAsset))] +public class SkeletonDataAssetInspector : Editor { + private SerializedProperty spriteCollection, skeletonJSON, scale, fromAnimation, toAnimation, duration; + private bool showAnimationStateData = true; + + void OnEnable () { + spriteCollection = serializedObject.FindProperty("spriteCollection"); + skeletonJSON = serializedObject.FindProperty("skeletonJSON"); + scale = serializedObject.FindProperty("scale"); + fromAnimation = serializedObject.FindProperty("fromAnimation"); + toAnimation = serializedObject.FindProperty("toAnimation"); + duration = serializedObject.FindProperty("duration"); + } + + override public void OnInspectorGUI () { + serializedObject.Update(); + SkeletonDataAsset asset = (SkeletonDataAsset)target; + + EditorGUIUtility.LookLikeInspector(); + + tk2dSpriteCollection sprites = EditorGUILayout.ObjectField("Sprite Collection", asset.spriteCollection, typeof(tk2dSpriteCollection), false) as tk2dSpriteCollection; + if (sprites != null) + spriteCollection.objectReferenceValue = sprites.spriteCollection; + + EditorGUILayout.PropertyField(skeletonJSON); + EditorGUILayout.PropertyField(scale); + + SkeletonData skeletonData = asset.GetSkeletonData(true); + if (skeletonData != null) { + showAnimationStateData = EditorGUILayout.Foldout(showAnimationStateData, "Animation State Data"); + if (showAnimationStateData) { + // Animation names. + String[] animations = new String[skeletonData.Animations.Count]; + for (int i = 0; i < animations.Length; i++) + animations[i] = skeletonData.Animations[i].Name; + + for (int i = 0; i < fromAnimation.arraySize; i++) { + SerializedProperty from = fromAnimation.GetArrayElementAtIndex(i); + SerializedProperty to = toAnimation.GetArrayElementAtIndex(i); + SerializedProperty durationProp = duration.GetArrayElementAtIndex(i); + EditorGUILayout.BeginHorizontal(); + from.stringValue = animations[EditorGUILayout.Popup(Math.Max(Array.IndexOf(animations, from.stringValue), 0), animations)]; + to.stringValue = animations[EditorGUILayout.Popup(Math.Max(Array.IndexOf(animations, to.stringValue), 0), animations)]; + durationProp.floatValue = EditorGUILayout.FloatField(durationProp.floatValue); + if (GUILayout.Button("Delete")) { + duration.DeleteArrayElementAtIndex(i); + toAnimation.DeleteArrayElementAtIndex(i); + fromAnimation.DeleteArrayElementAtIndex(i); + } + EditorGUILayout.EndHorizontal(); + } + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.Space(); + if (GUILayout.Button("Add Mix")) { + duration.arraySize++; + toAnimation.arraySize++; + fromAnimation.arraySize++; + } + EditorGUILayout.Space(); + EditorGUILayout.EndHorizontal(); + } + } + + if (!Application.isPlaying) { + if (serializedObject.ApplyModifiedProperties() || + (Event.current.type == EventType.ValidateCommand && Event.current.commandName == "UndoRedoPerformed") + ) { + asset.Clear(); + } + } + } +} diff --git a/spine-tk2d/Code/tk2dSpineAttachmentLoader.cs.meta b/spine-tk2d/Assets/Spine/Editor/SkeletonDataAssetInspector.cs.meta similarity index 78% rename from spine-tk2d/Code/tk2dSpineAttachmentLoader.cs.meta rename to spine-tk2d/Assets/Spine/Editor/SkeletonDataAssetInspector.cs.meta index 75b7cc390..e7eaac24c 100644 --- a/spine-tk2d/Code/tk2dSpineAttachmentLoader.cs.meta +++ b/spine-tk2d/Assets/Spine/Editor/SkeletonDataAssetInspector.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9b8ea7c2b29e5814eb0b4b692b828869 +guid: cffb121e3cd80644d84c585b9c7448e8 MonoImporter: serializedVersion: 2 defaultReferences: [] diff --git a/spine-tk2d/Assets/Spine/SkeletonAnimation.cs b/spine-tk2d/Assets/Spine/SkeletonAnimation.cs new file mode 100644 index 000000000..3caf76866 --- /dev/null +++ b/spine-tk2d/Assets/Spine/SkeletonAnimation.cs @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2013, Esoteric Software + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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; + +/** Extends SkeletonComponent to apply an animation. */ +[ExecuteInEditMode, RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))] +public class SkeletonAnimation : SkeletonComponent { + public bool useAnimationName; + public String animationName; + public bool loop; + public Spine.AnimationState state; + + override public void Initialize () { + base.Initialize(); // Call overridden method to initialize the skeleton. + + state = new Spine.AnimationState(skeletonDataAsset.GetAnimationStateData()); + } + + override public void UpdateSkeleton () { + if (useAnimationName) { + // Keep AnimationState in sync with animationName and loop fields. + if (animationName == null || animationName.Length == 0) { + if (state.Animation != null) + state.ClearAnimation(); + } else if (state.Animation == null || animationName != state.Animation.Name) { + Spine.Animation animation = skeleton.Data.FindAnimation(animationName); + if (animation != null) + state.SetAnimation(animation, loop); + } + state.Loop = loop; + } + + // Apply the animation. + state.Update(Time.deltaTime * timeScale); + state.Apply(skeleton); + + // Call overridden method to call skeleton Update and UpdateWorldTransform. + base.UpdateSkeleton(); + } +} diff --git a/spine-tk2d/Assets/Spine/SkeletonAnimation.cs.meta b/spine-tk2d/Assets/Spine/SkeletonAnimation.cs.meta new file mode 100644 index 000000000..4c8681a72 --- /dev/null +++ b/spine-tk2d/Assets/Spine/SkeletonAnimation.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 41133952e6d5fe04ca82a24ed4c02990 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/spine-tk2d/Assets/Spine/SkeletonComponent.cs b/spine-tk2d/Assets/Spine/SkeletonComponent.cs new file mode 100644 index 000000000..2ab63c07d --- /dev/null +++ b/spine-tk2d/Assets/Spine/SkeletonComponent.cs @@ -0,0 +1,252 @@ +/******************************************************************************* + * Copyright (c) 2013, Esoteric Software + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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))] +public class SkeletonComponent : MonoBehaviour { + public SkeletonDataAsset skeletonDataAsset; + public Skeleton skeleton; + public String initialSkinName; + public float timeScale = 1; + private Mesh mesh; + private int lastVertexCount; + private Vector3[] vertices; + private Color32[] colors; + private Vector2[] uvs; + private float[] vertexPositions = new float[8]; + private List submeshMaterials = new List(); + private List submeshIndexes = new List(); + private Material[] sharedMaterials = new Material[0]; + + public virtual void Clear () { + GetComponent().mesh = null; + DestroyImmediate(mesh); + mesh = null; + renderer.sharedMaterial = null; + skeleton = null; + } + + public virtual void Initialize () { + mesh = new Mesh(); + GetComponent().mesh = mesh; + mesh.name = "Skeleton Mesh"; + mesh.hideFlags = HideFlags.HideAndDontSave; + mesh.MarkDynamic(); + + // BOZO + //renderer.sharedMaterial = skeletonDataAsset.atlasAsset.material; + + vertices = new Vector3[0]; + + skeleton = new Skeleton(skeletonDataAsset.GetSkeletonData(false)); + + if (initialSkinName != null && initialSkinName.Length > 0) { + skeleton.SetSkin(initialSkinName); + skeleton.SetSlotsToSetupPose(); + } + } + + public virtual void UpdateSkeleton () { + skeleton.Update(Time.deltaTime * timeScale); + skeleton.UpdateWorldTransform(); + } + + public virtual void Update () { + SkeletonData skeletonData = skeletonDataAsset.GetSkeletonData(false); + // Clear fields if missing information to render. + if (skeletonDataAsset == null || skeletonData == null) { + Clear(); + return; + } + + // Initialize fields. + if (skeleton == null || skeleton.Data != skeletonData) + Initialize(); + + UpdateSkeleton(); + + // 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, false); + + // Set materials. + if (submeshMaterials.Count == sharedMaterials.Length) + submeshMaterials.CopyTo(sharedMaterials); + else + sharedMaterials = submeshMaterials.ToArray(); + renderer.sharedMaterials = sharedMaterials; + + // Ensure mesh data is the right size. + Mesh mesh = this.mesh; + 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]; + mesh.Clear(); + } else { + // Too many vertices, zero the extra. + Vector3 zero = new Vector3(0, 0, 0); + 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(); + 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.ComputeVertices(skeleton.X, skeleton.Y, slot.Bone, vertexPositions); + + vertices[vertexIndex] = new Vector3(vertexPositions[RegionAttachment.X1], vertexPositions[RegionAttachment.Y1], 0); + vertices[vertexIndex + 1] = new Vector3(vertexPositions[RegionAttachment.X4], vertexPositions[RegionAttachment.Y4], 0); + vertices[vertexIndex + 2] = new Vector3(vertexPositions[RegionAttachment.X2], vertexPositions[RegionAttachment.Y2], 0); + vertices[vertexIndex + 3] = new Vector3(vertexPositions[RegionAttachment.X3], vertexPositions[RegionAttachment.Y3], 0); + + color.a = (byte)(skeleton.A * slot.A * 255); + color.r = (byte)(skeleton.R * slot.R * color.a); + color.g = (byte)(skeleton.G * slot.G * color.a); + color.b = (byte)(skeleton.B * slot.B * color.a); + 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; + mesh.subMeshCount = submeshMaterials.Count; + for (int i = 0; i < mesh.subMeshCount; ++i) + mesh.SetTriangles(submeshIndexes[i], i); + } + + /** Adds a material. Adds submesh indexes if existing indexes aren't sufficient. */ + private void addSubmesh (Material material, int endQuadCount, int submeshQuadCount, bool exact) { + int submeshIndex = submeshMaterials.Count; + submeshMaterials.Add(material); + + // Return if the existing submesh is big enough. + int indexCount = submeshQuadCount * 6; + if (submeshIndexes.Count > submeshIndex) { + if (exact) { + if (submeshIndexes[submeshIndex].Length == indexCount) + return; + } else { + if (submeshIndexes[submeshIndex].Length >= indexCount) + return; + } + } else + submeshIndexes.Add(null); + + int vertexIndex = (endQuadCount - submeshQuadCount) * 4; + int[] indexes = new int[indexCount]; + 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; + } + submeshIndexes[submeshIndex] = indexes; + } + + public virtual void OnEnable () { + Update(); + } + +#if UNITY_EDITOR + public virtual void OnDisable () { + Clear(); + } +#endif + + public virtual void Reset () { + Update(); + } + +#if UNITY_EDITOR + void OnDrawGizmos() { + 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 +} diff --git a/spine-tk2d/Assets/Spine/SkeletonComponent.cs.meta b/spine-tk2d/Assets/Spine/SkeletonComponent.cs.meta new file mode 100644 index 000000000..c765d154a --- /dev/null +++ b/spine-tk2d/Assets/Spine/SkeletonComponent.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9da572b571dc33444bd6622951ef62ba +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/spine-tk2d/Assets/Spine/SkeletonDataAsset.cs b/spine-tk2d/Assets/Spine/SkeletonDataAsset.cs new file mode 100644 index 000000000..e0a6b8caa --- /dev/null +++ b/spine-tk2d/Assets/Spine/SkeletonDataAsset.cs @@ -0,0 +1,90 @@ +/******************************************************************************* + * Copyright (c) 2013, Esoteric Software + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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 UnityEngine; +using Spine; + +public class SkeletonDataAsset : ScriptableObject { + public tk2dSpriteCollectionData spriteCollection; + public TextAsset skeletonJSON; + public float scale = 1; + public String[] fromAnimation; + public String[] toAnimation; + public float[] duration; + private SkeletonData skeletonData; + private AnimationStateData stateData; + + public void Clear () { + skeletonData = null; + stateData = null; + } + + public SkeletonData GetSkeletonData (bool quiet) { + if (spriteCollection == null) { + if (!quiet) + Debug.LogWarning("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); + Clear(); + return null; + } + + if (skeletonData != null) + return skeletonData; + + 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); + 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; + stateData.SetMix(fromAnimation[i], toAnimation[i], duration[i]); + } + + return skeletonData; + } + + public AnimationStateData GetAnimationStateData () { + if (stateData != null) + return stateData; + GetSkeletonData(false); + return stateData; + } +} diff --git a/spine-tk2d/Assets/Spine/SkeletonDataAsset.cs.meta b/spine-tk2d/Assets/Spine/SkeletonDataAsset.cs.meta new file mode 100644 index 000000000..1760b1a58 --- /dev/null +++ b/spine-tk2d/Assets/Spine/SkeletonDataAsset.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1bdfe79e336474848808de1467defd7f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/spine-tk2d/Code/tk2dSpineAttachmentLoader.cs b/spine-tk2d/Assets/Spine/SpriteCollectionAttachmentLoader.cs similarity index 65% rename from spine-tk2d/Code/tk2dSpineAttachmentLoader.cs rename to spine-tk2d/Assets/Spine/SpriteCollectionAttachmentLoader.cs index e0ce36c76..31ca3107d 100644 --- a/spine-tk2d/Code/tk2dSpineAttachmentLoader.cs +++ b/spine-tk2d/Assets/Spine/SpriteCollectionAttachmentLoader.cs @@ -4,26 +4,32 @@ using Spine; // TODO: handle TPackerCW flip mode (probably not swap uv horizontaly) -public class tk2dSpineAttachmentLoader : AttachmentLoader { +public class SpriteCollectionAttachmentLoader : AttachmentLoader { private tk2dSpriteCollectionData sprites; - public tk2dSpineAttachmentLoader(tk2dSpriteCollectionData sprites) { - if (sprites == null) throw new ArgumentNullException("sprites cannot be null."); + public SpriteCollectionAttachmentLoader (tk2dSpriteCollectionData sprites) { + if (sprites == null) + throw new ArgumentNullException("sprites cannot be null."); this.sprites = sprites; } - public Attachment NewAttachment(Skin skin, AttachmentType type, String name) { - if (type != AttachmentType.region) throw new Exception("Unknown attachment type: " + type); + public Attachment NewAttachment (Skin skin, AttachmentType type, String name) { + if (type != AttachmentType.region) + throw new Exception("Unknown attachment type: " + type); // Strip folder names. int index = name.LastIndexOfAny(new char[] {'/', '\\'}); - if (index != -1) name = name.Substring(index + 1); + if (index != -1) + name = name.Substring(index + 1); tk2dSpriteDefinition def = sprites.GetSpriteDefinition(name); - if (def == null) throw new Exception("Sprite not found in atlas: " + name + " (" + type + ")"); - if (def.complexGeometry) throw new NotImplementedException("Complex geometry is not supported: " + name + " (" + type + ")"); - if (def.flipped == tk2dSpriteDefinition.FlipMode.TPackerCW) throw new NotImplementedException("Only 2D Toolkit atlases are supported: " + name + " (" + type + ")"); + if (def == null) + throw new Exception("Sprite not found in atlas: " + name + " (" + type + ")"); + if (def.complexGeometry) + throw new NotImplementedException("Complex geometry is not supported: " + name + " (" + type + ")"); + if (def.flipped == tk2dSpriteDefinition.FlipMode.TPackerCW) + throw new NotImplementedException("Only 2D Toolkit atlases are supported: " + name + " (" + type + ")"); RegionAttachment attachment = new RegionAttachment(name); @@ -62,6 +68,8 @@ public class tk2dSpineAttachmentLoader : AttachmentLoader { float y1 = def.boundsData[0].y - def.boundsData[1].y / 2; attachment.RegionOffsetY = (int)((y1 - y0) / def.texelSize.y); + attachment.RendererObject = def.material; + return attachment; } } diff --git a/spine-tk2d/Assets/Spine/SpriteCollectionAttachmentLoader.cs.meta b/spine-tk2d/Assets/Spine/SpriteCollectionAttachmentLoader.cs.meta new file mode 100644 index 000000000..6cc8612ae --- /dev/null +++ b/spine-tk2d/Assets/Spine/SpriteCollectionAttachmentLoader.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2ad5a031e905ab0469fe2e19ff1b94ee +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/spine-tk2d/Assets/Spine/spine-csharp.meta b/spine-tk2d/Assets/Spine/spine-csharp.meta new file mode 100644 index 000000000..ef59cc982 --- /dev/null +++ b/spine-tk2d/Assets/Spine/spine-csharp.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: afc6035066a4eb4478f706aa211ca644 +folderAsset: yes +DefaultImporter: + userData: diff --git a/spine-tk2d/Assets/examples.meta b/spine-tk2d/Assets/examples.meta new file mode 100644 index 000000000..914d7a476 --- /dev/null +++ b/spine-tk2d/Assets/examples.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: ddc30294e8bdeb0469c854ccf66824fc +folderAsset: yes +DefaultImporter: + userData: diff --git a/spine-tk2d/Assets/examples/spineboy.meta b/spine-tk2d/Assets/examples/spineboy.meta new file mode 100644 index 000000000..b24e382b6 --- /dev/null +++ b/spine-tk2d/Assets/examples/spineboy.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: aafe437f17003ec449c178c2c329d221 +folderAsset: yes +DefaultImporter: + userData: diff --git a/spine-tk2d/Example/Spineboy/Skeleton/SpineboySkeletonAsset.asset b/spine-tk2d/Assets/examples/spineboy/Spineboy SkeletonData.asset similarity index 63% rename from spine-tk2d/Example/Spineboy/Skeleton/SpineboySkeletonAsset.asset rename to spine-tk2d/Assets/examples/spineboy/Spineboy SkeletonData.asset index a68094f07c6ff459a62d36aae426df7d56618c8b..c75e70e8edd7f172aeb4ebfe34ae81b55ce89e2e 100644 GIT binary patch delta 378 zcmbQDI7LyKfq^4}fk9vj0|NsmkOoo=3?_O;dIo7G8>NexC;wyOly*(YEXgl&&PgmT z_Do65E6GgDOf6#g4+J8U1(}r@MJJmANwJBA!jp5D`546~7D`N>%&f@eoS&1Enp~2Z zpEtRHC3A8xixQ*s%qTaxkzIK5Ulz&9O{@l!-Pt52pJL^i z+{4ZxSX@$+nU~Ixl30=mwoGZV1e-FW^5hjjQf2ZPHbq9&$?w>tCbP2%Om1d_=snGb zU9TosuNGLZHdwC?P_H_p?qo4`Wk$WpRzOl8{!QpfyH}%5RzKu>Bo?qX&&PtDe^KJGs?2}~#WTX{>vr}_YOY-wv SK#qq1CLrbTdF|w20Y?CnV|FP3 delta 331 zcmbQDI7LyKfr0%o1B1X61_lOBAPuA#7)XPu6Eq<1ThdEJbcJf9bDL45lkdz0BOkU5*Gg*UOf>9A@ zg(9O8*ve8iaYkjZdKIvGRgn70J!}SGl^S4`nqZY>>>`X>le^iK8MP;`2a-CIFS9E# z>Q4T~Zlad+NsoDX%2vnen}6Jm`?A-M8RRmC@YRh{1&IRA6F#ypdg&5YwmE>~4Ey8; mj?&380y5IU*{M0HCHZ-d#l@*5K-Ek@?C^OlNaN&S0Y?Cb&sG}% diff --git a/spine-tk2d/Example/Spineboy/Skeleton/SpineboySkeletonAsset.asset.meta b/spine-tk2d/Assets/examples/spineboy/Spineboy SkeletonData.asset.meta similarity index 100% rename from spine-tk2d/Example/Spineboy/Skeleton/SpineboySkeletonAsset.asset.meta rename to spine-tk2d/Assets/examples/spineboy/Spineboy SkeletonData.asset.meta diff --git a/spine-tk2d/Example/Scripts/tk2dSpineboy.cs b/spine-tk2d/Assets/examples/spineboy/Spineboy.cs similarity index 73% rename from spine-tk2d/Example/Scripts/tk2dSpineboy.cs rename to spine-tk2d/Assets/examples/spineboy/Spineboy.cs index 665e2b3c7..6892296a0 100644 --- a/spine-tk2d/Example/Scripts/tk2dSpineboy.cs +++ b/spine-tk2d/Assets/examples/spineboy/Spineboy.cs @@ -1,13 +1,11 @@ using UnityEngine; using System.Collections; -/* - */ -public class tk2dSpineboy : MonoBehaviour { - private tk2dSpineAnimation skeleton; +public class Spineboy : MonoBehaviour { + private SkeletonAnimation skeleton; void Start() { - skeleton = GetComponent(); + skeleton = GetComponent(); } void LateUpdate() { diff --git a/spine-tk2d/Example/Scripts/tk2dSpineboy.cs.meta b/spine-tk2d/Assets/examples/spineboy/Spineboy.cs.meta similarity index 100% rename from spine-tk2d/Example/Scripts/tk2dSpineboy.cs.meta rename to spine-tk2d/Assets/examples/spineboy/Spineboy.cs.meta diff --git a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data.meta b/spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data.meta similarity index 84% rename from spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data.meta rename to spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data.meta index 5b0fbfc64..ee99d1479 100644 --- a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data.meta +++ b/spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data.meta @@ -1,4 +1,5 @@ fileFormatVersion: 2 guid: ecf18700fc84ae94ca3cfa6d301b50c0 +folderAsset: yes DefaultImporter: userData: diff --git a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas.prefab b/spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/SpineboyAtlas.prefab similarity index 63% rename from spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas.prefab rename to spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/SpineboyAtlas.prefab index e1834654a83522f36b465972c6d8e91ed11adc0a..88ab821ebe9d9b4304e2c2900096fa3021241a7a 100644 GIT binary patch delta 1309 zcmX|=TW}L~6vp?MG`DV+O*fa_gf=Z}TS}!YA#Eu_EfxesnF1=Jq9omou7otCDHgnP z6@~#@kEn=X2fU8srSRs1(-$6m^1*S&7a1O$(Fb4jNoO4DKOZG|*qs0F`F-c?ch1gD z(XDApNmBP2N!ol%lBA%BXT-mh?aB05h3s@HOD(e_gC4$pPcXI7cB^BR;bLxle2eXr zs&2t`D$>08MLFUzDaLKhCdH=@Xk7FtyrDVD=R7Lu9BI_}nkPjDlUL&v2_OINF(@fc zgZ#7C;v2fo%?&ayZVd26Z=72An%AT>&qhr?EAD?8*Qt$L8ro

fd=$+L<{_wrwU zliG#4!94+)I@k)Psgp;-k;&q3+Ki@5 zL8>~FPI0Gu*pULlij~~on5GP5S3&T5zd~6E_Cm0)F4&J2RwH)+Ev%^#;nG-Tf37$V zukHuA7Ua4*ISBFrkV7EX3$l|QMD{SUHz3;x$+VF#x2EYKWN$+DW)U0wQOHMI(BoVv zKo5i63ic7fw$r0{mu)qUeX_!rg5j`RvfWYVPH!V1wu9Iq2#sYmOgj-JQuMo_B+_TbC}Ls zn9dZYGc7ba=xy+S#1h1)q{UP8PAzJ3OI0a9;TG+!&LIrwJQ8ju8bg~VTpOzILiIhU zz7N$4=xjc|m_ArAC`lI)?MbxLhseLg-{~e@UXWAyyl&M#bN*GAxvL>gS74o;(D{rW zqN`v&2J^{XhCapJ&rtbuRQ}?6(fCOfi!-$BM^?Lkx&B-CKdGe^&)IUT7+!YN?(6Nd l>|Wbhy)vK4TKRsb-yX<2x!fuzQ?R(a)(Xs=B#FeR{|9)2ZkPZ7 delta 1293 zcmX|BTWl0n7@j}Q?(EL)PG>uNuez1Bv~)|I#ch{Lr9}|DV46x{)9&fjG%cuUdG*k=V!PY!4wfbxigMGJn^)g}+jLuEm@yq(xBS?y$0d&M zqG=q{(~?lg!B=`-l9<?{OSv!H(|-mnD;G{ zEPBE@OsVx%Mhf4m=Vzvc*+5v9;A$`{IsBpiZ$;G1N)rlZ27mffveZ*aGh8DlEh;Nb z#WE^dsmN2&rm%zGjHE2b51}m18bxdh8hA2biA#?HJytAwU|qn*T+o&xT{`H}>E%X- zM@ILRpWd(ir+y`BS5n)xsFgdIzlzFkD(_UvW?4;k581tn-6U(!b4yn4B6BU7>l99- zH{_SQy|m!i_(IZpYBzXVEDc$>V1{uy6qb9v^T>U4xS#tQ8Xg$hU0G0Vr0M}C_Nhb% zpW6}HgsV;(|J0kf9FE9lM4e{oheVp?K{X2p-4RE&kUfzyus4#Bhd9%Ru_l?5t>k!< z+eWlA=7(<8%Oku2t(Gm@sqItf(JC^HZJMsG)Q-h>Oj~|=jBnp4-s42qt&BWDmvCJi zN39sH*mc&{%IJaGfp+phWgcjk5-kjTHwzzN2^H2j=v9I4x&VH%jo|u&102^=RPUjB zh>>0$dx@^tS@he7)zuE*eAFLaJ2E_8Ii!i&^$2hIxoA$FQOK2NxyQfjZT2_H{`RxK z1FDe>-m14`j8Wr^I#})7kwfG@NAB||tKMHA??v(sD_&lXkTXHfOVx(6@-j0KYm}p$ z#Vee}tF>9YMl>5YFcq`)zVf~bF2vrzwYY`;_z`$R+LMUL+q5~JNXiM!B--U9&;D~F zDw9MLsgSv0Y-pjbQ%nMrPS=v&sqV>->Ew-aMj57YEg6${Y5i}qN#3LGEWZF#Ra;x$ z=jsP^J6Ci2P@xQbsTA7Mrkp2dn#!4)@*}Q(Oywsv<)I*TvzKVE#Z z?XQNGufIRj->BwR>ey8-tSlGYQlZl=++K9M3WFtgMY*d|EOvHumN2tChTl6H1JkdI ICTi0E1M??=IRF3v diff --git a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas.prefab.meta b/spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/SpineboyAtlas.prefab.meta similarity index 58% rename from spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas.prefab.meta rename to spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/SpineboyAtlas.prefab.meta index 3d0e83bf9..9fdbd2eaa 100644 --- a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas.prefab.meta +++ b/spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/SpineboyAtlas.prefab.meta @@ -1,4 +1,4 @@ fileFormatVersion: 2 -guid: 75ba18a107160134091f702a9e446567 +guid: 4cd6560d5de81b240b7e7d9beaa3e2f0 NativeFormatImporter: userData: diff --git a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/atlas0 material.mat b/spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/atlas0 material.mat similarity index 98% rename from spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/atlas0 material.mat rename to spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/atlas0 material.mat index 5bf47f106d449b269aa33def3f688bfc90a487ce..32a5ab1524c3dc67303805f30be8b29c00368a86 100644 GIT binary patch delta 16 XcmaE&@I+yP7^{(4cV#EZzl-#LYrh zrFSoj_ZYQ~L$}0vS%5i+^9MaMI!+deiQBSk`9@?2qjK9ewU#|$f3YXDg@qStCoEq@ z#4LWKn49f{f!JtPUs#e_MAAqe-C+kS2xet=Nk&S86{|5D?|W#d{n+@x!yz^##Kwo# zREfSq#gytY?oHMEE!9!Rb-2^RqYmM_&I{_gTrXj~97|qy69(dPgI??cGXsA2V333{ zc{tWbg`ML~gkyb77)Y5D>D4{JnS=O!H%*Uq)a zCAUYkE0+oVvs#@>RxD~?f!b&>`~4KiQ;4`veLsc1EaRe}K-*_NqVO^;Gvn66HQtVO zW_U+GufdUEu@i|q4POK>^<6(e7{_0~({Rx9!$eTOx)Wap5WEwXOOdICG>HV5YIsnn zxQ6)P5Y#->3MZ#f`RE*~;XQV{bKXUA*u%LbLr3RG0C$g%&S)E@vLHK(10VH(NE?CM zom3jJ%6G)EnjKwh@3H-O!0rXQ({5)}oVc;Rsv+xm8uYglzhd7R*S1b8j43YR=HmKxbi!R}qR0Hqz+2zx{XC|4f22R5th@72v1es02L49 AivR!s literal 0 HcmV?d00001 diff --git a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/atlas1 material.mat.meta b/spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/atlas1 material.mat.meta similarity index 100% rename from spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/atlas1 material.mat.meta rename to spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/atlas1 material.mat.meta diff --git a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/atlas1.png b/spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/atlas1.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/atlas1.png rename to spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/atlas1.png diff --git a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/atlas1.png.meta b/spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/atlas1.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/atlas1.png.meta rename to spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/atlas1.png.meta index 67523de6a..8cd6a6ffb 100644 --- a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/atlas1.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/atlas1.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 1 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: -1 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/atlas2 material.mat b/spine-tk2d/Assets/examples/spineboy/SpineboyAtlas Data/atlas2 material.mat new file mode 100644 index 0000000000000000000000000000000000000000..fbfed7cb4745921606638d5ebd262c17fa1a8621 GIT binary patch literal 4196 zcmeHK&vO(-6z+f`5vV2glNoI)qln;mO+Ce_o1tf%<{ zIOmRM{{gGu=*bgR6bCMzyzw^}-uHTX(lgbYGlzXuv;Df?*YCal`gPB&5C@iocr6k_ zyi6@MLQGFKC#O2o;{WaK?J?@VNzWB&l#XRjT#}g*WY`80vKK$O5HC@4b1^aJo1(vb zZRJr3pX zX?rlA#JU*c{*sHi5ckyL4;+ef@^F|_;@Z-53mnpdIDgPNB^!Sy6N;g9Ld!=MF9Js5 zW+AK6yO+g2M(yCxEpc8JU=HH^LC=hilQm-Es_a|75gEd$+_o*PlwdY&5H{cBK}PG?GWh?O+ALtSoh9q%>Hu8nf|=hlV`^S)!j+^WWlp45_W)-O;v;S*u^F^=x~{YtEOnJKU_@@Hs2GfurQ|I; z*B+PL9?`yBC-e=qIiGA;)Y}DWx5d2Ur$C-U#2xkh6#BZ1i-H1e$9zQLWkF`ft%Ym6 z6YI?IjvlYUkzlbCi8~GN1~Bzqe~&PZzhS50gy)Bepni2HP6iOX6P8Pnsns-z1ej`g zP^h?u_}~!K{H7I7PNDMAdB2AD*zGTS7s&@6&LtT-Iv)mbzwps%c2Fv-vZpxkM;;Jq zBXFmeN+UM;j`+A{N7vd1Y(EvSdx5TXIvEuwZmiQaWIfVE&5o`g=}f?GOL+nL+Dbm_ zgYxjP{Dd&zj`<^u$8~uHd`fnR;~09ilFwm?#P_mGB~My(3CFa0C4Uyc)GK+a2#NW_ zD*1EIk6S>slA8g9<+`Y0ybjNMph6Xv@bA-Jsx9HuJ}9?z)N}rVFq|*2gb5M;C2S-v zU+7iBzrqj+BXa9y7s6*4yaUIyI^kajF!kiWA&g6Y7~$V~e%u18gkK0Cn8oWqUTV3E z1MjAb9#Dt|pE0{Ln)O-FK1OzkwXd=LJ05Wh@0gW#|jXKg$&ZHq?L9-$4aX+I7qFX-rYts)1#SQv5N^_ zK#1iOc8m;0#vHaW0R$KaP%w^dz~BHzB!CP_YzSb2u_1vNV@RyLU%l$?S3T9EFQ1%m z{fA56>~vNAs_Iv--g|XT%W+x`aGWJ4IgT^Jaa!>0oH~BO_>;O$b^fq*>(-qpPG4JR z2c=-D*W<4CgWifW)vbCe8E}LK{26eZQ|N19TPZwcf>T^Jcg6W$XV~iJy%`0!yXv4W z1=Qcsb9;MOIkP42he4&KFZ4=PKPXM6^6eF`%U#j#R=iTkbveVS=nnKjK=B6phj>TS z<_y2!wM|z|?FbNs2#4nw*Y1Wr8V6bk5~nC}`w0_j!>g3sf?}~V7m7<|vDhVrL)6A% zm<6X;%yf$$_a01=m|_8WAb@)_{mo)QW2-`hL&U~nSBAy)A&T*wNKLnt+!X~cukuC; zTthQQ;&JDpG{=3EETErN_n=rEofW?vqI>+Ly0)7rfyb<_?JjWW9)hiFdvKPbAK|KD z#V>VJyK_j$N})$f)PNRjrQ-HG&FU{~VNb%K2KC7q%&Pu{o>IQOC?6rh;kmQNtvGo% zbXDr!NTMJSF&`G;w1Qi$w&h9v{Vw0DD1u|S6c-!d;!G_exR0o|A!jGJudGKun*_&N z5aG%R`HphM54~wYp+MG6raIm0@=HFRoY3nFdn;a5G2Ks;cLwcD_a{s&0K$ktjzvlS zNd@4PX3*D6ujEzy&PHetixdNMpu%yDXz^%@Ymt_s0X`^&L9J=|9ZYEvtAv%PAMBGi;Bk|mh&0#{EkCt7e?>w;cV zx(;ewo3IkHn(?WO8W=92egi-=v2_xhZdxleGJ)~3!cF%AcXL2ufZ7h|}pj0CJ(ev8r5~roH zTA7zq4oGpB|7RqM+6B)v|A~|q^Cygr{~4)z5M^VY(8XR2otk8z8dXiwmOq=yM^xJK znU?&>4|TFvIZHxxw_zrEztdYtzMXAgvP6Ly1&LxCn8Fz>YJn=dY?8T*eDWI=w;j%o zJR;U)%^AQdtw4!4AX6<6?pjwRQr(Uo&kGfsX%cOydXHOWJy&4z9T>Uk7C5?FRr6nj z1dSGn6kQfbmf(zS16hbOEkN#=5>sb5-|NPN3!beKD+aHkAl$G{t{D`@aGPh#dPFZ6 zvselIoVu7+g_%_sqaE|?3{WR6E8smA^p|;v=U9NTjjRazuns|i*?vj+)42w|)>_(A z`G`tunPR(6{wF{nUhk7oh#rz3l6Azagn}Luy?~$Zb@5D>=UmkQ)ZI2P9$~gM zFkPv75Up7+#sk!yLW`j`7K=RsS8q+^TX2buDNo+PlZx=zEP(Sx(X36(O2Whf7_@6< zLDr*XUTax!c14M#+OU(X5tSY%<$+4F09BnOtw7-FNvmwZL6Jf_TB-7MvPwV{2a3lK zo=qwlkWz1P0V-0~QOy8}<$0I^iIx++mV7pOV?(ssfYok@E=c7gDs8?mGoLp^{g!;T zb7T80O5st#cd7K)zBRZp;Ws^SkH|yMxPRF)~h@KU_IsjDQI60-co)dE+~UtD9s)pc0ciURN+Sp=>VxOxQES#T_( zd~eyKnV2WY>jf+l62rO*ep#PeELB7IMGF+Rg##YiqOgL0NrE6)3fylf62v{7&iW=N z8@az`jB24?zrQSS_4<8-1!oeN?0D)}9YmC$UN4H&qwp1ht4HBR3l4%x9mCutV2TID zS@gYCZ)U~K`*g;shg1PNK5`T>E9=-5tezhl9%win%!+Z`QD3KkH=gQAq_ zxamYYkCSvIukTu5?2G!eqv(ikXZ}_~^`PphAfU4)2?v3PBwSk`Y9_Vo^zs^=tjr#k za9w*1TrANZ$-swvls+vemg!C||`zb}jE+HFQ(d*?*g#BPyI z|L{aj>*+I&Cnzmqm1X)*ih3ej zGfn@;76gx|?c(Vvfi|tn*ttAyfmvptpGes7+8O8{Qu&C=8R(hJe4c@xwdB{V547PZ z7xtV{AlrrgRNx}9+FaQ4794vS2N!?EID)S$=f#N;XKUq*L zmduN%7gI&DeEUlRS5Gi6TX0(ItQSvP1m4uU%!{X=S&Eq6VH+1uugD5AJj1JmiEJ>- zGyJoxr>6fyRZXm*eagT8TPhz>Y0Ga|@*_W_FP`3%5Z!HG%i5bm1o;^|ist$WF6>&4T%7C5>q4kz_3%C99-2u2{;i~MHW zKo;VA79dlty?ALpP7{O3pJpE@~3|~BbP#41&PaoFBXp#L_2B>EL@mmWp zwh_z4(??j-%12aM%g2^{YkT_Q>Gvr->|9#sC#ifyWqY4m@-v;OyxNc#Pya0| z8MHg3{~=85kO*UQNPm#^Xf?4fwYEy6u8kGcbf~IH-EuU&)H>7#5Q|XME~4p0*$$K# z^Cygr|Bk78P-i@N`RMdzCj(WhB0Hz@QHvb1T`c)<403enxJx>;rkIyRaxfGKE(j_sMM2P4YTi`o-s zjeDiQSrXb?;Oa?ej0LC7N$vY03f$#=1RASfMAK%qFC`*fK{L8MR%Irbx?SEc1Trv6(7-?IIZ752tClXmKs&hEL7opU zj+QXZ8r{2~;+A93F&0oPuZlXPh|h;QyfCE8F+S%QCkq-5x9FFPZdv};`dAAVOx%)R z4Q6?(y@GQ1$4QtW=5kMe)$goM_saU}@OTT9Y1WNIyJhnN_f z7lilc_b#HhKX!p+D5x<}f9Vila__S5?c(9Y2UrXQoDQSsWvo)R^nNv2-A*o!bA zuRb}umF-RW2oVm?rj?CB5(SCShF@H^!0qnfS3)q}`!G^LVPq(h9`AicRSh{isj-AX zkWHGT_G5s7P(vvu{o=AV8cQ{lxHv>Wg$P+gc>re{)!K&gKnpG&$~o?8{8&91(Sz!t zJ3^WZI{EdLGvWw z$<*587xMIGXU(f(Su-n~9$LaDYi5-WFPd4|k46qeY@VdoOI2u0h|=FhmD;?hbaD|c z-8fZDFP_rWh_!_2?Tod8LEuorB5?1Ow5>C8qe7XucW6-gJ=WTnb}?;WUc*x9|L!`~ z%el1Xr&kj@*(8h0j3}m1)dW?qs8dr=v09nL?w#NDRl)%hfjgZ&$6&&9_|F?oP1}ISPz0+^#=|}n{y6A!qNMDLR zWQ~;csZn2TBPD%ngp1XAzE`C84D<0mfK@uZ$V9R9fJrBtq8SgEbh1&?M*rjEDd}NT zwHfLuJ#18?t<%!OMmW{7cvD~fZvool)jHX1!JAH&L_@*Gp;6@|YK^GkV6K+t(|a08 zic*2YQYEug;P4alPvTEa(3z4fBA&v|d& zjkzn=U9#dk_ndSXyZ+G^KR&7J*AKQlx>Mh$(>7LzbLyVU7msRsVNCP-Prm;0H6M+; znNyqZdur5-DP6N3+I8Zyk9@djkWu>nshj*UaH<44{TrR}DMn^-DJ$w+E-r zXnJq{FR!Rhz2lbk_q}`jrzdmj+AltO+nOzJ&Rl!evy-0jrY+>urNiD@bo|F-r(Su} z(*6UlxO^U``iowC_#Sy~Z|uId|iT^FCVl+`QK~_1(+g zD>t{^G5sO`o9ouEyX**^diC*}mLGcc*^iF@{lk;mW_EDuHFM@&HUE{{XI$@H=M>He zd`{hPR(R~@jn%2^N8SDW33r~p1E=1*WXrOzy?sK)CZ*S@yTe!n?k#!X`v{c6kBo7QpavL{|Y|DB~@IA`tJ(ZS^Ku3L2K zVt2{rkx$H7J9y?NtxrC72&V?;-!Q6U<5RQm`EGvY+?U>cgHwO8a`$5|9dlaqL(Q*_ zySa1EA93mvMQ`&<*F7-x{C-mw1FhGVyI>Mn;2 zv|au1D{UK}KIOcDQ48PX)T4HtwdtLox3%59e#1QrKC@;Lr}|6Qe*EG^PtV#g{M^s} zw@pZ?&guX5_Rr3XB=eBxuXZoB=-7kXZOW<94WBE}ym zHEM^_BfuD->SVlbo~DqEG*Ga<>*I`3MBqSh9#1e@gN=wSSnD4YJ>g^L|O8A zw+C{_$DD>0O~LC5o7~b$`dz08NxNugVAF9bk2&O;DTO}vkh3RmcPco`fYpxT-dm>i zT~op9mbnRk=#t4F+;^HP(egPbBY(u_G=Ipl$D`M@&K;|E=1#xl ztx@)bKlVr_|EIxy$n^&LO#ko0O8U|v;f!UY$r<{xe8^=EUhEs`ZHG7{ykQG}ioCIZ zQ@qP=DQsF1g!JEv#Ps92YG4ZN!Q_8G$^4`tmplAA>w2{(=q=EHHjuC<#_@cMUAD=8 zGjUh?E(^rZx%lai`_Pc84!oFudQwfeW9M&j$DBI!eg@pVey`fpSqQ4eQYqn%^_9sT z_S#M#d&t?7w>vd0cN|Hu+^vdFxk(?OV`d*7A^xL>ybtl3#^&Y)f6NCa{~v(+ko);$ zj!iER64}E)ncT4+!^a+S_T=qOZAjICbqoE+Ue&-zPk2MWOy0vu-V=vh=2)|oy~1k0 zDv2k&=?oyn`(u(d^xYnE_T=qOP0Jf=0{EJw;)FA9R!mv{Y516A9fmbzlb<&>O$mS8 z^_cuIH!UA>nZtLhwSjGF75)Y1rzU^MAAPWgoIQEFQyWq>V9llHR=Fsn)I|0;(>1v_ z67TzmoO_}>whe2-ANz8XKe&$?az7LA{nFbfA$uHpo7^!cm4{sRIB3WDPy>A<;7kAq z>y0BD9UPnE8^_}KMjnp7(GT1i;u{C2QNMDkk`t##)$?=DK6@6P5pW>O U`2$l>H-f}-iuqTa6A|ct0X+s{4gdfE literal 0 HcmV?d00001 diff --git a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas.prefab.meta b/spine-tk2d/Assets/examples/spineboy/SpineboyAtlas.prefab.meta similarity index 100% rename from spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas.prefab.meta rename to spine-tk2d/Assets/examples/spineboy/SpineboyAtlas.prefab.meta diff --git a/spine-tk2d/Assets/examples/spineboy/images.meta b/spine-tk2d/Assets/examples/spineboy/images.meta new file mode 100644 index 000000000..98831c7f8 --- /dev/null +++ b/spine-tk2d/Assets/examples/spineboy/images.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 59b6b8248068c5c48a322d8b794e27ba +folderAsset: yes +DefaultImporter: + userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/eyes-closed.png b/spine-tk2d/Assets/examples/spineboy/images/eyes-closed.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/eyes-closed.png rename to spine-tk2d/Assets/examples/spineboy/images/eyes-closed.png diff --git a/spine-tk2d/Example/Spineboy/Textures/eyes-closed.png.meta b/spine-tk2d/Assets/examples/spineboy/images/eyes-closed.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/eyes-closed.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/eyes-closed.png.meta index fd4fca291..6fe8f3bce 100644 --- a/spine-tk2d/Example/Spineboy/Textures/eyes-closed.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/eyes-closed.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/eyes.png b/spine-tk2d/Assets/examples/spineboy/images/eyes.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/eyes.png rename to spine-tk2d/Assets/examples/spineboy/images/eyes.png diff --git a/spine-tk2d/Example/Spineboy/Textures/eyes.png.meta b/spine-tk2d/Assets/examples/spineboy/images/eyes.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/eyes.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/eyes.png.meta index 3dde41aef..bb4ede519 100644 --- a/spine-tk2d/Example/Spineboy/Textures/eyes.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/eyes.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/head.png b/spine-tk2d/Assets/examples/spineboy/images/head.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/head.png rename to spine-tk2d/Assets/examples/spineboy/images/head.png diff --git a/spine-tk2d/Example/Spineboy/Textures/head.png.meta b/spine-tk2d/Assets/examples/spineboy/images/head.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/head.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/head.png.meta index 386aa883b..fc217a743 100644 --- a/spine-tk2d/Example/Spineboy/Textures/head.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/head.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/left-ankle.png b/spine-tk2d/Assets/examples/spineboy/images/left-ankle.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/left-ankle.png rename to spine-tk2d/Assets/examples/spineboy/images/left-ankle.png diff --git a/spine-tk2d/Example/Spineboy/Textures/left-ankle.png.meta b/spine-tk2d/Assets/examples/spineboy/images/left-ankle.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/left-ankle.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/left-ankle.png.meta index 264ef901c..997e1ba1e 100644 --- a/spine-tk2d/Example/Spineboy/Textures/left-ankle.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/left-ankle.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/left-arm.png b/spine-tk2d/Assets/examples/spineboy/images/left-arm.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/left-arm.png rename to spine-tk2d/Assets/examples/spineboy/images/left-arm.png diff --git a/spine-tk2d/Example/Spineboy/Textures/left-arm.png.meta b/spine-tk2d/Assets/examples/spineboy/images/left-arm.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/left-arm.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/left-arm.png.meta index 37f6ce2dd..daf5a1618 100644 --- a/spine-tk2d/Example/Spineboy/Textures/left-arm.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/left-arm.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/left-foot.png b/spine-tk2d/Assets/examples/spineboy/images/left-foot.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/left-foot.png rename to spine-tk2d/Assets/examples/spineboy/images/left-foot.png diff --git a/spine-tk2d/Example/Spineboy/Textures/left-foot.png.meta b/spine-tk2d/Assets/examples/spineboy/images/left-foot.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/left-foot.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/left-foot.png.meta index fb200da05..5777f4539 100644 --- a/spine-tk2d/Example/Spineboy/Textures/left-foot.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/left-foot.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/left-hand.png b/spine-tk2d/Assets/examples/spineboy/images/left-hand.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/left-hand.png rename to spine-tk2d/Assets/examples/spineboy/images/left-hand.png diff --git a/spine-tk2d/Example/Spineboy/Textures/left-hand.png.meta b/spine-tk2d/Assets/examples/spineboy/images/left-hand.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/left-hand.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/left-hand.png.meta index 33c2f709d..aaf18d5ce 100644 --- a/spine-tk2d/Example/Spineboy/Textures/left-hand.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/left-hand.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/left-lower-leg.png b/spine-tk2d/Assets/examples/spineboy/images/left-lower-leg.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/left-lower-leg.png rename to spine-tk2d/Assets/examples/spineboy/images/left-lower-leg.png diff --git a/spine-tk2d/Example/Spineboy/Textures/left-lower-leg.png.meta b/spine-tk2d/Assets/examples/spineboy/images/left-lower-leg.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/left-lower-leg.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/left-lower-leg.png.meta index 5c2c1e598..7eab399c5 100644 --- a/spine-tk2d/Example/Spineboy/Textures/left-lower-leg.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/left-lower-leg.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/left-pant-bottom.png b/spine-tk2d/Assets/examples/spineboy/images/left-pant-bottom.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/left-pant-bottom.png rename to spine-tk2d/Assets/examples/spineboy/images/left-pant-bottom.png diff --git a/spine-tk2d/Example/Spineboy/Textures/left-pant-bottom.png.meta b/spine-tk2d/Assets/examples/spineboy/images/left-pant-bottom.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/left-pant-bottom.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/left-pant-bottom.png.meta index 857b0f522..c29d1470e 100644 --- a/spine-tk2d/Example/Spineboy/Textures/left-pant-bottom.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/left-pant-bottom.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/left-shoulder.png b/spine-tk2d/Assets/examples/spineboy/images/left-shoulder.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/left-shoulder.png rename to spine-tk2d/Assets/examples/spineboy/images/left-shoulder.png diff --git a/spine-tk2d/Example/Spineboy/Textures/left-shoulder.png.meta b/spine-tk2d/Assets/examples/spineboy/images/left-shoulder.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/left-shoulder.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/left-shoulder.png.meta index c79eb6af8..cbb3f185c 100644 --- a/spine-tk2d/Example/Spineboy/Textures/left-shoulder.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/left-shoulder.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/left-upper-leg.png b/spine-tk2d/Assets/examples/spineboy/images/left-upper-leg.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/left-upper-leg.png rename to spine-tk2d/Assets/examples/spineboy/images/left-upper-leg.png diff --git a/spine-tk2d/Example/Spineboy/Textures/left-upper-leg.png.meta b/spine-tk2d/Assets/examples/spineboy/images/left-upper-leg.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/left-upper-leg.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/left-upper-leg.png.meta index 0bee98bfb..ec84d7195 100644 --- a/spine-tk2d/Example/Spineboy/Textures/left-upper-leg.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/left-upper-leg.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/neck.png b/spine-tk2d/Assets/examples/spineboy/images/neck.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/neck.png rename to spine-tk2d/Assets/examples/spineboy/images/neck.png diff --git a/spine-tk2d/Example/Spineboy/Textures/neck.png.meta b/spine-tk2d/Assets/examples/spineboy/images/neck.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/neck.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/neck.png.meta index b8d3e0cc8..125bb4f3b 100644 --- a/spine-tk2d/Example/Spineboy/Textures/neck.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/neck.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/pelvis.png b/spine-tk2d/Assets/examples/spineboy/images/pelvis.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/pelvis.png rename to spine-tk2d/Assets/examples/spineboy/images/pelvis.png diff --git a/spine-tk2d/Example/Spineboy/Textures/pelvis.png.meta b/spine-tk2d/Assets/examples/spineboy/images/pelvis.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/pelvis.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/pelvis.png.meta index f4266bf70..7982626cf 100644 --- a/spine-tk2d/Example/Spineboy/Textures/pelvis.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/pelvis.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/right-ankle.png b/spine-tk2d/Assets/examples/spineboy/images/right-ankle.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/right-ankle.png rename to spine-tk2d/Assets/examples/spineboy/images/right-ankle.png diff --git a/spine-tk2d/Example/Spineboy/Textures/right-ankle.png.meta b/spine-tk2d/Assets/examples/spineboy/images/right-ankle.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/right-ankle.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/right-ankle.png.meta index 4c1577599..f13270b26 100644 --- a/spine-tk2d/Example/Spineboy/Textures/right-ankle.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/right-ankle.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/right-arm.png b/spine-tk2d/Assets/examples/spineboy/images/right-arm.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/right-arm.png rename to spine-tk2d/Assets/examples/spineboy/images/right-arm.png diff --git a/spine-tk2d/Example/Spineboy/Textures/right-arm.png.meta b/spine-tk2d/Assets/examples/spineboy/images/right-arm.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/right-arm.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/right-arm.png.meta index 21ba8fb96..034b7f943 100644 --- a/spine-tk2d/Example/Spineboy/Textures/right-arm.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/right-arm.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/right-foot-idle.png b/spine-tk2d/Assets/examples/spineboy/images/right-foot-idle.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/right-foot-idle.png rename to spine-tk2d/Assets/examples/spineboy/images/right-foot-idle.png diff --git a/spine-tk2d/Example/Spineboy/Textures/right-foot-idle.png.meta b/spine-tk2d/Assets/examples/spineboy/images/right-foot-idle.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/right-foot-idle.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/right-foot-idle.png.meta index 0ee303589..c45fc8585 100644 --- a/spine-tk2d/Example/Spineboy/Textures/right-foot-idle.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/right-foot-idle.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/right-foot.png b/spine-tk2d/Assets/examples/spineboy/images/right-foot.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/right-foot.png rename to spine-tk2d/Assets/examples/spineboy/images/right-foot.png diff --git a/spine-tk2d/Example/Spineboy/Textures/right-foot.png.meta b/spine-tk2d/Assets/examples/spineboy/images/right-foot.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/right-foot.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/right-foot.png.meta index d07b7a3b8..666b78ed2 100644 --- a/spine-tk2d/Example/Spineboy/Textures/right-foot.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/right-foot.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/right-hand.png b/spine-tk2d/Assets/examples/spineboy/images/right-hand.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/right-hand.png rename to spine-tk2d/Assets/examples/spineboy/images/right-hand.png diff --git a/spine-tk2d/Example/Spineboy/Textures/right-hand.png.meta b/spine-tk2d/Assets/examples/spineboy/images/right-hand.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/right-hand.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/right-hand.png.meta index 67a5d6113..e8667eeec 100644 --- a/spine-tk2d/Example/Spineboy/Textures/right-hand.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/right-hand.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/right-lower-leg.png b/spine-tk2d/Assets/examples/spineboy/images/right-lower-leg.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/right-lower-leg.png rename to spine-tk2d/Assets/examples/spineboy/images/right-lower-leg.png diff --git a/spine-tk2d/Example/Spineboy/Textures/right-lower-leg.png.meta b/spine-tk2d/Assets/examples/spineboy/images/right-lower-leg.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/right-lower-leg.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/right-lower-leg.png.meta index 53b1a4222..359d35322 100644 --- a/spine-tk2d/Example/Spineboy/Textures/right-lower-leg.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/right-lower-leg.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/right-pant-bottom.png b/spine-tk2d/Assets/examples/spineboy/images/right-pant-bottom.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/right-pant-bottom.png rename to spine-tk2d/Assets/examples/spineboy/images/right-pant-bottom.png diff --git a/spine-tk2d/Example/Spineboy/Textures/right-pant-bottom.png.meta b/spine-tk2d/Assets/examples/spineboy/images/right-pant-bottom.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/right-pant-bottom.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/right-pant-bottom.png.meta index f0e6675ab..d1c6972b5 100644 --- a/spine-tk2d/Example/Spineboy/Textures/right-pant-bottom.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/right-pant-bottom.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/right-shoulder.png b/spine-tk2d/Assets/examples/spineboy/images/right-shoulder.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/right-shoulder.png rename to spine-tk2d/Assets/examples/spineboy/images/right-shoulder.png diff --git a/spine-tk2d/Example/Spineboy/Textures/right-shoulder.png.meta b/spine-tk2d/Assets/examples/spineboy/images/right-shoulder.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/right-shoulder.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/right-shoulder.png.meta index b089841b3..1fae0cd0d 100644 --- a/spine-tk2d/Example/Spineboy/Textures/right-shoulder.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/right-shoulder.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/right-upper-leg.png b/spine-tk2d/Assets/examples/spineboy/images/right-upper-leg.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/right-upper-leg.png rename to spine-tk2d/Assets/examples/spineboy/images/right-upper-leg.png diff --git a/spine-tk2d/Example/Spineboy/Textures/right-upper-leg.png.meta b/spine-tk2d/Assets/examples/spineboy/images/right-upper-leg.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/right-upper-leg.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/right-upper-leg.png.meta index aa2e90a94..55d66cb72 100644 --- a/spine-tk2d/Example/Spineboy/Textures/right-upper-leg.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/right-upper-leg.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Textures/torso.png b/spine-tk2d/Assets/examples/spineboy/images/torso.png similarity index 100% rename from spine-tk2d/Example/Spineboy/Textures/torso.png rename to spine-tk2d/Assets/examples/spineboy/images/torso.png diff --git a/spine-tk2d/Example/Spineboy/Textures/torso.png.meta b/spine-tk2d/Assets/examples/spineboy/images/torso.png.meta similarity index 96% rename from spine-tk2d/Example/Spineboy/Textures/torso.png.meta rename to spine-tk2d/Assets/examples/spineboy/images/torso.png.meta index 7aa019960..d36b4ff99 100644 --- a/spine-tk2d/Example/Spineboy/Textures/torso.png.meta +++ b/spine-tk2d/Assets/examples/spineboy/images/torso.png.meta @@ -30,6 +30,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 + alphaIsTransparency: 0 textureType: 5 buildTargetSettings: [] userData: diff --git a/spine-tk2d/Example/Spineboy/Skeleton/Spineboy.json.txt b/spine-tk2d/Assets/examples/spineboy/spineboy.json.txt similarity index 100% rename from spine-tk2d/Example/Spineboy/Skeleton/Spineboy.json.txt rename to spine-tk2d/Assets/examples/spineboy/spineboy.json.txt diff --git a/spine-tk2d/Example/Spineboy/Skeleton/Spineboy.json.txt.meta b/spine-tk2d/Assets/examples/spineboy/spineboy.json.txt.meta similarity index 100% rename from spine-tk2d/Example/Spineboy/Skeleton/Spineboy.json.txt.meta rename to spine-tk2d/Assets/examples/spineboy/spineboy.json.txt.meta diff --git a/spine-tk2d/Example/Example.unity b/spine-tk2d/Assets/examples/spineboy/spineboy.unity similarity index 75% rename from spine-tk2d/Example/Example.unity rename to spine-tk2d/Assets/examples/spineboy/spineboy.unity index bc7e18b13510145ff3cc055ed78ee54a274620fc..eaedafe36b08096a8f3e52b4b3a479c9daed78d2 100644 GIT binary patch delta 1198 zcmbVKO-vI}5PnO4mRedwYG`P&tu3KK(i8)+CYmmkB1_bizmpKGvfzg87TfwmA^|QW zL`hl(h&MSKjG881NRY&<2M@+@FwukYrucL5V5l?Og^=jUN#?z8zBg~){JfnNE??k$ zjKzYC_2e027Q_PXtSxjp6drG5d!h)jlmCFo+@~3cEYIDR+!;otJ==h6>iqT3g1!`-ETQ~777+OExlYrYV`kNIk^Dv z{3*@}t$Y($+ikGK^Pun!t{&$3T6Z>=k<|$%t8z|GDg%?UdO4Yrv=m+7wE8(WoWr$& zoZ+3>&Yd9CH?E|UIhK=C(!lkkA~7TOz(b8d;b^I(g|Q(~%|+O)tkj{(sbo%0m&22b zm(Ec%cM*Oa@o+xv#gp2L{(~0-8d|kh+Z)R_^ee>=*6kM4Md`Mr6d#?bv2w@YdFRAz z{{2EAj6s+5*c88j+%|$i#MJ!^?#swID;NtP_UQ`93CKM}yH3{?V-zpqK3#W_OX%D^GpK zXp??NE{|Lau|wA%$T8D?g06CgW;|q$R%ld5c7=^#^QTKy%NDrOH3K8@n&RiK5I0ON z7)lc=l5!@YLa2BWYKX54wT4llB-GG-OwAyUMxLFLRq0xK8ibz6S(*eDOhWs|>8Bc| z1slqQpHFmqE=uQ=%$=k%$w5clW2D;zAQ3n5dMNOS$9>pN=Cyh?ciR85;k?)co$-2D z6YJe{Q-4L@=As0)Hx&V1i*2^US(?Gt>&FKx1Bb71nB2yV=2-va%NS#G(RKR+!5wUm zK{)Odu<-|7q)E_JNN7?tF%p_2O_YQtO;abKp8$j1gC_bWRJH40$VjK~yE|fhG1?!4 a$c3<%m~x2ywOrKQ`ABS`H~I?Rh|WLlpc>r( delta 1038 zcmZvaO-NKx6vywKdDF}&6Jt5fnBhE8(-NkK+33P_bUyrmV#<;hZ3cXnsWT!25*Qk^ z$VyU9K~YevHYPEM(8orog$pbDShR2u(f)ve|4A*W08ihomDDZ?R^oE?UW5W-F*l57zhf zj0_}o3ONqSVsh8lNDo!i)R6Cpi;g+%bXcjAg_(HNO0S)JxZ|s%lGg1mDs_74w-r4e zDpOo^yr87khkaQRpDuia=pRZY(jt)@7*3=IQpuhXUGJk!U+KbF!Hc?uV6doA?xoJQ z^Ap!BPf{AsoZ?AX05QdEiIX_ziW%3Lxh+Brb6sr44Q7+fRIX2&ag*62lbvIRn8tc0 z8|NCa68x23w}=Tb&qaRYHwY(pokgk2CUgdGrUf(;Ptfqf7x zrG}2vD()qR^54nUalZ^dTRaf{*8kuY#bcU+Cfe+1Qr14TN2s<_vw=v;gv$FEN3IasAR$BgeVM5<`QMiei5M&MtmA|GMCR=*K+&VX1;1PW-eKw%LsdQqsey zht{GhZARVRUEHh|ssa~+(X3$)mBjYt7I4JM=~OJ>+PR~hrel@0AUrcCK5AEUdDyw} PJZym8u@=v0qmlmwK}`7> diff --git a/spine-tk2d/Example/Example.unity.meta b/spine-tk2d/Assets/examples/spineboy/spineboy.unity.meta similarity index 56% rename from spine-tk2d/Example/Example.unity.meta rename to spine-tk2d/Assets/examples/spineboy/spineboy.unity.meta index bd083a187..89cd16f65 100644 --- a/spine-tk2d/Example/Example.unity.meta +++ b/spine-tk2d/Assets/examples/spineboy/spineboy.unity.meta @@ -1,4 +1,4 @@ fileFormatVersion: 2 -guid: a6669a1e8d1cb5c45b165fe92714942b +guid: 3e1554ca46e91194fb8d9ead0b21f6f7 DefaultImporter: userData: diff --git a/spine-tk2d/Code/tk2dSpineAnimation.cs b/spine-tk2d/Code/tk2dSpineAnimation.cs deleted file mode 100644 index f0639c4c6..000000000 --- a/spine-tk2d/Code/tk2dSpineAnimation.cs +++ /dev/null @@ -1,44 +0,0 @@ -using UnityEngine; -using Spine; - -// TODO: add events in animation component - -[RequireComponent(typeof(tk2dSpineSkeleton))] -public class tk2dSpineAnimation : MonoBehaviour { - - public string animationName; - public bool loop; - public float animationSpeed = 1; - public Spine.AnimationState state; - - private tk2dSpineSkeleton cachedSpineSkeleton; - - void Start () { - cachedSpineSkeleton = GetComponent(); - state = new Spine.AnimationState(cachedSpineSkeleton.skeletonDataAsset.GetAnimationStateData()); - } - - void Update () { - UpdateAnimation(); - } - - private void UpdateAnimation() { - // Check if we need to stop current animation - if (state.Animation != null && animationName == null) { - state.ClearAnimation(); - } - - // Check for different animation name or animation end - else if (state.Animation == null || animationName != state.Animation.Name) { - Spine.Animation animation = cachedSpineSkeleton.skeleton.Data.FindAnimation(animationName); - if (animation != null) state.SetAnimation(animation,loop); - } - - state.Loop = loop; - - // Update animation - cachedSpineSkeleton.skeleton.Update(Time.deltaTime * animationSpeed); - state.Update(Time.deltaTime * animationSpeed); - state.Apply(cachedSpineSkeleton.skeleton); - } -} diff --git a/spine-tk2d/Code/tk2dSpineSkeleton.cs b/spine-tk2d/Code/tk2dSpineSkeleton.cs deleted file mode 100644 index fb016aded..000000000 --- a/spine-tk2d/Code/tk2dSpineSkeleton.cs +++ /dev/null @@ -1,237 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using Spine; - -[ExecuteInEditMode] -[RequireComponent(typeof(MeshFilter))] -[RequireComponent(typeof(MeshRenderer))] -public class tk2dSpineSkeleton : MonoBehaviour, tk2dRuntime.ISpriteCollectionForceBuild { - public tk2dSpineSkeletonDataAsset skeletonDataAsset; - public Skeleton skeleton; - - private Mesh mesh; - private Vector3[] vertices; - private Color32[] colors; - private Vector2[] uvs; - private int cachedQuadCount; - private float[] vertexPositions; - private List submeshMaterials = new List(); - private List submeshIndices = new List(); - - void Awake() { - vertexPositions = new float[8]; - submeshMaterials = new List(); - submeshIndices = new List(); - } - - void Start () { - Initialize(); - } - - void Update () { - SkeletonData skeletonData = skeletonDataAsset == null ? null : skeletonDataAsset.GetSkeletonData(); - if (skeletonData == null) { - Clear(); - return; - } - - if (skeleton == null || skeleton.Data != skeletonData) Initialize(); - - skeleton.UpdateWorldTransform(); - - UpdateCache(); - UpdateMesh(); - } - - private void Clear() { - GetComponent().mesh = null; - DestroyImmediate(mesh); - mesh = null; - - skeleton = null; - } - - private void Initialize() { - mesh = new Mesh(); - GetComponent().mesh = mesh; - mesh.name = "tk2dSkeleton Mesh"; - mesh.hideFlags = HideFlags.HideAndDontSave; - - if(skeletonDataAsset != null) { - skeleton = new Skeleton(skeletonDataAsset.GetSkeletonData()); - } - } - - private void UpdateMesh() { - int quadIndex = 0; - int drawCount = skeleton.DrawOrder.Count; - - Color32 color = new Color32(); - for (int i = 0; i < drawCount; i++) { - Slot slot = skeleton.DrawOrder[i]; - Attachment attachment = slot.Attachment; - - if (attachment is RegionAttachment) { - RegionAttachment regionAttachment = attachment as RegionAttachment; - regionAttachment.ComputeVertices(skeleton.X, skeleton.Y, slot.Bone, vertexPositions); - - int vertexIndex = quadIndex * 4; - vertices[vertexIndex + 0] = new Vector3(vertexPositions[RegionAttachment.X1],vertexPositions[RegionAttachment.Y1],0); - vertices[vertexIndex + 1] = new Vector3(vertexPositions[RegionAttachment.X4],vertexPositions[RegionAttachment.Y4],0); - vertices[vertexIndex + 2] = new Vector3(vertexPositions[RegionAttachment.X2],vertexPositions[RegionAttachment.Y2],0); - vertices[vertexIndex + 3] = new Vector3(vertexPositions[RegionAttachment.X3],vertexPositions[RegionAttachment.Y3],0); - - float[] regionUVs = regionAttachment.UVs; - uvs[vertexIndex + 0] = 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]); - - color.a = (byte)(skeleton.A * slot.A * 255); - color.r = (byte)(skeleton.R * slot.R * color.a); - color.g = (byte)(skeleton.G * slot.G * color.a); - color.b = (byte)(skeleton.B * slot.B * color.a); - - colors[vertexIndex] = color; - colors[vertexIndex + 1] = color; - colors[vertexIndex + 2] = color; - colors[vertexIndex + 3] = color; - - quadIndex++; - } - } - - mesh.vertices = vertices; - mesh.colors32 = colors; - mesh.uv = uvs; - - if (skeletonDataAsset.normalGenerationMode != tk2dSpriteCollection.NormalGenerationMode.None) { - mesh.RecalculateNormals(); - - if (skeletonDataAsset.normalGenerationMode == tk2dSpriteCollection.NormalGenerationMode.NormalsAndTangents) { - Vector4[] tangents = new Vector4[mesh.normals.Length]; - for (int i = 0; i < tangents.Length; i++) { - tangents[i] = new Vector4(1, 0, 0, 1); - } - mesh.tangents = tangents; - } - } - -#if UNITY_EDITOR - UpdateEditorGizmo(); -#endif - } - - private void UpdateCache() { - int quadCount = 0; - int drawCount = skeleton.DrawOrder.Count; - - for (int i = 0; i < drawCount; i++) { - Attachment attachment = skeleton.DrawOrder[i].Attachment; - if (attachment is RegionAttachment) quadCount++; - } - -#if UNITY_EDITOR - if (mesh.subMeshCount == submeshIndices.Count) -#endif - if (quadCount == cachedQuadCount) return; - - cachedQuadCount = quadCount; - vertices = new Vector3[quadCount * 4]; - uvs = new Vector2[quadCount * 4]; - colors = new Color32[quadCount * 4]; - - UpdateSubmeshCache(); - - mesh.Clear(); - mesh.vertices = vertices; - mesh.colors32 = colors; - mesh.uv = uvs; - - mesh.subMeshCount = submeshIndices.Count; - for(int i = 0; i < mesh.subMeshCount; ++i) { - mesh.SetTriangles(submeshIndices[i],i); - } - } - - private void UpdateSubmeshCache() { - submeshIndices.Clear(); - submeshMaterials.Clear(); - - Material oldMaterial = null; - List currentSubmesh = new List(); - int quadIndex = 0; - - int drawCount = skeleton.DrawOrder.Count; - for (int i = 0; i < drawCount; i++) { - Attachment attachment = skeleton.DrawOrder[i].Attachment; - if (!(attachment is RegionAttachment)) continue; - Material currentMaterial = skeletonDataAsset.spritesData.GetSpriteDefinition(attachment.Name).material; - - if (oldMaterial == null) oldMaterial = currentMaterial; - - if (oldMaterial != currentMaterial) { - submeshIndices.Add(currentSubmesh.ToArray()); - submeshMaterials.Add(oldMaterial); - currentSubmesh.Clear(); - } - - int vertexIndex = quadIndex * 4; - - currentSubmesh.Add(vertexIndex); - currentSubmesh.Add(vertexIndex + 2); - currentSubmesh.Add(vertexIndex + 1); - currentSubmesh.Add(vertexIndex + 2); - currentSubmesh.Add(vertexIndex + 3); - currentSubmesh.Add(vertexIndex + 1); - - quadIndex++; - - oldMaterial = currentMaterial; - } - - submeshIndices.Add(currentSubmesh.ToArray()); - submeshMaterials.Add(oldMaterial); - - renderer.sharedMaterials = submeshMaterials.ToArray(); - } - - - public bool UsesSpriteCollection(tk2dSpriteCollectionData spriteCollection) { - return skeletonDataAsset.spritesData == spriteCollection; - } - - public void ForceBuild() { - skeletonDataAsset.ForceUpdate(); - skeleton = new Skeleton(skeletonDataAsset.GetSkeletonData()); - - UpdateSubmeshCache(); - UpdateMesh(); - } - -#region Unity Editor -#if UNITY_EDITOR - 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); - - void UpdateEditorGizmo() { - //determine the minimums and maximums - 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); - } - void OnDrawGizmos() { - Gizmos.color = Color.clear; - Gizmos.matrix = transform.localToWorldMatrix; - Gizmos.DrawCube(gizmosCenter, gizmosSize); - } -#endif -#endregion -} diff --git a/spine-tk2d/Code/tk2dSpineSkeletonDataAsset.cs b/spine-tk2d/Code/tk2dSpineSkeletonDataAsset.cs deleted file mode 100644 index c6382f26c..000000000 --- a/spine-tk2d/Code/tk2dSpineSkeletonDataAsset.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.IO; -using UnityEngine; -using Spine; - -public class tk2dSpineSkeletonDataAsset : ScriptableObject { - public tk2dSpriteCollectionData spritesData; - public tk2dSpriteCollection.NormalGenerationMode normalGenerationMode = tk2dSpriteCollection.NormalGenerationMode.None; - - public TextAsset skeletonJSON; - - public string[] fromAnimation; - public string[] toAnimation; - public float[] duration; - - private SkeletonData skeletonData; - private AnimationStateData stateData; - - public SkeletonData GetSkeletonData() { - if (skeletonData != null) return skeletonData; - - MakeSkeletonAndAnimationData(); - return skeletonData; - } - - public AnimationStateData GetAnimationStateData () { - if (stateData != null) return stateData; - - MakeSkeletonAndAnimationData(); - return stateData; - } - - private void MakeSkeletonAndAnimationData() { - if (spritesData == null) { - Debug.LogWarning("Sprite collection not set for skeleton data asset: " + name,this); - return; - } - - if (skeletonJSON == null) { - Debug.LogWarning("Skeleton JSON file not set for skeleton data asset: " + name,this); - return; - } - - SkeletonJson json = new SkeletonJson(new tk2dSpineAttachmentLoader(spritesData)); - json.Scale = 1.0f / (spritesData.invOrthoSize * spritesData.halfTargetHeight); - - 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); - return; - } - - stateData = new AnimationStateData(skeletonData); - for (int i = 0, n = fromAnimation.Length; i < n; i++) { - if (fromAnimation[i].Length == 0 || toAnimation[i].Length == 0) continue; - stateData.SetMix(fromAnimation[i], toAnimation[i], duration[i]); - } - } - - public void ForceUpdate() { - MakeSkeletonAndAnimationData(); - } -} diff --git a/spine-tk2d/Editor/tk2dSpineMenus.cs b/spine-tk2d/Editor/tk2dSpineMenus.cs deleted file mode 100644 index 1c76b1f75..000000000 --- a/spine-tk2d/Editor/tk2dSpineMenus.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using System.IO; -using UnityEditor; -using UnityEngine; -using Spine; - -/* - */ -public class tk2dSpineMenus { - - /* - */ - [MenuItem("Assets/Create/tk2d/Spine Skeleton Data")] - static public void CreateSkeletonData() { - string path = ""; - try { - path = Path.GetDirectoryName(AssetDatabase.GetAssetPath(Selection.activeObject)) + "/"; - } catch (Exception) { - path = "Assets/"; - } - - ScriptableObject asset = ScriptableObject.CreateInstance(); - AssetDatabase.CreateAsset(asset,path + "New Spine Skeleton Data.asset"); - AssetDatabase.SaveAssets(); - EditorUtility.FocusProjectWindow(); - Selection.activeObject = asset; - } - - /* - */ - [MenuItem("GameObject/Create Other/tk2d/Spine Skeleton")] - static public void CreateSkeletonGameObject() { - GameObject gameObject = new GameObject("New tk2d Spine Skeleton",typeof(tk2dSpineSkeleton)); - EditorUtility.FocusProjectWindow(); - Selection.activeObject = gameObject; - } - - /* - */ - [MenuItem("GameObject/Create Other/tk2d/Spine Animated Skeleton")] - static public void CreateAnimatedSkeletonGameObject() { - GameObject gameObject = new GameObject("New tk2d Spine Animated Skeleton",typeof(tk2dSpineAnimation)); - EditorUtility.FocusProjectWindow(); - Selection.activeObject = gameObject; - } - - /* - */ - [MenuItem("Component/2D Toolkit/Spine Skeleton")] - static public void CreateSkeletonComponent() { - Selection.activeGameObject.AddComponent(typeof(tk2dSpineSkeleton)); - } - - /* - */ - [MenuItem("Component/2d Toolkit/Spine Skeleton",true)] - static public bool ValidateCreateSkeletonComponent() { - return Selection.activeGameObject != null && Selection.activeGameObject.GetComponent(typeof(tk2dSpineSkeleton)) == null; - } - - /* - */ - [MenuItem("Component/2D Toolkit/Spine Animation")] - static public void CreateAnimationComponent() { - Selection.activeGameObject.AddComponent(typeof(tk2dSpineAnimation)); - } - - /* - */ - [MenuItem("Component/2d Toolkit/Spine Animation",true)] - static public bool ValidateCreateAnimationComponent() { - return Selection.activeGameObject != null && Selection.activeGameObject.GetComponent(typeof(tk2dSpineAnimation)) == null; - } -} diff --git a/spine-tk2d/Editor/tk2dSpineMenus.cs.meta b/spine-tk2d/Editor/tk2dSpineMenus.cs.meta deleted file mode 100644 index b87f858f6..000000000 --- a/spine-tk2d/Editor/tk2dSpineMenus.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5673189c5c1030b4783c8945f5a5f52e -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/spine-tk2d/Editor/tk2dSpineSkeletonDataAssetInspector.cs b/spine-tk2d/Editor/tk2dSpineSkeletonDataAssetInspector.cs deleted file mode 100644 index b04e839bf..000000000 --- a/spine-tk2d/Editor/tk2dSpineSkeletonDataAssetInspector.cs +++ /dev/null @@ -1,113 +0,0 @@ -using System; -using UnityEditor; -using UnityEngine; -using Spine; - -/* - */ -[CustomEditor(typeof(tk2dSpineSkeletonDataAsset))] -public class tk2dSpineSkeletonDataAssetInspector : Editor { - - /* - */ - private SerializedProperty skeletonJSON; - private SerializedProperty fromAnimation; - private SerializedProperty toAnimation; - private SerializedProperty duration; - private bool showAnimationStateData = true; - - private tk2dSpriteCollection sprites; - - /* - */ - void OnEnable () { - - tk2dSpineSkeletonDataAsset skeletonDataAsset = target as tk2dSpineSkeletonDataAsset; - - if (skeletonDataAsset != null) { - tk2dSpriteCollectionData spritesData = skeletonDataAsset.spritesData; - - if (spritesData != null) { - sprites = AssetDatabase.LoadAssetAtPath( AssetDatabase.GUIDToAssetPath(spritesData.spriteCollectionGUID), typeof(tk2dSpriteCollection) ) as tk2dSpriteCollection; - } - } - - skeletonJSON = serializedObject.FindProperty("skeletonJSON"); - fromAnimation = serializedObject.FindProperty("fromAnimation"); - toAnimation = serializedObject.FindProperty("toAnimation"); - duration = serializedObject.FindProperty("duration"); - } - - /* - */ - public override void OnInspectorGUI () { - serializedObject.Update(); - - tk2dSpineSkeletonDataAsset asset = target as tk2dSpineSkeletonDataAsset; - - EditorGUIUtility.LookLikeInspector(); - sprites = EditorGUILayout.ObjectField("Sprites", sprites, typeof(tk2dSpriteCollection), false) as tk2dSpriteCollection; - - if (sprites != null) { - SerializedProperty spritesData = serializedObject.FindProperty("spritesData"); - spritesData.objectReferenceValue = sprites.spriteCollection; - - SerializedProperty normalGenerationMode = serializedObject.FindProperty("normalGenerationMode"); - normalGenerationMode.enumValueIndex = (int)sprites.normalGenerationMode; - } else { - SerializedProperty spritesData = serializedObject.FindProperty("spritesData"); - spritesData.objectReferenceValue = null; - - SerializedProperty normalGenerationMode = serializedObject.FindProperty("normalGenerationMode"); - normalGenerationMode.enumValueIndex = (int)tk2dSpriteCollection.NormalGenerationMode.None; - } - - EditorGUILayout.PropertyField(skeletonJSON); - - SkeletonData skeletonData = asset.GetSkeletonData(); - if(skeletonData != null) { - showAnimationStateData = EditorGUILayout.Foldout(showAnimationStateData,"Animation State Data"); - if(showAnimationStateData) { - - String[] animations = new String[skeletonData.Animations.Count]; - for (int i = 0; i < animations.Length; i++) { - animations[i] = skeletonData.Animations[i].Name; - } - - for(int i = 0; i < fromAnimation.arraySize; i++) { - SerializedProperty from = fromAnimation.GetArrayElementAtIndex(i); - SerializedProperty to = toAnimation.GetArrayElementAtIndex(i); - SerializedProperty durationProp = duration.GetArrayElementAtIndex(i); - - EditorGUILayout.BeginHorizontal(); - - from.stringValue = animations[EditorGUILayout.Popup(Math.Max(Array.IndexOf(animations,from.stringValue),0),animations)]; - to.stringValue = animations[EditorGUILayout.Popup(Math.Max(Array.IndexOf(animations,to.stringValue),0),animations)]; - durationProp.floatValue = EditorGUILayout.FloatField(durationProp.floatValue); - - if(GUILayout.Button("Delete")) { - duration.DeleteArrayElementAtIndex(i); - toAnimation.DeleteArrayElementAtIndex(i); - fromAnimation.DeleteArrayElementAtIndex(i); - } - - EditorGUILayout.EndHorizontal(); - } - - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.Space(); - - if(GUILayout.Button("Add Mix")) { - duration.arraySize++; - toAnimation.arraySize++; - fromAnimation.arraySize++; - } - - EditorGUILayout.Space(); - EditorGUILayout.EndHorizontal(); - } - } - - serializedObject.ApplyModifiedProperties(); - } -} diff --git a/spine-tk2d/Editor/tk2dSpineSkeletonDataAssetInspector.cs.meta b/spine-tk2d/Editor/tk2dSpineSkeletonDataAssetInspector.cs.meta deleted file mode 100644 index d9414a9cf..000000000 --- a/spine-tk2d/Editor/tk2dSpineSkeletonDataAssetInspector.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7d6409f1851f307478265bb32705931c -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/spine-tk2d/Example/Scripts.meta b/spine-tk2d/Example/Scripts.meta deleted file mode 100644 index e71894526..000000000 --- a/spine-tk2d/Example/Scripts.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 0d6ddec953cd68340ad934b7dbc49aee -DefaultImporter: - userData: diff --git a/spine-tk2d/Example/Spineboy.meta b/spine-tk2d/Example/Spineboy.meta deleted file mode 100644 index 579741202..000000000 --- a/spine-tk2d/Example/Spineboy.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: ffc1cb83c8d59e94e8f56a1656ea21f4 -DefaultImporter: - userData: diff --git a/spine-tk2d/Example/Spineboy/Atlas.meta b/spine-tk2d/Example/Spineboy/Atlas.meta deleted file mode 100644 index ca1eb4036..000000000 --- a/spine-tk2d/Example/Spineboy/Atlas.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: fbf5933c952a61e418970dfb8a22a9c5 -DefaultImporter: - userData: diff --git a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas material.mat b/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas material.mat deleted file mode 100644 index 0292fdc628454520994bc0b1e436b6e4a526a13e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4200 zcmeHKOOx9~5T4~tLU_NQ<_&@PA+7CAph6t73wuc7VhI; z&2FnrpkM@jWrwzZ!h2Li2eN zshzPr$i;nRgewTzQXdYD{&+h|Os2OFjY{(*OV88%p;oaBhEl84SYP5HnsyK7lUNrU z+}|r>?j&Qidx=AFP7V%p7Pz4_qXLJtAf-R(oRW=yHxr7XbV|!d7WV^2QqDqF3-3-A zU<6X)pf7Mv77xNe;^K0nlk|X?xFRQ(Z$ySLYHr(s)^aB7FZP7Cu<%0d1dBOVO{T ziJ1*`HdWfp_C`t>~qK-Hj8S8&3ae2H%BaT2TpU zSqC_ckkTdEYVyw(cGyp6&a@?*E=v}UGq-tFb8Zr%%y|{zE$ikO z!rLx_B4OK(A-q$8BY`U6UJa(2yib@i`BkruO~(%tLH%XIyEO=A@r%zc4$2n?Uc)^H zC`5zLnB5u8df%~ckR4*}2W;Qskuv25_pCi&``MLt$@X(Kb_`)zjgt+iVnh$#x_Gb) zgPhKI-pZ#*s?M0}Ueww?l#}ULwd}Q+xAv~9u`*fO%=yL?w|+>!`Rk9tPrsh}`OgjS zBOl(!NuZ^kwL%$=RI44)pX#e#)a}M9>TGVxAc)#qGEkki=Lf#;9~T#?1lg=LFk?yK zi!S#Xm*`$!9%@eM)8hBjfA@d<`bzt^+qZ89vs?fCH>Xb6>V(qk#eKiK6?D~R+YbXz zd8!|Jy|evx6vecTwX7LfGq7f0&A|VK0sQx{e1%NP|Ni-26z6xj#aHhBWtpV(WsiGt P{tLdu=AYPyR7dUr)C~hz diff --git a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas material.mat.meta b/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas material.mat.meta deleted file mode 100644 index c88980aac..000000000 --- a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas material.mat.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 4179f68f1f074f6419e77a5ce3326360 -NativeFormatImporter: - userData: diff --git a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas.png b/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas.png deleted file mode 100644 index 0de4fa319e207c990397d292223377ecf228e256..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77953 zcmeEt(|0Az6K(9|#J0_eal(mh+cr;ZP9`=dwr%Sq6FZqqJh6Sh`*7dxpYVICe(LU3 ztE={2dsoM(C`qFt5h6iAK%mOXNUA|VK>oLcfsY4||?1Hqe^ zYo|S?(dZhwT{$`=Sqt@M+~@xwm61W9fc#YXvNUBtp6(xDB}s4UZh^(s5h#kdhdRZg zjgaLORu|&B+-~Z!n0)*KX{Sp+PP7RfAR_u-#@CcTU3Ne9U2VHxb{^;Y*Qx!4ffN%( zM~C@e_+JYC_X_@32>fgz(R_dkRtq@p}Oj6)^nT1%^0@~ct7p0P~P>s zIX*TF-XcdpfGWp zQ(V3ok&%&cCDNLefS@Jp=E;binO#>5dmDFjv<-_4(jM$Qh!Ye?G(tA(yofI~{U6(^ zq# z)t*0f|7$u*Oi;QU!TTm1SK3KH@0>wCQZswX{RX7hNDg>>P3A(%-O3rIB(*XF1?2mG z5aZtuQKekDtK3ldO;F%kE1E1C$8D#r3H~pZ@6{&-lQuLvMs8bGHt4$56B48KAV1Zx zG%`FCorBe^%oFu`ZBz96-C}NEpu70=>ttI2FiXa09#x9+OqxD-19Hch~-SsOO!c|hX*qTf)og36y!}UfQcq0 z9a<#wZC-fqoNsBR8H^Y2quj_)Keb81vuTIkyJ*$O%sMmOJ!ta{DozzB(l>Hap-q;Q z0P7<34Kv9*gkREC2w_-h$bu6miYj^gMzZ)x^Tp+N1+2tgDZZ$> zZ@`xnVBkC8N%%9W21#yu1Y_mEC6_2}Tu?lDBF;9$D0z75=g*`iEsX%*$SL|qYxubq zC_i}k{>|SzpO?1fhsV1JP`a`ZzO4R(z#XsAuynj3F{LFFjnmJL_JhcaeCHWUm(nhr#>!$U^z6c>i4__1MiY zp6BdT5j-&9-Szs`Pns}_Hmf-%Zcxw2^d_mOyIzi0Tytufii_JfO@{Q*8Dw)pw^%=U zwJHMT&KWG21|9npf4XqrdKj&~N0(AJwe89Xh?I?>Kh8j>#*6 zGo$ghTRab2SpLgYNe&VcHD`?%tgU9gt!~}KAN?I~Hw!!YpXTnZ^M@`DwpFzsX*9g; zUVb}G#l=t8SO`%CB!r}&hUD0Ow8U{2^3<4NSiXp6>CEnar|Ll|FBW3&blk7yc2$fF zFPZGY*n~m)yUm=zfE~B>{=P58jDX)J-)wILNN=kbbR@}+GfnS!@ipHHwG%|wwT+C5 zbDi2_!GkdIW4XHL3WMFAng=f#PP(p!j<)%JRzc;j@AYk!cu9{{iC*(6?6!6qv~jmX z=hyv4JJmJlr(hTiX=%*s@40zxa6J^Qrn0|YR{>i!wF2}oWZ5z=2! zPU3ESxkhu$*w5n65Ykq$(WFWC20nDPZu)BXcw}cxxWpX~3Q>0?S?+?zbBNJb1ms*|=(m_?B=r{GfKCJ@&x@k@NZu@p9y<`Z&Fh`3j>GgFx8>Mi2 zjuS5*29soom1mS0uYdK~f;Vp~kl-ZFereSwjez~dqOo=q=+Z|zKmTNBlNI<_K5}J} z@+Hhqfb-=m1KQti4dDS!;c$T_bv?u%rZ@D8hg8s6CPvMi4H};>0p^U?XlFbs(g7k* zvOC(mPy_@6{U5_Qfj*0t);*5jIEu|ABp5NSLlNWYGt)E@Cncd&El`x=WIO-y;6P)b zzCl%0mq;9jL8=gp3uUS8{xD7o&8qt~hjYX)Undx}jjC}C+Q-|}AQeI-`<&8WUcuqc zv?}~6Iw8))VOSL}o^Ss7x&H%6>VTcsEgNci2j!s|Et{U|2lj>l9rf)(M{MGeg%i88 zjQru~=vCC3afX+j7(mxc-EiCakyIq$(*RZ*8!w2S1yJCFoyp91(~Q5MNAdMikLF`ruCu}#NJ!G7_eNEN+UmS${B z)Q4C|Hk%zeREA>X&z5T@d(&(ceFY1fL&sTeEALR*6=~$%d{q5z6|VM?`N(6%oJaxf zKVnQ_M3O_bIPj}ZKZzp=5s{RB<#tqv8?G$%GG!i~I%1Bc5RrOu5g+ht7VC+YNeQPV zc$c*NPRQortFgJ>nYOkMii0&$r%$AJgE(w3ez!aVGBaVU*dV16DqnI4;L0w}%Z1OXT%?$KF`UB5i_d21_xbRm`z7UcRl zOccM8Dig(kE7Zu zi|e_r)lQkUR>`3BAiUdnY!&)-bseQD6yEd`K0eT3)zW1MI#!nTyt^Cqf9<$@>ta)< z@tT<~&$ISd($69PSU*wZt5te=A(S@x2|1r~xp)N{=H=T}MtQ1)%A69pnFdy0?RXnp zHCsH;Mz2#m;D5W8Bhg?wms_TD7Lgt_D4%JV#PczTJpelX>r+tx-SBQMd+KKl%xG0b z?xD?8LPoO+5n0_|mq?Q}ok`-E(JH=^-%IipiuaN*hIqMPin{gze9^qnivERjX1Oid zP!{?5y)BQi4zUG6@G1_y-l}RsZrCoF!kdRZ4%}XKsAHD?L0TM=kfI^R$|S z7e1O>k=^g?=0fOhXSjd6`MFFXA`LPzoLMs>Xu zBWGuT%C4n$1U{Fm}=Osa96pq zV<@rBcP`JR&yCX|&$^g!5+YwSXRvs?NC3hP;A}DYMi$5>BSCqoATM=qPqpvTjlcTF7iM&>PmKFd^NfkMS zAfdQTS!aV%p@_*vHcmSke^|9|{3ITY;2rORw<3|s_t`&;+B>!GeXm(gNe-8tp<tADdm)A&nc?SQ6`6UhZCBmU_}@9_E}H%DR*gOF@0gZk|$*hcMY@r z8}H=g1};&-YQ{yB4VVqVWgt*nUenpBb7E1KI|s4ngTq&gQ;vhS5QNP-xGOJ66IC7z z@p^*PJ(|0Eg-kMv-F}B1D{!b!M=-$EjRp){_C0rIchOJ?UtZ23T>b!CECCfOTl$y* z+1?5?#uvNmq*kkuGHh6rdSZ%!#map9lPKl%dyH z)oL@b0#eIb{aw=*fm$pEb|;C=NG7M~?!=@YAdAB=$Bu*+ynK?0 zJfD8~4+jwnk210^Rf>2X5S-0eE>{uVo$ZK`1>AhZ?)akOKeRK~hU#3Y)*3=j<=Shf z56MYo>~ko<%6OV)ujR6~R#yHj>7pGP&)*FSYP%Q<2>iXei%FV`aG1&32SNEku{pUnk3Sh z^ygBTl8QiR?}*qCTTi(9DY=Vbe19{~l8ef^7GeGZnU~okd)7JIoJ3tiY;~#}emFB6 z$0o!9{k93@feC@0e{wx>(Hn+Ze-xaVJyp4Duk0w&gK+gLE0l>%SvQU; zZQ*QwC)A)d1DSUp;Z{o%ugWbPYM4^yf1CM($X=Uw^dosQ$jsLNz4 zNT_^*ZgCGotxXYgM;KE;1tbW^{VMw4)sv}_rM*7zZwDa*X%|!cHv&O-zDy$A*!Zgc zg6~wuYEG>FIt55;52+C9y{G+QOkE zlp`JORd~G8fiKvI;58O)N2k~4v9eeqMkIs9k8esykk5-9V4J$Wh=M4umVl2$x~D)G z=)Ic7oSv%C0+MhlAf+xZ4XgvPhg*lHcD$E_SyYzt##CLk8XU zK)XHO@FJ&H`MBt$V)KJx%!Xj^nN zVeE&=@Mq*8n}cHxoFD1$X7tp;I-Qv+WY1IJ-KO?mccU6ah5!KgT z1;*GEBu)(x_rKkG0>_0utP+(~q)Y{R*bl83Bg|RPO#||izQ70e`fmYjmQxwCo$;6h z3cTW}WWq};-B)-3r!P{dFjnUp*1X~qli```(WfZN&w`!)59@-D!ELh7IcL(3-v&I7 zS!V~n&g4Qmn%Vs}QtI1;DYKQ(KjX*9Yt8i7Ba4D^hj7cT4ss(+$h}fE7`bjguII)- z?~s9APbJN1!n^kP3D7!tL4tT=GfzAGw@FlX^92mIi~EsxekK<=2l)&c$-s$Ih}6hU zliCxgJACRQbpgbPVL`Okwmw+PAhP=C#kBs;@LB7bbHa?k?wSUZ?O^9;U7Oi56GkLN&rpn9v_gKW@12oG_dfg?=#D*Tmoz@xBLbtcU$>X%AdDI)}J}7y^D7R|D4CDd(Q32e9~iO6K~_iXHEy` z5ekrG80l?8Tf}cN&TlJ>g`bbfK!4Bs1KuWAcsD_wX=%oz0`Dm+@e*642_t6kg%19R zOdpRDOF#uKqLuZlg4&&w&aq{GoiY81m(R(qFTKuj$LZN_tLdgE=N-4Xe&Qh>4{5#b zjl@S!(1WP-8=z2TcIxV{MFCE%tGlk)&Yz==s_C36#vLI6JKckCbQvL*)RUP*|ft|bWnwnRProWGK;1nK)$cHpSAuK{Q8zI~``{(~hX+Q_O zSO2LOR^0_^q7t4DPu7!M`AzsHFl{FJAOy)zC}Qt?WJ(e8=+6`8r>S4Ql-Do%b8iou z&V8?N+Ox$z-bvv1A^E7~gH5mM{LlS-yd>g|4;ybV=#Kfew7K4~Drh)+>{r1YH-0)x zCHoNfHapruDx{WcZMDE@D4kPjSGHxZ&rBg&i}%On;Bi5YM;0)vNjU~GS0SR@53FA= z@CGXI8E-Wn7AJ#aT#}Q~gK5~5-b>m2+ydIgC zI*!T&{-9$0fTIr#b|Fd3TY| zczvlS)qVqbjTrNJ?QKYq80rcZ&DP`49gWHJ?zjx{16%)g>@2Bdm*8fYcOm_PNH5QA z@|sV)LG$zStXM51^*O3+?uLVJ&sz)q2ktq-haf|RgwA#DFd44Z*W%9SjedYt{^#>D zNN3D<&He$`6m+i+j(IUAYOOy%5%eY#=E+&&*`=M)0wt^bzgd8+uQ6osXF;wj*ioJ-!Oj*3 zw<00F;HTS*OX2NZ=l(x`fQgbU zc(wNIm9e3&lC>f)gd9)WhQo3fSL_wS(ttqIw>}WThyIaz7<=$bA&sxKWboxi3({ft zMZ`T$$SuaUCPk`$vXhx-+pQ7No){P>J=b_oPFR)Wt#BIj?`6PXKGE|ER#H(5x`omQ--oaEtN zyx(dhxDM0qg5D5Zl*hQV*!uSVwJPGdZ+4tD4M{mgu>g#+)L%8Pe)OMb06t%U{hxPH z{T`eZCZfEevl4RJeWGjjjho!=vgxo>d!rVTPm_PfHSs_9F>LlP7)jkL4yW-dU!@Mu zj=hES9Q=mvOBb!W9j_W!3KVu+veC?LB%eDoy!*XF)k>kr9*EN z>gyL09h+MQQFh>x{0`&DYmB}Hcu+(aEGzn|HZLXlwtL!I%HF)~yQqx@kblm#UFNe5 z+^-63g4`~g0gz4;uYEbJFUL7-o3~15=0|=*zoEQG`}>Z&*dm8ZaDcr*n|KWsc1DyP z%MMMwP7((RIHb~d@)r_GL*Nm6uy>c5zlM#aOW7~{dBk|>NQ@`$8oy#wm>3on=k5zm zO`Sb0?_K*>*O0|l&&_<{D_HA=8JY)Tjh*}&T^7ynuTOVxfG-B1fQ$R2j89y-deHl6d7Hm5>9l1T1sO994_6ghX@RbTD)xvm#;?Gt1_sA*pw z>zq6~B*M5kIh|j9AX3YqEUeSeKaXYGPtAR-p<07phtgWx@efopMlad%-QA1c!vGT= zcCt9rce%I&mLMTWTXOUzd%2Z5doAweQMG(DR|p3-vQ^(^BY-w3RXSRUOoKpY2TR;lw1fJ^x4cETTm?H|_3ZR~eLNJPP|# zT|Fgd41d`NIc|R^oG-wxzMCJ$LMG_)ckSs@pfvI0R(%Z;i&0b(AxkGP7rx;fg zSDU%I@@wf4MwgyZ&m8?M6e-FPk3Sk=%SD@5 zVK5#MVP?vgoIsxY-j&8(Rs2uj;d~d^yJ73@c()9bzq1+mH^s5{BWX@&j={iX{okSI zXy=q2sr0=aOwGPTkx-rKWLVSB8HjJCN*dh5J@dk-`SIahmqNwq(+E#*JE z=kvZCGZr5N%C{TWotmB7bV)Kau<`m}k@W-NpH{Vnv0T<1Jh^c!+u8IDzDAejaf6DA z>K=;|?6p|*`#fX=@BVxb8{ThtfeQJPzVb*m6EVr;3!0vabnkyz&=2x#^5j%1CCcmJ z18S2933W`GwNiJ%!R1di2`RF@d=6g#z#Qzkn!jyrg z?rPN0f$cF$i=zLXv%+f{#q^vE^W9Ep<$bdO(aF%>`O2_TANLQ@hx_nbeeYf(5zkS` z02ZU)mR=<)fdO#X#p|0TXFePyB1PRVRSF^ejkusfKRE~rltxfs7$H8XAFYU zXYgy)6x(q&GjE+yr=+GfZdF^!_|Lb?B91MCumr||jiA0Y6^j4{uPqib;>Yc7^k79c zXvxKfzD{510Ww2g}@+WulB$lJQT7cMqG3Zk26|66f$KC3k$e!#&8te zFGEy*AXEZTi}1&wU$3AYx-G|2)`d*vV3pBHJ#+ zAf*KSGZkgLfyYdm?allBQ1nB?LeyqUqEEte@iTFXJ9cmwwUQ5d)mTUH!| zlMv{7SXwYwZHtVMOWIli%U15p`u%ML2HZtmf`Wr2m01c<@}qIE3C-jpz@B}LzHvBo z^S$fHqp6?8yl5!?SHWhi_B3Dzw(6p)TYIaL!$|Jx^s1^UsO7*KO?k=#8)S*pM#YHh zSF>Xz>9O?V&WkkY;XZ#Wrn|JR6&3Xd?;I_buaDSYiq>J*%dgx_6x@dt8vI`RV?x;J z*zwQ-+mortzqFJKc0yUg83uSc=!Cdq<#7U#cBjwJcD(OstU<1aKRH`oma>PvNBbno z+IuPua5~2{?a!~_x`$0|&d-B{a;%D-9iJlI8L_4s``O0oGh@hp#ep*5fs8m}F$PTG!1KimkD1fZ<~hz-UGA$b>Vlv;9HJkcgz3;8-gD8ZHR{wc zJO@-73p+e(SdR`!NO$|STQ8Pf_Nmb*f)kzP?0kA{y-Dk&!K@0QAb$zfob_D|v254`D4vmJV zUV>tK<|i#Gk`TEJh(Or@3y4&dp}jto4^5*#OLx_Y`6eG#Wo6s`Xe1lxiTUqNoWEcr zt`1nGrgP3U5$?GA!R6%?m2C}y(AYnTKL{{uIvW)Tk{&5_Y@dI&&dLK!;x4#UzmhdR zwf}U}1Fvd4r!(A^*mimXS-uAVu47DMG3WX6gAZH2C;x&pdX6aVY*n1Tllus-1T9yM zowX8wgstsa7GZW{5tv$xl=9T*SE03`RhtCdWDG*g&9x;SKV7{H6gu1J_d6f9KYDe@ zrEBSEf&%-i23ofDRLh}<5>5A}j0pKyzoCTiy9#!1*6G)8Daj{}nsr^RDvKB)3QKyo zUF1lMWH(~$L7DY)L@k^$Yc(%~_X&5^JDQB=uY9UMKIYW2(49a`#l?Ll4PWy07xls2 z{cxRGH2E`5l=ItF%m)Dw>6;=|P%c9hMIF4jaq%0ryKEJ&b*RR(cKWho!l}_|2y<=Q zXTHWflj5JMk(BC8SQ3$N7!0j$GBE?4_eS49~MF6nEYakCm7C zeG~gDkIp8sSXmV3Om2RzmdpCaK?_}RTEUPop^cTGJ#75}iU{aNx ziOt>+6ZtkNf9Md9bhkiYHa>4x)3-nsV277UAf+>v6$exM&iRGVzOt%@j8$&VI z^0d(E^wjF%+OS9yc2&f$h~3%p+?ONRg@d#tF>L`JBr6lw4L3tH`MT*)es=MdaaT|v z;HMO{5_^8v#axb%#-%A6uzwfONM9%Ya%y=4YZt5B4RMO&7tHr<15MK~zdjz$T+!Tc z6lXevr?0=V?NK&*Ooh=RV=t_M0Gh%l8u^bkaS6S`k2OjMIdLj_SQX?6Rhr0N1hX}Y zj*5Y@v+DmezZ0Xbiv4x*q_^UjH;?A>)J9R@0AKx9huu1~wc}33+*Su9)56{%4$}Fl zYMUneP7wjcvg@L)y>*+TY2R4Ytvi$4)|wf~qR{peeZfrnGwYhP^<ppV5nB4**<#kcqX-_D6=1=lvc9&V`L? z$y&=8!q^l*V1yYpM^C`eU1EM9g}_12u$GXC$!W@6AVXo+(=X7JkT0~C30)Bw!sZY| zlmO4+Bi`6}ZHojw;m!{ZCi4EziOpqZKTZ<$ScXZr?4=g}ZBCA^MI)tT^Uu))2KI)D zRfMiFKvn{zX}b<+Vn*sl^sS@fz{d75DM78mPqo@Qd}_`FzoiW0{@w ze=wW;aOH&jS9=b*j z@+*yDHQuJH%yRl{`S+-&e)aTJU&@r=BJVeo=xfLRMugajccFG9QA~meE8fMp#rmJl zUV3K7P5KE{q&X=A;b!^<##(Kb2UYIryx)Y9|C{v^W_gqSVrHBGTHl@FB;|M7hUp>S z8PQ{Ns&p4r);4R3pC(#qaq_>$s19@Le=dR?RdrujJaJ%OU>mNf<9RGSOs{nQK}2Na zb=rMfHSuID>874!E;~LrD0Fr?bxLeTCz|Bbg!HoXbF%KhY2v2%u~Xi4)6Po64iVB`=_N%DCV1Q4Vs z67i03=nH@lT=E9oW~@N=J%8S|>^^8QcCrFQ*=LGe2O&>PAW7ws_orpH#t2aew*eT(C(`59lUv~XW*f6%_d;-E=KZ)};1`n%%uPR(>8|!XF;A!nIJjEYQNW7E zZ`ttY54s$v(}-@lg9xhKXu_xx+#dx!HGt<7h42{wN|*vAHjy?_dYXi;od(;*)u1>D zRxLDgQ-eJpzJS+iTRH36uGh(xz8_T-**2D%ckiBd(&b$h2p+9kbW;rH^mGqbX3C+_ zY>1m5SE)^K-2$3gS4jKTwM=-)VrBK;AhqXlwt^+Ps~n%-9gQn>v6is98JUu&hp>iX z;c(A8DicpM3z9Og;CBPT%$PPe6AxldoNHEQ21X(1^TwjTf*fL)x=?Jxnl3TgUNG+D zcZFo)Wuv5(s^7gCG0{X$FE~Rm7EWRGG&MDJO36J3N;pc>l(^F@^{0@KziviwXFzaF zPiJ$RP5WT{8?wPV$|ses{Zt0cry3fC7A|2xIWM++Eq-##aN3ch>f z2r7e+K>9?A2U=n2N8AJ1nr95i{3oUlDOFJ7c1kYk-U~hIUc`Rcq=65wii2p93A-tJ z-idYzZMhp|;O^_;A%a_Si67|3)aLPt?XUXR;lQBt`(uoBx=6G0F%iHEZL7E5-9Wet zSoi2HwcO!sBDCZs`SRw6T?%mq-?B`;UT}@i&VhF*IFQ@5G-wXmNeuafZSH6L%T<

}0nrfaZP}Q{)ZCjDD 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 diff --git a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas.png.meta b/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas.png.meta deleted file mode 100644 index d9f913d31..000000000 --- a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlas.png.meta +++ /dev/null @@ -1,35 +0,0 @@ -fileFormatVersion: 2 -guid: 87b566031e1e98a4ca10753473e6ab43 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - 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: -1 - maxTextureSize: 1024 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - textureType: -1 - buildTargetSettings: [] - userData: diff --git a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlasData.prefab b/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlasData.prefab deleted file mode 100644 index dafc39234844d68247eff881fc1f2db1d3ffa438..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18792 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 diff --git a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlasData.prefab.meta b/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlasData.prefab.meta deleted file mode 100644 index 009804a9b..000000000 --- a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/SpineboyAtlasData.prefab.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 51da69e827bd6824f9f747e9726b91be -NativeFormatImporter: - userData: diff --git a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/atlas1 material.mat b/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas Data/atlas1 material.mat deleted file mode 100644 index 1bf3f5860610dbb54f6e7a28bd673a6806e616ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4192 zcmeHKxpEXS5S7ho%zfW1_icP|7X>z8g9FGmCa=7E*%kDy@3dPu;DjmS$F|juE9cPb;N5sHaY;i(TDa-Q_Fl z*Yfgm8$Iu!Hlm%efv%|AIx>n3%RoX_;3rmUHFXoiq3i2a)v2+WCuY{&4@zdJqUR#D zl8kT#L7(cyqO&&!OM$D|!9{1nD5!-uX@1d~vYshwYeFZ!)LNR>j`<|wqK%)&)0jg+ z#SGu&P@I#8!<;&1~M6}}M}!l+pK0c-V=l3(lzZDHbt`hMXni5LYh40E%NFc66* z`s}>6s-&If(M}m`Krk!g^SWd#SP_lcSnr{sHe+LhheK>g9vd6Q)DV3l4BS%D))tI) zOXKs#IOL$8n^H0un23vVQ!<$gC6?l>>IFhSGK+)Zb3sX&3k4`$q?4s`3ysw&B8<1J zI+a@q14)+yeL)8amDrGN7$RXrEMA6mtJ^>>LYk3gi95f*;-gqfbH?1P;mgcWC-e>S%aEMR4$sm z8NA1Cb;>(J`#c=dfaDd;elayHW|D58n(Zy4RAzO>aNq+TP^kiMYq?U>PA&53IGC~H zQS3`>Ka^wl0*#f+5fvxSY9WKf68%VrGj=@sk&fiprId$|uT=6;9~8@GW{cq%VZa?4 zs@>zdUdhK{BVmlFnMyv9jQU>wQpqPXa7@cq@~Iq5Hu=+p!CY?r`N^O0{BU~o+*rwH za}dIHQp0!=oby15s)X=6wMxwj;pcr&EO}*f?jlT@b2Gv(_4Dd8+dqAO z_v#C7JEg8Ye$X+w=JV*smp^+hzkm8hM%mQ*X)(}Zpv6FofffV*KLhv^rCmiwJ%wue ix1V40H;4JXh_BnJ5gml|MUVGk`~hEJ@hxejdh#2F9f-P z2}&v|Bt$_&MaOR-%r~=p@vZitrMQuNp7ng58Gjyo_mt`!RcgzWQmT`B>Xf?F)7#Tq zzN&sNEiHA>^G<4`+8G<@sv6XhQDj&G60#CMu~KWOn-~dQf1j#Nj!i!|Gwwl9GQ(9p z8>v-fgewU8R4*2ty*X40T-^@MI}=7hJ-kKpi`JC&bWvLqI`O5}(XJ`}i?uM2__)Z~Ae<#89_gC!jmQv2#nKO0s~42~Vozub6ED=?5x$a$QSizzH|q%l zk!YgNRJ2tk?KF>e$zT(LSsAbBlCfY#G-hLihlbjUjg1}-u_1YEY!Xvb^ocNV3q@O> zGuADPSB!DULBBMmWH2xh7v<(;G8alL#aYvHgnnY?hr*YFk}?+xP`XGbOXXG?YfwZO zZ&?j0w-E-CE(iLY4iYM{A=@!T!iZSB4C~0HYvJ832R3q?{tgB&!!a$XgfOiGoJL6M z5`8xLU5OpGR&}tOY!JqXs+#LyPcrHwcqfEQ6`7fOSWRwobnn_eH zntd6($8K%XJ3{+C9MXW~70m%LH7({T-9UBQS4OGK=&Iqs2R)!t1>V+jwXU6-=hJa0 zW5=V|7ubF{$L<9hE0-fGPMp<328kv5k&a~Sc=RJ3&9O@<4pJz5Jz;Pi5ekmaXLO985O((}clXZg=vNKjZn~^ys;{ zlF#NKgzKb+@gg|qff7{-;dkrRx)s9D`=D6z%I4fdm^9~BgkSLeBzp7J(d#4Pe_kCI zGjJr3CA=>OlTE&#Flq9wu8vEdpM1hE=OCEH$M**Z(u)Jv@D&fJRDsW!?2Kjos%P&Y zJ4EcWY`?}MY03qD68kjUueY>ow%^FHV+hMCbQPegDQdWN(QtUwk6+&gy2Gh~H;XGi z{CxNND{ecbx}WX)ICbsg!^O9szEr+{ej}r7YX7tuXfx1epv^#=f&ZTY{E5=8s-wO_ kE&bciulZXe{9eS@?c}HqLi(b|`!IfwFR=KwG*UhJ1C4C61^@s6 diff --git a/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas.prefab b/spine-tk2d/Example/Spineboy/Atlas/SpineboyAtlas.prefab deleted file mode 100644 index 98e0624e310dc223156dd2636ad15de816ef3e61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22416 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

  • yw#}FTdmQN6+#8AaJ;TmD(H+-@HQ|qaxy>Kk#|*oliT8f#?URr_PP}dIn3GDwE_v|tGblx!10ibarAPJr d%+pVwYSM5T%g=+;P`3#t-^A13>YRu`e*{C8K+ymI diff --git a/spine-tk2d/Example/Spineboy/Skeleton.meta b/spine-tk2d/Example/Spineboy/Skeleton.meta deleted file mode 100644 index e2af3c822..000000000 --- a/spine-tk2d/Example/Spineboy/Skeleton.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 1bbae6252278b4f4797821285fca644d -DefaultImporter: - userData: diff --git a/spine-tk2d/Example/Spineboy/Textures.meta b/spine-tk2d/Example/Spineboy/Textures.meta deleted file mode 100644 index d89c257db..000000000 --- a/spine-tk2d/Example/Spineboy/Textures.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 440ce1c2387029f48a05c43573aedc8c -DefaultImporter: - userData: diff --git a/spine-tk2d/README.md b/spine-tk2d/README.md index b8a9154a8..e77b44875 100644 --- a/spine-tk2d/README.md +++ b/spine-tk2d/README.md @@ -1,19 +1,18 @@ -The Spine runtime for Unity with 2d Toolkit comes with an example project which has "spineboy" walking. When clicked, he jumps and the transition to/from walking/jumping is blended smoothly. Use the instructions below. +The Spine runtime for Unity with 2D Toolkit comes with an example project which has "spineboy" walking. When clicked, he jumps and the transition to/from walking/jumping is blended smoothly. [Setup Video](http://www.youtube.com/watch?v=dnQbS9ap-i8) # Requirements -1. Latest 2d toolkit imported in your project -1. Latest Spine C# runtime +1. Unity 4.2+ +1. Latest 2D Toolkit -# Usage +# Instructions -1. Drag spine-csharp into your project -1. Drag spine-tk2d into your project -1. Open spine-tk2d/Example/Example.scene +1. Copy `spine-csharp/src` to `spine-unity-tk2d/Assets/Spine/spine-csharp`. +1. Open the `Assets/examples/spineboy/spineboy.unity` scene. +1. Import 2D Toolkit into your project. # Notes - Atlas images should use premultiplied alpha. -- All skeleton game objects should use Skeleton.shader