ASW Lib
A.D.S. Games SDL Wrapper Library. A library targeted at Allegro4 users who want to switch to SDL3 and use modern c++.
Loading...
Searching...
No Matches
easing.h
Go to the documentation of this file.
1
8
9#ifndef ASW_EASING_H
10#define ASW_EASING_H
11
12#include <algorithm>
13#include <concepts>
14#include <functional>
15
16namespace asw::easing {
17
18// --- Linear ---
19float linear(float t);
20
21// --- Quadratic ---
22float ease_in_quad(float t);
23float ease_out_quad(float t);
24float ease_in_out_quad(float t);
25
26// --- Cubic ---
27float ease_in_cubic(float t);
28float ease_out_cubic(float t);
29float ease_in_out_cubic(float t);
30
31// --- Sine ---
32float ease_in_sine(float t);
33float ease_out_sine(float t);
34float ease_in_out_sine(float t);
35
36// --- Exponential ---
37float ease_in_expo(float t);
38float ease_out_expo(float t);
39float ease_in_out_expo(float t);
40
41// --- Elastic ---
42float ease_in_elastic(float t);
43float ease_out_elastic(float t);
44
45// --- Bounce ---
46float ease_in_bounce(float t);
47float ease_out_bounce(float t);
48
49// --- Back (overshoot) ---
50float ease_in_back(float t);
51float ease_out_back(float t);
52
53// --- Convenience ---
54
60template <typename T, typename Func> T ease(const T& a, const T& b, float t, Func func)
61{
62 static_assert(std::is_arithmetic_v<T>, "T must be an arithmetic type");
63 static_assert(std::is_invocable_r_v<float, Func, float>,
64 "Func must be a callable that takes a float and returns a float");
65
66 return a + (b - a) * func(std::clamp(t, 0.0F, 1.0F));
67}
68
69} // namespace asw::easing
70
71#endif // ASW_EASING_H
float ease_out_cubic(float t)
Definition easing.cpp:34
float ease_out_quad(float t)
Definition easing.cpp:18
float ease_in_out_expo(float t)
Definition easing.cpp:73
float linear(float t)
Definition easing.cpp:7
float ease_in_elastic(float t)
Definition easing.cpp:91
T ease(const T &a, const T &b, float t, Func func)
Definition easing.h:60
float ease_out_bounce(float t)
Definition easing.cpp:113
float ease_in_out_quad(float t)
Definition easing.cpp:23
float ease_out_back(float t)
Definition easing.cpp:146
float ease_in_out_cubic(float t)
Definition easing.cpp:40
float ease_in_back(float t)
Definition easing.cpp:140
float ease_out_sine(float t)
Definition easing.cpp:52
float ease_in_cubic(float t)
Definition easing.cpp:29
float ease_in_quad(float t)
Definition easing.cpp:13
float ease_in_sine(float t)
Definition easing.cpp:47
float ease_in_out_sine(float t)
Definition easing.cpp:57
float ease_out_elastic(float t)
Definition easing.cpp:101
float ease_out_expo(float t)
Definition easing.cpp:68
float ease_in_expo(float t)
Definition easing.cpp:63
float ease_in_bounce(float t)
Definition easing.cpp:134