RavEngine
Loading...
Searching...
No Matches
Tween.hpp
1#pragma once
2#include <tweeny.h>
3#include "mathtypes.hpp"
4#include "Function.hpp"
5#include "App.hpp"
6
7namespace RavEngine{
8
9namespace TweenCurves{
10 //template wrappers around Tweeny
11 template<typename base>
12 struct TweenCurve : public base{
13 //enable this class to be called / converted to std::function
14 template<typename T>
15 constexpr inline T operator()(float pos, T a, T b) const{
16 return base::template run<float>(pos, a,b);
17 }
18 };
19 static constexpr struct DefaultCurve : public TweenCurve<tweeny::easing::defaultEasing>{} DefaultCurve;
20 static constexpr struct SteppedCurve : public TweenCurve<tweeny::easing::steppedEasing>{} SteppedCurve;
21 static constexpr struct LinearCurve : public TweenCurve<tweeny::easing::linearEasing>{} LinearCurve;
22 static constexpr struct QuadraticInCurve : public TweenCurve<tweeny::easing::quadraticInEasing>{} QuadraticInCurve;
23 static constexpr struct QuadraticOutCurve : public TweenCurve<tweeny::easing::quadraticOutEasing>{} QuadraticOutCurve;
24 static constexpr struct QuadraticInOutCurve : public TweenCurve<tweeny::easing::quadraticInOutEasing>{} QuadraticInOutCurve;
25 static constexpr struct CubicInCurve : public TweenCurve<tweeny::easing::cubicInEasing>{} CubicInCurve;
26 static constexpr struct CubicOutCurve : public TweenCurve<tweeny::easing::cubicOutEasing>{} CubicOutCurve;
27 static constexpr struct CubicInOutCurve : public TweenCurve<tweeny::easing::cubicInOutEasing>{} CubicInOutCurve;
28 static constexpr struct QuarticInCurve : public TweenCurve<tweeny::easing::quarticInEasing>{} QuarticInEasing;
29 static constexpr struct QuarticOutCurve : public TweenCurve<tweeny::easing::quarticOutEasing>{} QuarticOutCurve;
30 static constexpr struct QuarticInOutCurve : public TweenCurve<tweeny::easing::quarticInOutEasing>{} QuarticInOutCurve;
31 static constexpr struct QuinticInCurve : public TweenCurve<tweeny::easing::quinticInEasing>{} QuinticInCurve;
32 static constexpr struct QuinticOutCurve : public TweenCurve<tweeny::easing::quinticOutEasing>{} QuinticOutCurve;
33 static constexpr struct QuinticInOutCurve : public TweenCurve<tweeny::easing::quinticInOutEasing>{} QuinticInOutCurve;
34 static constexpr struct SinusoidalInCurve : public TweenCurve<tweeny::easing::sinusoidalInEasing>{} SinusoidalInCurve;
35 static constexpr struct SinusoidalOutCurve : public TweenCurve<tweeny::easing::sinusoidalOutEasing>{} SinusoidalOutCurve;
36 static constexpr struct SinusoidalInOutCurve : public TweenCurve<tweeny::easing::sinusoidalInOutEasing>{} SinusoidalInOutCurve;
37 static constexpr struct ExponentialInCurve : public TweenCurve<tweeny::easing::exponentialInEasing>{} ExponentialInCurve;
38 static constexpr struct ExponentialOutCurve : public TweenCurve<tweeny::easing::exponentialOutEasing>{} ExponentialOutCurve;
39 static constexpr struct ExponentialInOutCurve : public TweenCurve<tweeny::easing::exponentialInOutEasing>{} ExponentialInOutCurve;
40 static constexpr struct CircularInCurve : public TweenCurve<tweeny::easing::circularInEasing>{} CircularInCurve;
41 static constexpr struct CircularOutCurve : public TweenCurve<tweeny::easing::circularOutEasing>{} CircularOutCurve;
42 static constexpr struct CircularInOutCurve : public TweenCurve<tweeny::easing::circularInOutEasing>{} CircularInOutCurve;
43 static constexpr struct BounceInCurve : public TweenCurve<tweeny::easing::bounceInEasing>{} BounceInCurve;
44 static constexpr struct BounceOutCurve : public TweenCurve<tweeny::easing::bounceOutEasing>{} BounceOutCurve;
45 static constexpr struct BounceInOutCurve : public TweenCurve<tweeny::easing::bounceInOutEasing>{} BounceInOutCurve;
46 static constexpr struct ElasticInCurve : public TweenCurve<tweeny::easing::elasticInEasing>{} ElasticInCurve;
47 static constexpr struct ElasticOutCurve : public TweenCurve<tweeny::easing::elasticOutEasing>{} ElasticOutCurve;
48 static constexpr struct ElasticInOutCurve : public TweenCurve<tweeny::easing::elasticOutEasing>{} ElasticInOutCurve;
49 static constexpr struct BackInCurve : public TweenCurve<tweeny::easing::backInEasing>{} BackInCurve;
50 static constexpr struct BackOutCurve : public TweenCurve<tweeny::easing::backOutEasing>{} BackOutCurve;
51 static constexpr struct BackInOutCurve : public TweenCurve<tweeny::easing::backOutEasing>{} BackInOutCurve;
52}
53 template<typename ...Floats>
54 class Tween {
55 protected:
56 tweeny::tween<Floats...> anim;
57 typedef Function<void(Floats...)> stepfunc;
58
59 public:
60 Tween(){};
61
67 Tween(const stepfunc& step, Floats ... initialValue){
68 anim = tweeny::from(initialValue...).onStep([=](Floats... values) -> bool{
69 step(values...);
70 return false;
71 });
72 }
73
74 Tween(const Tween& other){
75 anim = other.anim;
76 }
77
78 //copy assignment
79 constexpr inline Tween& operator=(const Tween& other) {
80 if (&other == this) {
81 return *this;
82 }
83 anim = other.anim;
84 return *this;
85 }
86
93 template<typename T>
94 constexpr inline Tween& AddKeyframe(decimalType time, T interpolation, Floats ... values){
95 anim.to(values...).during(time * GetApp()->evalNormal).via(interpolation);
96 return *this;
97 }
98
103 constexpr inline void Step(decimalType scale){
104 anim.step((float)scale / anim.duration());
105 }
106
107 constexpr inline void Seek(float pos){
108 anim.seek(pos);
109 }
110
111 constexpr inline float GetProgress() const{
112 return anim.progress();
113 }
114 };
115}
Definition Tween.hpp:54
Tween(const stepfunc &step, Floats ... initialValue)
Definition Tween.hpp:67
constexpr void Step(decimalType scale)
Definition Tween.hpp:103
constexpr Tween & AddKeyframe(decimalType time, T interpolation, Floats ... values)
Definition Tween.hpp:94
Definition concurrentqueue.h:747
Definition Animation.hpp:6
Definition Tween.hpp:12