Beispiel #1
0
        public static void DrawPath(Slot s, PathAttachment p, Transform t, bool includeName)
        {
            int worldVerticesLength = p.WorldVerticesLength;

            if (pathVertexBuffer == null || pathVertexBuffer.Length < worldVerticesLength)
            {
                pathVertexBuffer = new float[worldVerticesLength];
            }

            float[] pv = pathVertexBuffer;
            p.ComputeWorldVertices(s, pv);

            var ocolor = Handles.color;

            Handles.color = SpineHandles.PathColor;

            Matrix4x4 m = t.localToWorldMatrix;
            const int step = 6;
            int       n = worldVerticesLength - step;
            Vector3   p0, p1, p2, p3;

            for (int i = 2; i < n; i += step)
            {
                p0 = m.MultiplyPoint(new Vector3(pv[i], pv[i + 1]));
                p1 = m.MultiplyPoint(new Vector3(pv[i + 2], pv[i + 3]));
                p2 = m.MultiplyPoint(new Vector3(pv[i + 4], pv[i + 5]));
                p3 = m.MultiplyPoint(new Vector3(pv[i + 6], pv[i + 7]));
                DrawCubicBezier(p0, p1, p2, p3);
            }

            n += step;
            if (p.Closed)
            {
                p0 = m.MultiplyPoint(new Vector3(pv[n - 4], pv[n - 3]));
                p1 = m.MultiplyPoint(new Vector3(pv[n - 2], pv[n - 1]));
                p2 = m.MultiplyPoint(new Vector3(pv[0], pv[1]));
                p3 = m.MultiplyPoint(new Vector3(pv[2], pv[3]));
                DrawCubicBezier(p0, p1, p2, p3);
            }

            const float endCapSize = 0.05f;
            Vector3     firstPoint = m.MultiplyPoint(new Vector3(pv[2], pv[3]));

            SpineHandles.DrawDot(firstPoint, endCapSize);

            //if (!p.Closed) SpineHandles.DrawDot(m.MultiplyPoint(new Vector3(pv[n - 4], pv[n - 3])), endCapSize);
            if (includeName)
            {
                Handles.Label(firstPoint + new Vector3(0, 0.1f), p.Name, PathNameStyle);
            }

            Handles.color = ocolor;
        }