Ejemplo n.º 1
0
    void Start()
    {
        atlas = atlasAsset.GetAtlas();
        this.skeletonRenderer = GetComponent <SkeletonRenderer>();

        AtlasAttachmentLoader loader = new AtlasAttachmentLoader(atlas);

        float scaleMultiplier = skeletonRenderer.skeletonDataAsset.scale;

        var enumerator = attachments.GetEnumerator();

        while (enumerator.MoveNext())
        {
            var entry            = (SlotRegionPair)enumerator.Current;
            var regionAttachment = loader.NewRegionAttachment(null, entry.region, entry.region);
            regionAttachment.Width  = regionAttachment.RegionOriginalWidth * scaleMultiplier;
            regionAttachment.Height = regionAttachment.RegionOriginalHeight * scaleMultiplier;

            regionAttachment.SetColor(new Color(1, 1, 1, 1));
            regionAttachment.UpdateOffset();

            var slot = this.skeletonRenderer.skeleton.FindSlot(entry.slot);
            slot.Attachment = regionAttachment;
        }
    }
Ejemplo n.º 2
0
    public void ChangeWeapon(AtlasAsset atlasAsset, SkeletonRenderer skeletonRenderer, string slotname, string spritename)
    {
        AtlasAttachmentLoader loader = new AtlasAttachmentLoader(atlasAsset.GetAtlas());
        float scaleMultiplier        = skeletonRenderer.skeletonDataAsset.scale;
        var   regionAttachment       = loader.NewRegionAttachment(null, slotname, spritename);

        regionAttachment.Width  = regionAttachment.RegionOriginalWidth * scaleMultiplier;
        regionAttachment.Height = regionAttachment.RegionOriginalHeight * scaleMultiplier;
        regionAttachment.SetColor(new Color(1, 1, 1, 1));
        regionAttachment.UpdateOffset();
        var slot = skeletonRenderer.skeleton.FindSlot(slotname);

        slot.Attachment = regionAttachment;
    }
Ejemplo n.º 3
0
        static void Main(string[] args)
        {
            #region Copy With Args
            Console.WriteLine("Spine Binary to Json Start.");
            if (args.Length > 0)
            {
                _BoneName = args[0];
                Console.WriteLine(args[0]);
            }
            else
            {
                Console.WriteLine("Default: 22 ");
            }
            Console.ReadKey();
            #endregion

            // Creat SkelData
            SkeletonData skeletonData;
            try
            {
                TextureLoader         textureLoader    = new DemoLoader();
                Atlas                 atlas            = new Atlas(_BoneName + ".atlas", textureLoader);
                AtlasAttachmentLoader attachmentLoader = new AtlasAttachmentLoader(atlas);
                SkeletonBinary        skeletonBinary   = new SkeletonBinary(attachmentLoader);
                skeletonData = skeletonBinary.ReadSkeletonData(_BoneName + ".skel");
            }catch (Exception)
            {
                Console.WriteLine("File Read Error.");
                Console.ReadKey();
                return;
            }

            // Test the SkelData.
            Console.WriteLine("The spine version: \t" + skeletonData.Version);
            Console.WriteLine("The bones name: \t" + skeletonData.Name);
            Console.WriteLine("Find the Animation: \t" + skeletonData.FindAnimation("attack").Name);

            #region JSON File Create
            // Takes the skeletonData and converts it into a serializable object
            Dictionary <string, object> jsonFile = SkelDataConverter.FromSkeletonData(skeletonData);

            //convert object to json string for storing
            JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
            string json = jsonSerializer.Serialize(jsonFile);
            File.WriteAllText(_BoneName + ".json", json);
            #endregion
            Console.WriteLine("Json File Create Successfully.");
            Console.ReadKey();
        }
Ejemplo n.º 4
0
        void LoadSkeleton(string spine_path, string atlas_path)
        {
            var spineFullPath = System.IO.Path.GetFullPath(spine_path);
            var atlasFullPath = System.IO.Path.GetFullPath(atlas_path);
            var aLoader       = new ResourceTextureLoader();

            atlas = new Atlas(atlasFullPath, aLoader);
            //var mLoader = new ResourceAttachmentLoader(atlas);
            var mLoader = new AtlasAttachmentLoader(atlas);

            //SkeletonData mSkeletonData;

            if (spineFullPath.ToLower().EndsWith(".skel") || spineFullPath.ToLower().EndsWith(".skel.txt"))
            {
                var skel = new SkeletonBinary(mLoader);
                mSkeletonData = skel.ReadSkeletonData(spineFullPath);
            }
            else
            {
                var json = new SkeletonJson(mLoader);
                mSkeletonData = json.ReadSkeletonData(spineFullPath);
            }

            skeleton          = new Skeleton(mSkeletonData);
            skeletonAnimation = new AnimationState(new AnimationStateData(mSkeletonData));


            skeletonAnimation.SetAnimation(0, mSkeletonData.Animations.ElementAt(0), true);
            skeleton.SetToSetupPose();


            /* Add animation list */
            toolStripDropDownButton1.DropDownItems.Clear();
            foreach (var a in mSkeletonData.Animations)
            {
                var item = toolStripDropDownButton1.DropDownItems.Add(a.Name);
                item.Click += OnSelectAnimation;
            }

            /* Update 30 fps */
            timer1.Interval = 1000 / 30;
            timer1.Start();

            Center = new Point(Width / 2, Height / 2);

            this.Text = "Spine Runtime Windows Forms - " + mSkeletonData.Version;
        }
