/// <summary>
 ///     Override this to provide your own offset on every frame.
 /// </summary>
 /// <param name="frameInfo"></param>
 /// <returns></returns>
 public Vector GetOffset(LottieFrameInfo <Vector?> frameInfo)
 {
     if (Value == null)
     {
         throw new ArgumentException("You must provide a static value in the constructor " +
                                     ", call setValue, or override getValue.");
     }
     return(Value.Value);
 }
        public override int?GetValue(LottieFrameInfo <int?> frameInfo)
        {
            var originalValue = MiscUtils.Lerp(
                frameInfo.StartValue.Value,
                frameInfo.EndValue.Value,
                frameInfo.InterpolatedKeyframeProgress
                );
            var newValue = GetOffset(frameInfo);

            return(originalValue + newValue);
        }
        public override float?GetValue(LottieFrameInfo <float?> frameInfo)
        {
            var originalValue = MiscUtils.Lerp(
                frameInfo.StartValue.Value,
                frameInfo.EndValue.Value,
                frameInfo.InterpolatedKeyframeProgress
                );
            var offset = GetOffset(frameInfo);

            return((float?)(originalValue + offset));
        }
        public override Vector?GetValue(LottieFrameInfo <Vector?> frameInfo)
        {
            var point = new Vector(
                MiscUtils.Lerp(
                    frameInfo.StartValue.Value.X,
                    frameInfo.EndValue.Value.X,
                    frameInfo.InterpolatedKeyframeProgress),
                MiscUtils.Lerp(
                    frameInfo.StartValue.Value.Y,
                    frameInfo.EndValue.Value.Y,
                    frameInfo.InterpolatedKeyframeProgress)
                );

            var offset = GetOffset(frameInfo);

            point += offset;
            return(point);
        }