public void CalculatePositionAndRotationOnMesh(float progressionOnMesh, float widthOffset, out Vector3 calculatedPos, out Quaternion calculatedRot, out float calculatedHeightValue)
{
float fractionalIndex = progressionOnMesh * ((float)activeMeshLinesList.Count - 1);
int ceilIndex = Mathf.CeilToInt(fractionalIndex);
int floorIndex = Mathf.FloorToInt(fractionalIndex);
float lerpStep = ceilIndex - fractionalIndex;
Transform ceilTransform = activeMeshLinesList[ceilIndex].transform;
Vector3 ceilPos = ceilTransform.position;
Quaternion ceiltRot = ceilTransform.rotation;
float ceilHeight = ceilTransform.GetComponent<MeshLine>().CalculateHeighOnLine(widthOffset); // might be worth caching the component
Transform floorTransform = activeMeshLinesList[floorIndex].transform;
Vector3 floorPos = floorTransform.position;
Quaternion floorRot = floorTransform.rotation;
float floorHeight = floorTransform.GetComponent<MeshLine>().CalculateHeighOnLine(widthOffset);
Vector3 lerpedPos = Vector3.Lerp(floorPos, ceilPos, lerpStep);
Quaternion lerpedRot = Quaternion.Slerp(floorRot, ceiltRot, lerpStep);
float lerpedHeight = Mathf.Lerp(floorHeight, ceilHeight, lerpStep);
calculatedPos = lerpedPos;
calculatedRot = lerpedRot;
calculatedHeightValue = lerpedHeight;
}