/*
 * Easings.h
 *
 * Created: Sun Jun 22 2025 15:51:51
 *  Author Chris
 */
#ifndef EASINGS_H_
#define EASINGS_H_

// ============================================================================================
// Includes
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <math.h>


// ============================================================================================
// Defines


// ============================================================================================
// Datatypes
typedef enum 
{
	LINEAR,
	IN_SINE,
	IN_QUAD,
	IN_CUBIC,
	IN_QUART,
	IN_QUINT,
	IN_EXPO,
	IN_CIRC,
	OUT_SINE,
	OUT_QUAD,
	OUT_CUBIC,
	OUT_QUART,
	OUT_QUINT,
	OUT_EXPO,
	OUT_CIRC,
	INOUT_SINE,
	INOUT_QUAD,
	INOUT_CUBIC,
	INOUT_QUART,
	INOUT_QUINT,
	INOUT_EXPO,
	INOUT_CIRC
} Easing;


// ============================================================================================
// Function Declarations
float Linear(float x);
float Ease_In_Sine(float x);
float Ease_Out_Sine(float x);
float Ease_InOut_Sine(float x);
float Ease_In_Quad(float x);
float Ease_Out_Quad(float x);
float Ease_InOut_Quad(float x);
float Ease_In_Cubic(float x);
float Ease_Out_Cubic(float x);
float Ease_InOut_Cubic(float x);
float Ease_In_Quart(float x);
float Ease_Out_Quart(float x);
float Ease_InOut_Quart(float x);
float Ease_In_Quint(float x);
float Ease_Out_Quint(float x);
float Ease_InOut_Quint(float x);
float Ease_In_Expo(float x);
float Ease_Out_Expo(float x);
float Ease_InOut_Expo(float x);
float Ease_In_Circ(float x);
float Ease_Out_Circ(float x);
float Ease_InOut_Circ(float x);

float ApplyEasing2(float ratio, float value1, float value2, Easing easing);
float ApplyEasing1(float ratio, Easing easing);


#endif /* EASINGS_H_ */