Ejemplo n.º 5
0
        private void OpenFileBtn_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog()
            {
                DefaultExt       = "skel",
                Filter           = "Spine二进制模型文件|*.skel",
                CheckFileExists  = true,
                Title            = "选择文件",
                RestoreDirectory = true
            };

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                string[] tmp = ofd.FileName.Replace(".skel", "").Split('\\');
                fileName      = ofd.FileName;
                fileNameArray = ofd.FileName.Split('\\');
                if (ofd.FileName.IndexOf(":") < 0)
                {
                    return;
                }
                Label1.Text = $"选择了: {fileName}";
                Label2.Text = "正在加载文件信息";
            }
            else
            {
                MessageBox.Show("未选择文件,退出修改", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            try
            {
                TextureLoader         textureLoader    = new Empty();
                Atlas                 atlas            = new Atlas(fileName.Replace(".skel", "") + ".atlas", textureLoader);
                AtlasAttachmentLoader attachmentLoader = new AtlasAttachmentLoader(atlas);
                SkeletonBinary        skeletonBinary   = new SkeletonBinary(attachmentLoader);
                skeletonData = skeletonBinary.ReadSkeletonData(fileName);
            }
            catch (Exception er)
            {
                MessageBox.Show(er.ToString(), "出错了", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            Label2.Text       = $"模型名: {skeletonData.Name}, \n版本: {skeletonData.Version}, \n宽: {skeletonData.Width}, \n高: {skeletonData.Height}\n骨骼数: {skeletonData.Bones.Count}\n动画数: {skeletonData.Animations.Count}";
            ExportBtn.Enabled = true;
        }
Ejemplo n.º 6
0
        private void Apply(SkeletonRenderer skeletonRenderer)
        {
            this.atlas = this.atlasAsset.GetAtlas();
            AtlasAttachmentLoader atlasAttachmentLoader = new AtlasAttachmentLoader(new Atlas[]
            {
                this.atlas
            });
            float scale = skeletonRenderer.skeletonDataAsset.scale;

            foreach (object obj in this.attachments)
            {
                SlotRegionPair   slotRegionPair   = (SlotRegionPair)obj;
                RegionAttachment regionAttachment = atlasAttachmentLoader.NewRegionAttachment(null, slotRegionPair.region, slotRegionPair.region);
                regionAttachment.Width  = regionAttachment.RegionOriginalWidth * scale;
                regionAttachment.Height = regionAttachment.RegionOriginalHeight * scale;
                regionAttachment.SetColor(new Color(1f, 1f, 1f, 1f));
                regionAttachment.UpdateOffset();
                Slot slot = skeletonRenderer.skeleton.FindSlot(slotRegionPair.slot);
                slot.Attachment = regionAttachment;
            }
        }
Ejemplo n.º 7
0
    private void Apply(SkeletonRenderer skeletonRenderer)
    {
        this.atlas = this.atlasAsset.GetAtlas();
        AtlasAttachmentLoader atlasAttachmentLoader = new AtlasAttachmentLoader(new Atlas[]
        {
            this.atlas
        });
        float       scale      = skeletonRenderer.skeletonDataAsset.scale;
        IEnumerator enumerator = this.attachments.GetEnumerator();

        while (enumerator.MoveNext())
        {
            AtlasRegionAttacher.SlotRegionPair slotRegionPair = (AtlasRegionAttacher.SlotRegionPair)enumerator.get_Current();
            RegionAttachment regionAttachment = atlasAttachmentLoader.NewRegionAttachment(null, slotRegionPair.region, slotRegionPair.region);
            regionAttachment.Width  = regionAttachment.RegionOriginalWidth * scale;
            regionAttachment.Height = regionAttachment.RegionOriginalHeight * scale;
            regionAttachment.SetColor(new Color(1f, 1f, 1f, 1f));
            regionAttachment.UpdateOffset();
            Slot slot = skeletonRenderer.skeleton.FindSlot(slotRegionPair.slot);
            slot.Attachment = regionAttachment;
        }
    }
Ejemplo n.º 8
0
        public SkeletonData GetSkeletonData(bool quiet)
        {
            if (skeletonJSON == null)
            {
                if (!quiet)
                {
                    UnityEngine.Debug.LogError("Skeleton JSON file not set for SkeletonData asset: " + base.name, this);
                }
                Clear();
                return(null);
            }
            if (skeletonData != null)
            {
                return(skeletonData);
            }
            Atlas[]          atlasArray       = GetAtlasArray();
            AttachmentLoader attachmentLoader = new AtlasAttachmentLoader(atlasArray);
            float            num  = scale;
            bool             flag = skeletonJSON.name.ToLower().Contains(".skel");
            SkeletonData     sd;

            try
            {
                sd = ((!flag) ? ReadSkeletonData(skeletonJSON.text, attachmentLoader, num) : ReadSkeletonData(skeletonJSON.bytes, attachmentLoader, num));
            }
            catch (Exception ex)
            {
                if (!quiet)
                {
                    UnityEngine.Debug.LogError("Error reading skeleton JSON file for SkeletonData asset: " + base.name + "\n" + ex.Message + "\n" + ex.StackTrace, this);
                }
                return(null);
            }
            InitializeWithData(sd);
            return(skeletonData);
        }
Ejemplo n.º 9
0
        public SkeletonData GetSkeletonData(bool quiet)
        {
            if (atlasAssets == null)
            {
                atlasAssets = new AtlasAsset[0];
                if (!quiet)
                {
                    Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
                }
                Reset();
                return(null);
            }

            if (skeletonJSON == null)
            {
                if (!quiet)
                {
                    Debug.LogError("Skeleton JSON file not set for SkeletonData asset: " + name, this);
                }
                Reset();
                return(null);
            }

                        #if !SPINE_TK2D
            if (atlasAssets.Length == 0)
            {
                Reset();
                return(null);
            }
                        #else
            if (atlasAssets.Length == 0 && spriteCollection == null)
            {
                Reset();
                return(null);
            }
                        #endif

            Atlas[] atlasArr = new Atlas[atlasAssets.Length];
            for (int i = 0; i < atlasAssets.Length; i++)
            {
                if (atlasAssets[i] == null)
                {
                    Reset();
                    return(null);
                }
                atlasArr[i] = atlasAssets[i].GetAtlas();
                if (atlasArr[i] == null)
                {
                    Reset();
                    return(null);
                }
            }

            if (skeletonData != null)
            {
                return(skeletonData);
            }

            AttachmentLoader attachmentLoader;
            float            skeletonDataScale;

                        #if !SPINE_TK2D
            attachmentLoader  = new AtlasAttachmentLoader(atlasArr);
            skeletonDataScale = scale;
                        #else
            if (spriteCollection != null)
            {
                attachmentLoader  = new Spine.Unity.TK2D.SpriteCollectionAttachmentLoader(spriteCollection);
                skeletonDataScale = (1.0f / (spriteCollection.invOrthoSize * spriteCollection.halfTargetHeight) * scale);
            }
            else
            {
                if (atlasArr.Length == 0)
                {
                    Reset();
                    if (!quiet)
                    {
                        Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
                    }
                    return(null);
                }
                attachmentLoader  = new AtlasAttachmentLoader(atlasArr);
                skeletonDataScale = scale;
            }
                        #endif

            try {
                //var stopwatch = new System.Diagnostics.Stopwatch();
                if (skeletonJSON.name.ToLower().Contains(".skel"))
                {
                    var input  = new MemoryStream(skeletonJSON.bytes);
                    var binary = new SkeletonBinary(attachmentLoader);
                    binary.Scale = skeletonDataScale;
                    //stopwatch.Start();
                    skeletonData = binary.ReadSkeletonData(input);
                }
                else
                {
                    var input = new StringReader(skeletonJSON.text);
                    var json  = new SkeletonJson(attachmentLoader);
                    json.Scale = skeletonDataScale;
                    //stopwatch.Start();
                    skeletonData = json.ReadSkeletonData(input);
                }
                //stopwatch.Stop();
                //Debug.Log(stopwatch.Elapsed);
            } catch (Exception ex) {
                if (!quiet)
                {
                    Debug.LogError("Error reading skeleton JSON file for SkeletonData asset: " + name + "\n" + ex.Message + "\n" + ex.StackTrace, this);
                }
                return(null);
            }

            stateData = new AnimationStateData(skeletonData);
            FillStateData();

            return(skeletonData);
        }
Ejemplo n.º 10
0
        /// <summary>Loads, caches and returns the SkeletonData from the skeleton data file. Returns the cached SkeletonData after the first time it is called. Pass false to prevent direct errors from being logged.</summary>
        public SkeletonData GetSkeletonData(bool quiet)
        {
            if (skeletonJSON == null)
            {
                if (!quiet)
                {
                    Debug.LogError("Skeleton JSON file not set for SkeletonData asset: " + name, this);
                }
                Clear();
                return(null);
            }

            // Disabled to support attachmentless/skinless SkeletonData.
            //			if (atlasAssets == null) {
            //				atlasAssets = new AtlasAsset[0];
            //				if (!quiet)
            //					Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
            //				Clear();
            //				return null;
            //			}
            //			#if !SPINE_TK2D
            //			if (atlasAssets.Length == 0) {
            //				Clear();
            //				return null;
            //			}
            //			#else
            //			if (atlasAssets.Length == 0 && spriteCollection == null) {
            //				Clear();
            //				return null;
            //			}
            //			#endif

            if (skeletonData != null)
            {
                return(skeletonData);
            }

            AttachmentLoader attachmentLoader;
            float            skeletonDataScale;

            Atlas[] atlasArray = this.GetAtlasArray();

#if !SPINE_TK2D
            attachmentLoader  = (atlasArray.Length == 0) ? (AttachmentLoader) new RegionlessAttachmentLoader() : (AttachmentLoader) new AtlasAttachmentLoader(atlasArray);
            skeletonDataScale = scale;
#else
            if (spriteCollection != null)
            {
                attachmentLoader  = new Spine.Unity.TK2D.SpriteCollectionAttachmentLoader(spriteCollection);
                skeletonDataScale = (1.0f / (spriteCollection.invOrthoSize * spriteCollection.halfTargetHeight) * scale);
            }
            else
            {
                if (atlasArray.Length == 0)
                {
                    Reset();
                    if (!quiet)
                    {
                        Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
                    }
                    return(null);
                }
                attachmentLoader  = new AtlasAttachmentLoader(atlasArray);
                skeletonDataScale = scale;
            }
#endif

            bool         hasBinaryExtension = skeletonJSON.name.ToLower().Contains(".skel");
            SkeletonData loadedSkeletonData = null;

            try {
                if (hasBinaryExtension)
                {
                    loadedSkeletonData = SkeletonDataAsset.ReadSkeletonData(skeletonJSON.bytes, attachmentLoader, skeletonDataScale);
                }
                else
                {
                    loadedSkeletonData = SkeletonDataAsset.ReadSkeletonData(skeletonJSON.text, attachmentLoader, skeletonDataScale);
                }
            } catch (Exception ex) {
                if (!quiet)
                {
                    Debug.LogError("Error reading skeleton JSON file for SkeletonData asset: " + name + "\n" + ex.Message + "\n" + ex.StackTrace, skeletonJSON);
                }
            }

#if UNITY_EDITOR
            if (loadedSkeletonData == null && !quiet && skeletonJSON != null)
            {
                string problemDescription = null;
                bool   isSpineSkeletonData;
                SkeletonDataCompatibility.VersionInfo fileVersion = SkeletonDataCompatibility.GetVersionInfo(skeletonJSON, out isSpineSkeletonData, ref problemDescription);
                if (problemDescription != null)
                {
                    if (!quiet)
                    {
                        Debug.LogError(problemDescription, skeletonJSON);
                    }
                    return(null);
                }
                CompatibilityProblemInfo compatibilityProblemInfo = SkeletonDataCompatibility.GetCompatibilityProblemInfo(fileVersion);
                if (compatibilityProblemInfo != null)
                {
                    SkeletonDataCompatibility.DisplayCompatibilityProblem(compatibilityProblemInfo.DescriptionString(), skeletonJSON);
                    return(null);
                }
            }
#endif
            if (loadedSkeletonData == null)
            {
                return(null);
            }

            if (skeletonDataModifiers != null)
            {
                foreach (var modifier in skeletonDataModifiers)
                {
                    if (modifier != null && !(isUpgradingBlendModeMaterials && modifier is BlendModeMaterialsAsset))
                    {
                        modifier.Apply(loadedSkeletonData);
                    }
                }
            }
            if (!isUpgradingBlendModeMaterials)
            {
                blendModeMaterials.ApplyMaterials(loadedSkeletonData);
            }

            this.InitializeWithData(loadedSkeletonData);

            return(skeletonData);
        }
Ejemplo n.º 11
0
        public SkeletonData GetSkeletonData(bool quiet)
        {
            if (skeletonJSON == null)
            {
                if (!quiet)
                {
                    Debug.LogError("Skeleton JSON file not set for SkeletonData asset: " + name, this);
                }
                Clear();
                return(null);
            }

            // Support attachmentless/skinless SkeletonData.
//			if (atlasAssets == null) {
//				atlasAssets = new AtlasAsset[0];
//				if (!quiet)
//					Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
//				Clear();
//				return null;
//			}
//			#if !SPINE_TK2D
//			if (atlasAssets.Length == 0) {
//				Clear();
//				return null;
//			}
//			#else
//			if (atlasAssets.Length == 0 && spriteCollection == null) {
//				Clear();
//				return null;
//			}
//			#endif

            if (skeletonData != null)
            {
                return(skeletonData);
            }

            AttachmentLoader attachmentLoader;
            float            skeletonDataScale;

            Atlas[] atlasArray = this.GetAtlasArray();

                        #if !SPINE_TK2D
            attachmentLoader  = new AtlasAttachmentLoader(atlasArray);
            skeletonDataScale = scale;
                        #else
            if (spriteCollection != null)
            {
                attachmentLoader  = new Spine.Unity.TK2D.SpriteCollectionAttachmentLoader(spriteCollection);
                skeletonDataScale = (1.0f / (spriteCollection.invOrthoSize * spriteCollection.halfTargetHeight) * scale);
            }
            else
            {
                if (atlasArray.Length == 0)
                {
                    Reset();
                    if (!quiet)
                    {
                        Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
                    }
                    return(null);
                }
                attachmentLoader  = new AtlasAttachmentLoader(atlasArray);
                skeletonDataScale = scale;
            }
                        #endif

            bool         isBinary = skeletonJSON.name.ToLower().Contains(".skel");
            SkeletonData loadedSkeletonData;

            try {
                if (isBinary)
                {
                    loadedSkeletonData = SkeletonDataAsset.ReadSkeletonData(skeletonJSON.bytes, attachmentLoader, skeletonDataScale);
                }
                else
                {
                    loadedSkeletonData = SkeletonDataAsset.ReadSkeletonData(skeletonJSON.text, attachmentLoader, skeletonDataScale);
                }
            } catch (Exception ex) {
                if (!quiet)
                {
                    Debug.LogError("Error reading skeleton JSON file for SkeletonData asset: " + name + "\n" + ex.Message + "\n" + ex.StackTrace, this);
                }
                return(null);
            }

            this.InitializeWithData(loadedSkeletonData);

            return(skeletonData);
        }
Ejemplo n.º 12
0
        /// <summary>
        /// 主要逻辑copy SkeletonJson.ReadAttachment
        /// </summary>
        /// <param name="sdEX"></param>
        /// <param name="atlasArray"></param>
        /// <returns></returns>
        public Skin GenSkinBySkniDataAsset(SkinDataEx sdEX, Atlas[] atlasArray)
        {
#if SPINE_TK2D
            throw new NotImplementedException("GenSkinBySkniDataAsset Not Implemented");
#endif
            float      scale            = this.skeletonDataAsset.scale;
            var        attachmentLoader = new AtlasAttachmentLoader(atlasArray);
            var        skin             = new Skin(sdEX.SkinName);
            var        linkedMeshes     = new List <SkeletonJson.LinkedMesh>();
            Attachment attachment       = null;
            foreach (var slot in sdEX.AllSlots)
            {
                var slotIndex = skeleton.Data.FindSlotIndex(slot.SlotName);
                foreach (var entry in slot.AllAttachments)
                {
                    switch (entry.type)
                    {
                    case AttachmentType.Region:
                    {
                        RegionAttachment region = attachmentLoader.NewRegionAttachment(skin, entry.AttachmentName, entry.PathName);
                        if (region == null)
                        {
                            Debug.LogError("RegionAttachment New Fail:" + entry.AttachmentName + "," + entry.PathName);
                            continue;
                        }
                        region.Path = entry.PathName;
                        #region Region数据的填充
                        CheckRegionData(entry.FloatValues);
                        Single w = 32, h = 32;
                        foreach (var f in entry.FloatValues)
                        {
                            switch (f.Key)
                            {
                            case "x":
                                region.x = f.FloatValue * scale;
                                break;

                            case "y":
                                region.y = f.FloatValue * scale;
                                break;

                            case "scaleX":
                                region.scaleX = f.FloatValue;
                                break;

                            case "scaleY":
                                region.scaleY = f.FloatValue;
                                break;

                            case "rotation":
                                region.rotation = f.FloatValue;
                                break;

                            case "width":
                                w = f.FloatValue;
                                break;

                            case "height":
                                h = f.FloatValue;
                                break;
                            }
                        }
                        region.width  = w * scale;
                        region.height = h * scale;
                        if (entry.ColorValues != null && entry.ColorValues.Count > 0)
                        {
                            foreach (var c in entry.ColorValues)
                            {
                                switch (c.Key)
                                {
                                case "color":
                                    region.r = c.ColorValue.r;
                                    region.g = c.ColorValue.g;
                                    region.b = c.ColorValue.b;
                                    region.a = c.ColorValue.a;
                                    break;
                                }
                            }
                        }
                        #endregion
                        region.UpdateOffset();
                        attachment = region;
                    }
                    break;

                    case AttachmentType.Boundingbox:
                    {
                        BoundingBoxAttachment box = attachmentLoader.NewBoundingBoxAttachment(skin, entry.AttachmentName);
                        if (box == null)
                        {
                            Debug.LogError("BoundingBoxAttachment New Fail:" + entry.AttachmentName);
                            continue;
                        }
                        #region Box数据填充
                        Int32 vertexCount = 0;
                        if (entry.IntValues != null && entry.IntValues.Count > 0)
                        {
                            foreach (var i in entry.IntValues)
                            {
                                if (i.Key.Equals("vertexCount"))
                                {
                                    vertexCount = i.IntValue;
                                    break;
                                }
                            }
                        }
                        foreach (var fs in entry.FloatArrayValues)
                        {
                            if (fs.Key.Equals("vertices"))
                            {
                                ReadVertices(fs, box, vertexCount << 1, scale);
                                break;
                            }
                        }
                        #endregion
                        attachment = box;
                    }
                    break;

                    case AttachmentType.Mesh:
                    case AttachmentType.Linkedmesh:
                    {
                        MeshAttachment mesh = attachmentLoader.NewMeshAttachment(skin, entry.AttachmentName, entry.PathName);
                        if (mesh == null)
                        {
                            Debug.LogError("MeshAttachment New Fail:" + entry.AttachmentName + "," + entry.PathName);
                            continue;
                        }
                        #region Mesh数据填充
                        mesh.Path = entry.PathName;
                        if (entry.ColorValues != null && entry.ColorValues.Count > 0)
                        {
                            foreach (var c in entry.ColorValues)
                            {
                                if (c.Key.Equals("color"))
                                {
                                    mesh.r = c.ColorValue.r;
                                    mesh.g = c.ColorValue.g;
                                    mesh.b = c.ColorValue.b;
                                    mesh.a = c.ColorValue.a;
                                    break;
                                }
                            }
                        }
                        Single w = 0, h = 0;
                        foreach (var f in entry.FloatValues)
                        {
                            switch (f.Key)
                            {
                            case "width":
                                w = f.FloatValue * scale;
                                break;

                            case "height":
                                h = f.FloatValue * scale;
                                break;
                            }
                        }
                        mesh.Width  = w;
                        mesh.Height = h;

                        String  parentStr = null, skinStr = null;
                        Boolean deform = true;
                        if (entry.StringValues != null && entry.StringValues.Count > 0)
                        {
                            foreach (var ss in entry.StringValues)
                            {
                                switch (ss.Key)
                                {
                                case "parent":
                                    parentStr = ss.StringValue;
                                    break;

                                case "skin":
                                    skinStr = ss.StringValue;
                                    break;
                                }
                            }
                        }
                        if (entry.BoolValues != null && entry.BoolValues.Count > 0)
                        {
                            foreach (var b in entry.BoolValues)
                            {
                                if (b.Key.Equals("deform"))
                                {
                                    deform = b.BooleanValue;
                                    break;
                                }
                            }
                        }
                        if (parentStr != null)
                        {
                            mesh.InheritDeform = deform;
                            linkedMeshes.Add(new SkeletonJson.LinkedMesh(mesh, skinStr, slotIndex, parentStr));
                        }
                        KeyFloatArrayPair kfap_Vs = new KeyFloatArrayPair();
                        Single[]          uvs     = null;
                        foreach (var fs in entry.FloatArrayValues)
                        {
                            switch (fs.Key)
                            {
                            case "vertices":
                                kfap_Vs = fs;
                                break;

                            case "uvs":
                                uvs = fs.FloatArrayValue.ToArray();
                                break;
                            }
                        }
                        ReadVertices(kfap_Vs, mesh, uvs.Length, scale);
                        Int32[] triangles = null, edges = null;
                        if (entry.IntArrayValues != null && entry.IntArrayValues.Count > 0)
                        {
                            foreach (var i32s in entry.IntArrayValues)
                            {
                                switch (i32s.Key)
                                {
                                case "triangles":
                                    triangles = i32s.IntArrayValue.ToArray();
                                    break;

                                case "edges":
                                    edges = i32s.IntArrayValue.ToArray();
                                    break;
                                }
                            }
                        }

                        mesh.triangles = triangles;
                        mesh.regionUVs = uvs;
                        mesh.UpdateUVs();

                        Int32 hull = 0;
                        if (entry.IntValues != null && entry.IntValues.Count > 0)
                        {
                            foreach (var i in entry.IntValues)
                            {
                                if (i.Key.Equals("hull"))
                                {
                                    hull = i.IntValue * 2;
                                    break;
                                }
                            }
                        }
                        if (hull != 0)
                        {
                            mesh.HullLength = hull;
                        }
                        if (edges != null)
                        {
                            mesh.Edges = edges;
                        }
                        #endregion
                        attachment = mesh;
                    }
                    break;

                    case AttachmentType.Path:
                    {
                        PathAttachment pathAttachment = attachmentLoader.NewPathAttachment(skin, entry.AttachmentName);
                        if (pathAttachment == null)
                        {
                            Debug.LogError("PathAttachment New Fail:" + entry.AttachmentName);
                            continue;
                        }
                        #region Path填充数据
                        Boolean closed = false, constantSpeed = false;
                        if (entry.BoolValues != null && entry.BoolValues.Count > 0)
                        {
                            foreach (var b in entry.BoolValues)
                            {
                                switch (b.Key)
                                {
                                case "closed":
                                    closed = b.BooleanValue;
                                    break;

                                case "constantSpeed":
                                    constantSpeed = b.BooleanValue;
                                    break;
                                }
                            }
                        }
                        pathAttachment.closed        = closed;
                        pathAttachment.constantSpeed = constantSpeed;

                        Int32 vertexCount = 0;
                        if (entry.IntValues != null && entry.IntValues.Count > 0)
                        {
                            foreach (var i in entry.IntValues)
                            {
                                if (i.Key.Equals("vertexCount"))
                                {
                                    vertexCount = i.IntValue;
                                    break;
                                }
                            }
                        }
                        foreach (var fs in entry.FloatArrayValues)
                        {
                            switch (fs.Key)
                            {
                            case "vertices":
                                ReadVertices(fs, pathAttachment, vertexCount << 1, scale);
                                break;

                            case "lengths":
                                var count = fs.FloatArrayValue.Count;
                                pathAttachment.lengths = new Single[count];
                                for (var idx = 0; idx < count; idx++)
                                {
                                    pathAttachment.lengths[idx] = fs.FloatArrayValue[idx] * scale;
                                }
                                break;
                            }
                        }
                        #endregion
                        attachment = pathAttachment;
                    }
                    break;

                    case AttachmentType.Point:
                    {
                        PointAttachment point = attachmentLoader.NewPointAttachment(skin, entry.AttachmentName);
                        if (point == null)
                        {
                            Debug.LogError("PointAttachment New Fail:" + entry.AttachmentName);
                            continue;
                        }
                        #region Point填充数据
                        Single x = 0, y = 0, r = 0;
                        if (entry.FloatValues != null && entry.FloatValues.Count > 0)
                        {
                            foreach (var f in entry.FloatValues)
                            {
                                switch (f.Key)
                                {
                                case "x":
                                    x = f.FloatValue * scale;
                                    break;

                                case "y":
                                    y = f.FloatValue * scale;
                                    break;

                                case "rotation":
                                    r = f.FloatValue;
                                    break;
                                }
                            }
                        }
                        point.x        = x;
                        point.y        = y;
                        point.rotation = r;
                        #endregion
                        attachment = point;
                    }
                    break;

                    case AttachmentType.Clipping:
                    {
                        ClippingAttachment clip = attachmentLoader.NewClippingAttachment(skin, entry.AttachmentName);
                        if (clip == null)
                        {
                            Debug.LogError("ClippingAttachment New Fail:" + entry.AttachmentName);
                            continue;
                        }
                        #region Clipping填充数据
                        String end = null;
                        if (entry.StringValues != null && entry.StringValues.Count > 0)
                        {
                            foreach (var s in entry.StringValues)
                            {
                                if (s.Key.Equals("end"))
                                {
                                    end = s.StringValue;
                                    break;
                                }
                            }
                        }
                        if (end != null)
                        {
                            SlotData sd = skeleton.Data.FindSlot(end);
                            if (sd == null)
                            {
                                throw new Exception("Clipping end slot not found: " + end);
                            }
                            clip.EndSlot = sd;
                        }

                        Int32 vertexCount = 0;
                        if (entry.IntValues != null && entry.IntValues.Count > 0)
                        {
                            foreach (var i in entry.IntValues)
                            {
                                if (i.Key.Equals("vertexCount"))
                                {
                                    vertexCount = i.IntValue;
                                    break;
                                }
                            }
                        }
                        foreach (var fs in entry.FloatArrayValues)
                        {
                            if (fs.Key.Equals("vertices"))
                            {
                                ReadVertices(fs, clip, vertexCount << 1, scale);
                                break;
                            }
                        }
                        #endregion
                        attachment = clip;
                    }
                    break;

                    default:
                        break;
                    }
                    skin.SetAttachment(slot.SlotName, entry.AttachmentName, attachment, skeleton);
                }
            }
            // Linked meshes.
            for (int i = 0, n = linkedMeshes.Count; i < n; i++)
            {
                var  linkedMesh = linkedMeshes[i];
                Skin sk         = linkedMesh.skin == null ? skeleton.Data.defaultSkin : skeleton.Data.FindSkin(linkedMesh.skin);
                if (sk == null)
                {
                    throw new Exception("Slot not found: " + linkedMesh.skin);
                }
                Attachment parent = sk.GetAttachment(linkedMesh.slotIndex, linkedMesh.parent);
                if (parent == null)
                {
                    throw new Exception("Parent mesh not found: " + linkedMesh.parent);
                }
                linkedMesh.mesh.ParentMesh = (MeshAttachment)parent;
                linkedMesh.mesh.UpdateUVs();
            }
            skeleton.Data.Skins.Add(skin);
            return(skin);
        }
Ejemplo n.º 13
0
    public SkeletonData GetSkeletonData(bool quiet)
    {
        if (atlasAssets == null)
        {
            atlasAssets = new AtlasAsset[0];
            if (!quiet)
            {
                Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
            }
            Reset();
            return(null);
        }

        if (skeletonJSON == null)
        {
            if (!quiet)
            {
                Debug.LogError("Skeleton JSON file not set for SkeletonData asset: " + name, this);
            }
            Reset();
            return(null);
        }

#if !SPINE_TK2D
        if (atlasAssets.Length == 0)
        {
            Reset();
            return(null);
        }
#else
        if (atlasAssets.Length == 0 && spriteCollection == null)
        {
            Reset();
            return(null);
        }
#endif

        Atlas[] atlasArr = new Atlas[atlasAssets.Length];
        for (int i = 0; i < atlasAssets.Length; i++)
        {
            if (atlasAssets[i] == null)
            {
                Reset();
                return(null);
            }
            atlasArr[i] = atlasAssets[i].GetAtlas();
            if (atlasArr[i] == null)
            {
                Reset();
                return(null);
            }
        }

        if (skeletonData != null)
        {
            return(skeletonData);
        }


#if UNITY_EDITOR || !RELEASE
        var  stopwatch = System.Diagnostics.Stopwatch.StartNew();
        bool isBinary  = false;
#endif

        AttachmentLoader attachmentLoader;
        float            skeletonDataScale;

#if !SPINE_TK2D
        attachmentLoader  = new AtlasAttachmentLoader(atlasArr);
        skeletonDataScale = scale;
#else
        if (spriteCollection != null)
        {
            attachmentLoader  = new SpriteCollectionAttachmentLoader(spriteCollection);
            skeletonDataScale = (1.0f / (spriteCollection.invOrthoSize * spriteCollection.halfTargetHeight) * scale) * 100f;
        }
        else
        {
            if (atlasArr.Length == 0)
            {
                Reset();
                if (!quiet)
                {
                    Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
                }
                return(null);
            }
            attachmentLoader  = new AtlasAttachmentLoader(atlasArr);
            skeletonDataScale = scale;
        }
#endif

        try {
            if (skeletonJSON.name.ToLower().Contains(".skel"))
            {
#if UNITY_EDITOR || !RELEASE
                isBinary = true;
#endif
                var input  = new MemoryStream(skeletonJSON.bytes);
                var binary = new SkeletonBinary(attachmentLoader);
                binary.Scale = skeletonDataScale;
                skeletonData = binary.ReadSkeletonData(input);
            }
            else
            {
                // tsteil - added this error
                Debug.LogError("Spine animation using json text, it should use binary! " + name);
                var input = new StringReader(skeletonJSON.text);
                var json  = new SkeletonJson(attachmentLoader);
                json.Scale   = skeletonDataScale;
                skeletonData = json.ReadSkeletonData(input);
            }
        } catch (Exception ex) {
            if (!quiet)
            {
                Debug.LogError("Error reading skeleton JSON file for SkeletonData asset: " + name + "\n" + ex.Message + "\n" + ex.StackTrace, this);
            }
            return(null);
        }

        stateData = new AnimationStateData(skeletonData);
        FillStateData();

#if UNITY_EDITOR || !RELEASE
        // tsteil - added some perf tracking
        stopwatch.Stop();
        if (isBinary == false)
        {
            Debug.LogWarning(string.Format("Spine SkeletonDataAsset: {0} ({2}) created in {1:N4} seconds.", name, stopwatch.Elapsed.TotalSeconds, isBinary ? "binary" : "text"));
        }
#endif

        return(skeletonData);
    }
Ejemplo n.º 14
0
    public SkeletonData GetSkeletonData(bool quiet)
    {
        if (this.atlasAssets == null)
        {
            this.atlasAssets = new AtlasAsset[0];
            if (!quiet)
            {
                Debug.LogError("Atlas not set for SkeletonData asset: " + base.get_name(), this);
            }
            this.Reset();
            return(null);
        }
        if (this.skeletonJSON == null)
        {
            if (!quiet)
            {
                Debug.LogError("Skeleton JSON file not set for SkeletonData asset: " + base.get_name(), this);
            }
            this.Reset();
            return(null);
        }
        if (this.atlasAssets.Length == 0)
        {
            this.Reset();
            return(null);
        }
        Atlas[] array = new Atlas[this.atlasAssets.Length];
        for (int i = 0; i < this.atlasAssets.Length; i++)
        {
            if (this.atlasAssets[i] == null)
            {
                this.Reset();
                return(null);
            }
            array[i] = this.atlasAssets[i].GetAtlas();
            if (array[i] == null)
            {
                this.Reset();
                return(null);
            }
        }
        if (this.skeletonData != null)
        {
            return(this.skeletonData);
        }
        AttachmentLoader attachmentLoader = new AtlasAttachmentLoader(array);
        float            num = this.scale;

        try
        {
            if (this.skeletonJSON.get_name().ToLower().Contains(".skel"))
            {
                MemoryStream input = new MemoryStream(this.skeletonJSON.get_bytes());
                this.skeletonData = new SkeletonBinary(attachmentLoader)
                {
                    Scale = num
                }.ReadSkeletonData(input);
            }
            else
            {
                StringReader reader = new StringReader(this.skeletonJSON.get_text());
                this.skeletonData = new SkeletonJson(attachmentLoader)
                {
                    Scale = num
                }.ReadSkeletonData(reader);
            }
        }
        catch (Exception ex)
        {
            if (!quiet)
            {
                Debug.LogError(string.Concat(new string[]
                {
                    "Error reading skeleton JSON file for SkeletonData asset: ",
                    base.get_name(),
                    "\n",
                    ex.get_Message(),
                    "\n",
                    ex.get_StackTrace()
                }), this);
            }
            return(null);
        }
        this.stateData = new AnimationStateData(this.skeletonData);
        this.FillStateData();
        return(this.skeletonData);
    }
Ejemplo n.º 15
0
        public SkeletonData GetSkeletonData(bool quiet)
        {
            if (this.atlasAssets == null)
            {
                this.atlasAssets = new AtlasAsset[0];
                if (!quiet)
                {
                }
                this.Reset();
                return(null);
            }
            if (this.skeletonJSON == null)
            {
                if (!quiet)
                {
                }
                this.Reset();
                return(null);
            }
            if (this.atlasAssets.Length == 0)
            {
                this.Reset();
                return(null);
            }
            Atlas[] array = new Atlas[this.atlasAssets.Length];
            for (int i = 0; i < this.atlasAssets.Length; i++)
            {
                if (this.atlasAssets[i] == null)
                {
                    this.Reset();
                    return(null);
                }
                array[i] = this.atlasAssets[i].GetAtlas();
                if (array[i] == null)
                {
                    this.Reset();
                    return(null);
                }
            }
            if (this.skeletonData != null)
            {
                return(this.skeletonData);
            }
            AttachmentLoader attachmentLoader = new AtlasAttachmentLoader(array);
            float            num = this.scale;

            try
            {
                if (this.skeletonJSON.name.ToLower().Contains(".skel"))
                {
                    MemoryStream input = new MemoryStream(this.skeletonJSON.bytes);
                    this.skeletonData = new SkeletonBinary(attachmentLoader)
                    {
                        Scale = num
                    }.ReadSkeletonData(input);
                }
                else
                {
                    StringReader reader = new StringReader(this.skeletonJSON.text);
                    this.skeletonData = new SkeletonJson(attachmentLoader)
                    {
                        Scale = num
                    }.ReadSkeletonData(reader);
                }
            }
            catch (Exception ex)
            {
                if (!quiet)
                {
                }
                return(null);
            }
            this.stateData = new AnimationStateData(this.skeletonData);
            this.FillStateData();
            return(this.skeletonData);
        }
Ejemplo n.º 16
0
        public SkeletonData GetSkeletonData(bool quiet)
        {
            if (atlasAssets == null)
            {
                atlasAssets = new AtlasAsset[0];
                if (!quiet)
                {
                    Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
                }
                Clear();
                return(null);
            }

            if (skeletonJSON == null)
            {
                if (!quiet)
                {
                    Debug.LogError("Skeleton JSON file not set for SkeletonData asset: " + name, this);
                }
                Clear();
                return(null);
            }

                        #if !SPINE_TK2D
            if (atlasAssets.Length == 0)
            {
                Clear();
                return(null);
            }
                        #else
            if (atlasAssets.Length == 0 && spriteCollection == null)
            {
                Reset();
                return(null);
            }
                        #endif

            Atlas[] atlasArr = new Atlas[atlasAssets.Length];
            for (int i = 0; i < atlasAssets.Length; i++)
            {
                if (atlasAssets[i] == null)
                {
                    Clear();
                    return(null);
                }
                atlasArr[i] = atlasAssets[i].GetAtlas();
                if (atlasArr[i] == null)
                {
                    Clear();
                    return(null);
                }
            }

            if (skeletonData != null)
            {
                return(skeletonData);
            }

            AttachmentLoader attachmentLoader;
            float            skeletonDataScale;

                        #if !SPINE_TK2D
            attachmentLoader  = new AtlasAttachmentLoader(atlasArr);
            skeletonDataScale = scale;
                        #else
            if (spriteCollection != null)
            {
                attachmentLoader  = new Spine.Unity.TK2D.SpriteCollectionAttachmentLoader(spriteCollection);
                skeletonDataScale = (1.0f / (spriteCollection.invOrthoSize * spriteCollection.halfTargetHeight) * scale);
            }
            else
            {
                if (atlasArr.Length == 0)
                {
                    Reset();
                    if (!quiet)
                    {
                        Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
                    }
                    return(null);
                }
                attachmentLoader  = new AtlasAttachmentLoader(atlasArr);
                skeletonDataScale = scale;
            }
                        #endif

            bool isBinary = skeletonJSON.name.ToLower().Contains(".skel");

            try {
                if (isBinary)
                {
                    skeletonData = SkeletonDataAsset.ReadSkeletonData(skeletonJSON.bytes, attachmentLoader, skeletonDataScale);
                }
                else
                {
                    skeletonData = SkeletonDataAsset.ReadSkeletonData(skeletonJSON.text, attachmentLoader, skeletonDataScale);
                }
            } catch (Exception ex) {
                if (!quiet)
                {
                    Debug.LogError("Error reading skeleton JSON file for SkeletonData asset: " + name + "\n" + ex.Message + "\n" + ex.StackTrace, this);
                }
                return(null);
            }

            stateData = new AnimationStateData(skeletonData);
            FillStateData();

            return(skeletonData);
        }