public List<Vector3> SmoothBezier (List<Vector3> path) {
if (subdivisions < 0) subdivisions = 0;
int subMult = 1 << subdivisions;
List<Vector3> subdivided = ListPool<Vector3>.Claim ();
//new Vector3[(path.Length-1)*(int)subMult+1];
for (int i=0;i<path.Count-1;i++) {
Vector3 tangent1 = Vector3.zero;
Vector3 tangent2 = Vector3.zero;
if (i == 0) {
tangent1 = path[i+1]-path[i];
} else {
tangent1 = path[i+1]-path[i-1];
}
if (i == path.Count-2) {
tangent2 = path[i]-path[i+1];
} else {
tangent2 = path[i]-path[i+2];
}
tangent1 *= bezierTangentLength;
tangent2 *= bezierTangentLength;
Vector3 v1 = path[i];
Vector3 v2 = v1+tangent1;
Vector3 v4 = path[i+1];
Vector3 v3 = v4+tangent2;
for (int j=0;j<subMult;j++) {
subdivided.Add (AstarMath.CubicBezier (v1,v2,v3,v4, (float)j/subMult));
}
}
//Assign the last point
subdivided.Add (path[path.Count-1]);
return subdivided;
}