Anima2D.SpriteMeshCache.GetBlendshapePositions C# (CSharp) Method

GetBlendshapePositions() private method

private GetBlendshapePositions ( BlendShape blendshape, float weight ) : List
blendshape BlendShape
weight float
return List
		List<Vector2> GetBlendshapePositions(BlendShape blendshape, float weight)
		{
			weight = Mathf.Clamp(weight, 0f, weight);

			List<Vector2> result = new List<Vector2>(m_TexVertices.Count);

			if(blendshape)
			{
				BlendShapeFrame prevFrame = null;
				BlendShapeFrame nextFrame = null;

				foreach(BlendShapeFrame frame in blendshape.frames)
				{
					if(frame && frame.weight < weight)
					{
						prevFrame = frame;
					}else if(frame && nextFrame == null)
					{
						nextFrame = frame;

						break;
					}
				}

				Vector3[] prevFrameVertices = null;
				Vector3[] nextFrameVertices = null;

				float prevWeight = 0f;
				float nextWeight = 0f;

				if(prevFrame)
				{
					prevFrameVertices = prevFrame.vertices;
					prevWeight = prevFrame.weight;

				}else{
					prevFrameVertices = ToVertices(m_TexVertices).ToArray();
				}

				if(nextFrame)
				{
					nextFrameVertices = nextFrame.vertices;
					nextWeight = nextFrame.weight;
				}else if(prevFrameVertices != null)
				{
					nextFrameVertices = prevFrameVertices;
					nextWeight = prevWeight;
				}

				if(prevFrameVertices != null &&
					nextFrameVertices != null &&
					prevFrameVertices.Length == nextFrameVertices.Length)
				{
					int count = prevFrameVertices.Length;
					float pixelsPerUnit = SpriteMeshUtils.GetSpritePixelsPerUnit(spriteMesh.sprite);

					float t = 0f;

					float weightDelta = (nextWeight - prevWeight);

					if(weightDelta > 0f)
					{
						t = (weight - prevWeight) / weightDelta;
					}
						
					for(int i = 0; i < count; ++i)
					{
						Vector3 v = Vector3.Lerp(prevFrameVertices[i],nextFrameVertices[i],t);

						result.Add(SpriteMeshUtils.VertexToTexCoord(spriteMesh,pivotPoint,v,pixelsPerUnit));
					}
				}
			}

			return result;
		}