#ifndef TWEEN_H
#define TWEEN_H

#include "common.h"

typedef enum ease_e
{
    EASE_LINEAR,
    /*
    EASE_IN_SINE,
    EASE_OUT_SINE,
    EASE_IN_OUT_SINE,
    EASE_IN_QUAD,
    EASE_OUT_QUAD,
    EASE_IN_OUT_QUAD,
    EASE_IN_CUBIC,
    */
    EASE_OUT_CUBIC
    /*
    EASE_IN_OUT_CUBIC,
    EASE_IN_QUART,
    EASE_OUT_QUART,
    EASE_IN_OUT_QUART,
    EASE_IN_QUINT,
    EASE_OUT_QUINT,
    EASE_IN_OUT_QUINT,
    EASE_IN_EXPO,
    EASE_OUT_EXPO,
    EASE_IN_OUT_EXPO,
    EASE_IN_CIRC,
    EASE_OUT_CIRC,
    EASE_IN_OUT_CIRC,
    EASE_IN_BACK,
    EASE_OUT_BACK,
    EASE_IN_OUT_BACK,
    EASE_IN_ELASTIC,
    EASE_OUT_ELASTIC,
    EASE_IN_OUT_ELASTIC,
    EASE_IN_BOUNCE,
    EASE_OUT_BOUNCE,
    EASE_IN_OUT_BOUNCE
    */
} ease_t;

typedef struct tween_param_s tween_param_t;

extern void           Tween_Init(void);
extern tween_param_t* Tween_ParamCreate(unsigned int time, float value_start, float value_finish, ease_t ease);
extern void           Tween_ParamDelete(tween_param_t* param);
extern void           Tween_ParamResetValues(tween_param_t* param, float value_start, float value_finish);
extern void           Tween_ParamRun(tween_param_t* param);
extern void           Tween_ParamPause(tween_param_t* param);
extern void           Tween_ParamStop(tween_param_t* param, bool set_value_finish);
extern float          Tween_ParamGetValue(tween_param_t* param);
extern bool           Tween_ParamIsFinish(tween_param_t* param);
extern void           Tween_Update(void);
extern void           Tween_Quit(void);

#endif
