public void SetAllTangentTypes(Node.TangentType type) { for (int s = 0; s < segments.Length; s++) { segments[s].start.type = type; segments[s].end.type = type; } }
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); } } }