Pathfinding.SimpleSmoothModifier.SmoothBezier C# (CSharp) Method

SmoothBezier() public method

public SmoothBezier ( List path ) : List
path List
return List
		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;
		}