Example #1
0
    public SkeletonData LoadSkeletonBinary(byte[] binaryTemp)
    {
        SkeletonData skeletonData = new SkeletonData();

        skeletonData.name = null;

        m_temp = binaryTemp;

        //Version
        ReadString();
        //Hash
        ReadString();
        //Width
        ReadFloat();
        //Height
        ReadFloat();
        //Nonessential
        m_nonessential = ReadBoolean();

        //BoneNum
        int boneNum = ReadInt();

        for (int i = 0; i < boneNum; i++)
        {
            //Bone
            string   name   = ReadString();
            BoneData parent = null;
            //index
            int parentIndex = ReadInt() - 1;
            if (parentIndex != -1)
            {
                parent = skeletonData.bones[parentIndex];
            }

            BoneData boneData = new BoneData(name, parent);
            //X
            boneData.x = ReadFloat();
            //Y
            boneData.y = ReadFloat();
            //scaleX
            boneData.ScaleX = ReadFloat();
            //scaleY
            boneData.ScaleY = ReadFloat();
            //rotation
            boneData.Rotation = ReadFloat();
            //length
            boneData.Length = ReadFloat();
            //inheritScale
            boneData.InheritScale = ReadBoolean();
            //inheritRotation
            boneData.InheritRotation = ReadBoolean();
            //Color
            if (m_nonessential)
            {
                ReadColor();
            }
            skeletonData.AddBone(boneData);
        }

        //SlotsNum
        int slotsNum = ReadInt();

        for (int i = 0; i < slotsNum; i++)
        {
            string   slotName  = ReadString();
            int      boneIndex = ReadInt();
            BoneData boneData  = skeletonData.bones[boneIndex];
            SlotData slotData  = new SlotData(slotName, boneData);

            Color color = ReadColor();                //Color
            slotData.R = color.r;
            slotData.G = color.g;
            slotData.B = color.b;
            slotData.A = color.a;

            slotData.AttachmentName   = ReadString();
            slotData.AdditiveBlending = ReadBoolean();

            skeletonData.AddSlot(slotData);
        }

        //Default skin
        Skin defaultSkin = readSkin("default", m_nonessential);

        if (defaultSkin != null)
        {
            skeletonData.defaultSkin = defaultSkin;
            skeletonData.AddSkin(defaultSkin);
        }

        //Skin
        for (int i = 0, n = ReadInt(); i < n; i++)
        {
            skeletonData.AddSkin(readSkin(ReadString(), m_nonessential));
        }

        //Events
        for (int i = 0, n = ReadInt(); i < n; i++)
        {
            EventData eventData = new EventData(ReadString());
            eventData.Int    = ReadInt(false);
            eventData.Float  = ReadFloat();
            eventData.String = ReadString();
            skeletonData.AddEvent(eventData);
        }

        //Animations
        for (int i = 0, n = ReadInt(); i < n; i++)
        {
            readAnimation(ReadString(), skeletonData);
        }

        skeletonData.bones.TrimExcess();
        skeletonData.slots.TrimExcess();
        skeletonData.skins.TrimExcess();
        skeletonData.animations.TrimExcess();
        return(skeletonData);
    }
        private void ReadSkeletonSlots(SkeletonData skeletonData, JObject data)
        {
            foreach (JToken slot in data["slots"].Children())
            {
                var slotName = (String) slot["name"];
                var boneName = (String) slot["bone"];
                BoneData boneData = skeletonData.FindBone(boneName);
                if (boneData == null)
                {
                    throw new SerializationException("Slot bone not found: " + boneName);
                }

                var slotData = new SlotData(slotName, boneData);

                var color = (String) slot["color"];

                if (color != null)
                {
                    slotData.Color = ReadColor(color);
                }

                slotData.AttachmentName = (String) slot["attachment"];

                skeletonData.AddSlot(slotData);
            }
        }