Example #1
0
        public void GetControlPoints(out Vector2[] points, out Edge[] edges, out int[] pins)
        {
            Debug.Assert(spriteMeshData != null);

            points = null;
            edges  = null;

            List <Vector2>        pointList = new List <Vector2>();
            List <Edge>           edgeList  = new List <Edge>();
            List <int>            pinList   = new List <int>();
            List <SpriteBoneData> bones     = new List <SpriteBoneData>(spriteMeshData.boneCount);

            for (int i = 0; i < spriteMeshData.boneCount; ++i)
            {
                bones.Add(spriteMeshData.GetBoneData(i));
            }

            foreach (var bone in bones)
            {
                var length = (bone.endPosition - bone.position).magnitude;

                if (length > 0f)
                {
                    int index1 = FindPoint(pointList, bone.position, 0.01f);
                    int index2 = FindPoint(pointList, bone.endPosition, 0.01f);

                    if (index1 == -1)
                    {
                        pointList.Add(bone.position);
                        index1 = pointList.Count - 1;
                    }

                    if (index2 == -1)
                    {
                        pointList.Add(bone.endPosition);
                        index2 = pointList.Count - 1;
                    }

                    edgeList.Add(new Edge(index1, index2));
                }
                else if (bone.length == 0f)
                {
                    pointList.Add(bone.position);
                    pinList.Add(pointList.Count - 1);
                }
            }

            points = pointList.ToArray();
            edges  = edgeList.ToArray();
            pins   = pinList.ToArray();
        }