#ifndef F_INTERPOLATE
#define F_INTERPOLATE

#include "FrameCallback.h"
#include "../FrameRender/P_Square.h"
#include "../FrameRender/P_Circle.h"
#include "../FrameRender/P_Checker.h"
#include "../FrameRender/P_Image.h"
#include "../FrameRender/P_LineSegment.h"
#include "../FrameRender/P_TransformCenter.h"
#include "../FrameRender/P_TransformRotate.h"

typedef void (*f_interpolate)(void* value, const void* start, const void* end, double progress);

typedef struct Interpolate {
	f_interpolate interpolate;
	void* value;
	const void* startValue;
	const void* endValue;
} Interpolate;

FrameCallback* Interpolate_setup(Interpolate obj);

void Interpolate_Square(Square* value, const Square* start, const Square* end, double progress);
void Interpolate_Circle(Circle* value, const Circle* start, const Circle* end, double progress);
void Interpolate_Checker(Checker* value, const Checker* start, const Checker* end, double progress);
void Interpolate_Image(Image* value, const Image* start, const Image* end, double progress);
void Interpolate_LineSegment(LineSegment* value, const LineSegment* start, const LineSegment* end, double progress);

void Interpolate_TransformCenter(TransformCenter* value, const TransformCenter* start, const TransformCenter* end, double progress);
void Interpolate_TransformRotate(TransformRotate* value, const TransformRotate* start, const TransformRotate* end, double progress);

#endif /* F_INTERPOLATE */
