getCurvePercent method

double getCurvePercent(
  1. int frameIndex,
  2. double percent
)

Implementation

double getCurvePercent(int frameIndex, double percent) {
  percent = MathUtils.clamp(percent, 0.0, 1.0);
  int i = frameIndex * CurveTimeline.bezierSize;
  final double type = curves[i];
  if (type == CurveTimeline.linear) return percent;
  if (type == CurveTimeline.stepped) return 0.0;
  i++;
  double x = 0.0;
  for (final int start = i, n = i + CurveTimeline.bezierSize - 1;
      i < n;
      i += 2) {
    x = curves[i];
    if (x >= percent) {
      double prevX, prevY;
      if (i == start) {
        prevX = 0.0;
        prevY = 0.0;
      } else {
        prevX = curves[i - 2];
        prevY = curves[i - 1];
      }
      return prevY +
          (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX);
    }
  }
  final double y = curves[i - 1];
  return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
}