package com.wuyr.catchpiggy.customize;

import android.graphics.PathMeasure;
import android.graphics.PointF;

import java.util.Collections;

/**
 * Created by wuyr on 17-11-22 上午12:45.
 */

/**
 * 关键帧,参考自SDK
 */
class PathKeyframesSupport extends Keyframes {

    private static final float PRECISION = 0.5f;
    private float[] mX;
    private float[] mY;
    private int numPoints;
    private boolean isFirstReverse;

    PathKeyframesSupport(MyPath path) {
        super(path);
        isFirstReverse = true;
    }

    @Override
    void init(MyPath path) {
        final PathMeasure pathMeasure = new PathMeasure(path, false);
        final float pathLength = pathMeasure.getLength();
        numPoints = (int) (pathLength / PRECISION) + 1;
        mX = new float[numPoints];
        mY = new float[numPoints];
        final float[] position = new float[2];
        for (int i = 0; i < numPoints; ++i) {
            final float distance = (i * pathLength) / (numPoints - 1);
            pathMeasure.getPosTan(distance, position, null /* tangent */);
            mX[i] = position[0];
            mY[i] = position[1];
        }
        mPath = path;
    }

    @Override
    PointF getValue(float fraction) {
        int index = (int) (numPoints * fraction);
        mTempPointF.set(mX[index], mY[index]);
        return mTempPointF;
    }

    @Override
    void reverse() {
        if (isFirstReverse) {
            super.reverse();
            isFirstReverse = false;
        } else {
            Collections.reverse(mPath.getData());
            float[] temp = new float[mX.length];
            for (int i = 0; i < mX.length; i++) {
                temp[i] = mX[mX.length - i - 1];
            }
            mX = temp;

            float[] temp2 = new float[mY.length];
            for (int i = 0; i < mY.length; i++) {
                temp2[i] = mY[mY.length - i - 1];
            }
            mY = temp2;
        }
    }
}