コード例 #1
0
 public void SetAllTangentTypes(Node.TangentType type)
 {
     for (int s = 0; s < segments.Length; s++)
     {
         segments[s].start.type = type;
         segments[s].end.type   = type;
     }
 }
コード例 #2
0
        public void UpdateTangent(int n)
        {
            //first
            if (n == 0)
            {
                Node.TangentType type = segments[n].start.type;
                if (type == Node.TangentType.auto || type == Node.TangentType.linear)
                {
                    segments[n].start.dir = Node.LinearTangent(segments[n].start.pos, segments[n].end.pos);
                }
                //do nothing for correlated and broken
            }

            //common case
            else if (n != segments.Length)
            {
                Node.TangentType type = segments[n].start.type;
                segments[n - 1].end.type = type;
                if (type == Node.TangentType.broken)
                {
                    return;                                                          //do nothing for broken
                }
                Vector3 inDir  = segments[n - 1].end.dir;
                Vector3 outDir = segments[n].start.dir;

                if (type == Node.TangentType.auto)
                {
                    (inDir, outDir) = Node.AutoTangents(segments[n - 1].start.pos, segments[n - 1].end.pos, segments[n].end.pos);
                }

                else if (type == Node.TangentType.linear)
                {
                    (inDir, outDir) = Node.LinearTangents(segments[n - 1].start.pos, segments[n - 1].end.pos, segments[n].end.pos);
                }

                else if (type == Node.TangentType.correlated)
                {
                    inDir = Node.CorrelatedInTangent(inDir, outDir);
                }

                segments[n - 1].end.dir = inDir;
                segments[n].start.dir   = outDir;
            }

            //last
            else
            {
                Node.TangentType type = segments[n - 1].end.type;
                if (type == Node.TangentType.auto || type == Node.TangentType.linear)
                {
                    segments[n - 1].end.dir = Node.LinearTangent(segments[n - 1].end.pos, segments[n - 1].start.pos);
                }
            }
        }