// easing.hpp - Funciones de interpolació i easing
// © 2026 JailDesigner

#pragma once

namespace Easing {

// Ease-out quadratic: empieza rápido, desacelera suavemente
// t = progreso normalizado [0.0 - 1.0]
// retorna value interpolado [0.0 - 1.0]
inline auto easeOutQuad(float t) -> float {
    return 1.0F - ((1.0F - t) * (1.0F - t));
}

// Ease-in quadratic: empieza lento, acelera
// t = progreso normalizado [0.0 - 1.0]
// retorna value interpolado [0.0 - 1.0]
inline auto easeInQuad(float t) -> float {
    return t * t;
}

// Ease-in-out quadratic: acelera al inicio, desacelera al final
// t = progreso normalizado [0.0 - 1.0]
// retorna value interpolado [0.0 - 1.0]
inline auto easeInOutQuad(float t) -> float {
    return (t < 0.5F)
        ? 2.0F * t * t
        : 1.0F - ((-2.0F * t + 2.0F) * (-2.0F * t + 2.0F) / 2.0F);
}

// Ease-out cubic: desaceleración más suave que quadratic
// t = progreso normalizado [0.0 - 1.0]
// retorna value interpolado [0.0 - 1.0]
inline auto easeOutCubic(float t) -> float {
    float t1 = 1.0F - t;
    return 1.0F - (t1 * t1 * t1);
}

// Interpolación lineal básica (para referencia)
inline auto lerp(float start, float end, float t) -> float {
    return start + ((end - start) * t);
}

}  // namespace Easing
