private Vector3[] GetPivotVectors(PivotSample[] samples, float width, Rect rect, float height, bool loop)
        {
            if (samples.Length == 0 || width < 0.33f) // not pivots for super small anims
            {
                return(new Vector3[0]);
            }

            List <Vector3> vectorList = new List <Vector3>();

            for (int i = 0; i < samples.Length; i++)
            {
                PivotSample s     = samples[i];
                Vector3     point = Vector3.zero;
                point.x = m_TimeArea.TimeToPixel(s.m_Time, rect);
                point.y = height / 16 + s.m_Weight * 12 * height / 16;
                vectorList.Add(point);
            }
            if (loop && vectorList[vectorList.Count - 1].x <= rect.width)
            {
                float          pos         = vectorList[vectorList.Count - 1].x;
                int            iterator    = 0;
                int            multiplier  = 1;
                List <Vector3> loopVectors = new List <Vector3>();
                while (pos < rect.width)
                {
                    if (iterator > vectorList.Count - 1)
                    {
                        iterator = 0;
                        multiplier++;
                    }
                    Vector3 point = vectorList[iterator];
                    point.x += (multiplier * width);
                    pos      = point.x;
                    loopVectors.Add(point);
                    iterator++;
                }
                vectorList.AddRange(loopVectors);
            }
            List <Vector3> controls = GetControls(vectorList, .5f);

            vectorList.Clear();
            for (int i = 0; i < controls.Count - 3; i += 3)
            {
                Vector3 p0 = controls[i];
                Vector3 p1 = controls[i + 1];
                Vector3 p2 = controls[i + 2];
                Vector3 p3 = controls[i + 3];
                if (i == 0)
                {
                    vectorList.Add(CalculatePoint(0, p0, p1, p2, p3));
                }
                for (int j = 1; j <= 10; j++)
                {
                    vectorList.Add(CalculatePoint(j / 10f, p0, p1, p2, p3));
                }
            }
            return(vectorList.ToArray());
        }
예제 #2
0
        private Vector3[] GetPivotVectors(PivotSample[] samples, float width, Rect rect, float height, bool loop)
        {
            if ((samples.Length == 0) || (width < 0.33f))
            {
                return(new Vector3[0]);
            }
            List <Vector3> segmentPoints = new List <Vector3>();

            for (int i = 0; i < samples.Length; i++)
            {
                PivotSample sample = samples[i];
                Vector3     zero   = Vector3.zero;
                zero.x = this.m_TimeArea.TimeToPixel(sample.m_Time, rect);
                zero.y = (height / 16f) + (((sample.m_Weight * 12f) * height) / 16f);
                segmentPoints.Add(zero);
            }
            if (loop)
            {
                Vector3 vector7 = segmentPoints[segmentPoints.Count - 1];
                if (vector7.x <= rect.width)
                {
                    Vector3        vector8    = segmentPoints[segmentPoints.Count - 1];
                    float          x          = vector8.x;
                    int            num3       = 0;
                    int            num4       = 1;
                    List <Vector3> collection = new List <Vector3>();
                    while (x < rect.width)
                    {
                        if (num3 > (segmentPoints.Count - 1))
                        {
                            num3 = 0;
                            num4++;
                        }
                        Vector3 item = segmentPoints[num3];
                        item.x += num4 * width;
                        x       = item.x;
                        collection.Add(item);
                        num3++;
                    }
                    segmentPoints.AddRange(collection);
                }
            }
            List <Vector3> controls = this.GetControls(segmentPoints, 0.5f);

            segmentPoints.Clear();
            for (int j = 0; j < (controls.Count - 3); j += 3)
            {
                Vector3 vector3 = controls[j];
                Vector3 vector4 = controls[j + 1];
                Vector3 vector5 = controls[j + 2];
                Vector3 vector6 = controls[j + 3];
                if (j == 0)
                {
                    segmentPoints.Add(this.CalculatePoint(0f, vector3, vector4, vector5, vector6));
                }
                for (int k = 1; k <= 10; k++)
                {
                    segmentPoints.Add(this.CalculatePoint(((float)k) / 10f, vector3, vector4, vector5, vector6));
                }
            }
            return(segmentPoints.ToArray());
        }
예제 #3
0
 private Vector3[] GetPivotVectors(PivotSample[] samples, float width, Rect rect, float height, bool loop)
 {
     if ((samples.Length == 0) || (width < 0.33f))
     {
         return new Vector3[0];
     }
     List<Vector3> segmentPoints = new List<Vector3>();
     for (int i = 0; i < samples.Length; i++)
     {
         PivotSample sample = samples[i];
         Vector3 zero = Vector3.zero;
         zero.x = this.m_TimeArea.TimeToPixel(sample.m_Time, rect);
         zero.y = (height / 16f) + (((sample.m_Weight * 12f) * height) / 16f);
         segmentPoints.Add(zero);
     }
     if (loop)
     {
         Vector3 vector7 = segmentPoints[segmentPoints.Count - 1];
         if (vector7.x <= rect.width)
         {
             Vector3 vector8 = segmentPoints[segmentPoints.Count - 1];
             float x = vector8.x;
             int num3 = 0;
             int num4 = 1;
             List<Vector3> collection = new List<Vector3>();
             while (x < rect.width)
             {
                 if (num3 > (segmentPoints.Count - 1))
                 {
                     num3 = 0;
                     num4++;
                 }
                 Vector3 item = segmentPoints[num3];
                 item.x += num4 * width;
                 x = item.x;
                 collection.Add(item);
                 num3++;
             }
             segmentPoints.AddRange(collection);
         }
     }
     List<Vector3> controls = this.GetControls(segmentPoints, 0.5f);
     segmentPoints.Clear();
     for (int j = 0; j < (controls.Count - 3); j += 3)
     {
         Vector3 vector3 = controls[j];
         Vector3 vector4 = controls[j + 1];
         Vector3 vector5 = controls[j + 2];
         Vector3 vector6 = controls[j + 3];
         if (j == 0)
         {
             segmentPoints.Add(this.CalculatePoint(0f, vector3, vector4, vector5, vector6));
         }
         for (int k = 1; k <= 10; k++)
         {
             segmentPoints.Add(this.CalculatePoint(((float) k) / 10f, vector3, vector4, vector5, vector6));
         }
     }
     return segmentPoints.ToArray();
 }