/// <summary>
        ///     Initialises a new instance of the <see cref="CameraPathInterpolator" /> class.
        /// </summary>
        /// <param name="points">The list of nodes along a complete camera path.</param>
        /// <param name="target">The target, if any, that the camera focusses on as it traverses the path.</param>
        internal CameraPathInterpolator(IEnumerable <CameraPoint> points, Vec3d target = null)
        {
            _cameraPath = points.ToList();

            // NOTE: We don't count the origin position in the count here.
            _nodesToTravel = _cameraPath.Count - 1;

            _point = new CameraPoint();

            var linearPath = _cameraPath.Count == 2;

            var tmpInterpolator = linearPath
                ? LinearInterpolator.Create(_point)
                : CubicInterpolator.Create(_point);

            _interpolator = target != null
                ? TargetInterpolator.Create(tmpInterpolator, _point, target)
                : tmpInterpolator;
        }
 /// <summary>
 ///     Initialises a new instance of the <see cref="TargetInterpolator" /> class.
 /// </summary>
 /// <param name="interpolator">The base interpolator to use for position and additional angles.</param>
 /// <param name="point">The camera point to transpose values into.</param>
 /// <param name="targetPos">The target position for the camera to focus on.</param>
 internal static ICameraPointInterpolator Create(
     ICameraPointInterpolator interpolator, CameraPoint point, Vec3d targetPos)
 {
     return(new TargetInterpolator(interpolator, point, targetPos));
 }
 /// <summary>
 ///     Initialises a new instance of the <see cref="TargetInterpolator" /> class.
 /// </summary>
 /// <param name="interpolator">The base interpolator to use for position and additional angles.</param>
 /// <param name="point">The camera point to transpose values into.</param>
 /// <param name="targetPos">The target position for the camera to focus on.</param>
 private TargetInterpolator(ICameraPointInterpolator interpolator, CameraPoint point, Vec3d targetPos) :
     base(point)
 {
     (Interpolator, TargetPos) = (interpolator, targetPos);
 }