3template<size_t maxParameters>
4EasyEaseAnimator<maxParameters>::EasyEaseAnimator(InterpolationMethod interpMethod, float springConstant, float dampingConstant) {
5 this->interpMethod = interpMethod;
7 for (uint8_t i = 0; i < maxParameters; i++){
8 interpolationMethods[i] = interpMethod;
10 dampedSpring[i].SetConstants(springConstant, dampingConstant);
14template<size_t maxParameters>
15void EasyEaseAnimator<maxParameters>::SetConstants(uint16_t dictionaryValue, float springConstant, float damping){
16 for(uint16_t i = 0; i < currentParameters; i++){
17 if(dictionary[i] == dictionaryValue){
18 dampedSpring[i].SetConstants(springConstant, damping);
24template<size_t maxParameters>
25float EasyEaseAnimator<maxParameters>::GetValue(uint16_t dictionaryValue){
26 for(uint16_t i = 0; i < currentParameters; i++){
27 if(dictionary[i] == dictionaryValue){
28 return *parameters[i];
35template<size_t maxParameters>
36float EasyEaseAnimator<maxParameters>::GetTarget(uint16_t dictionaryValue){
37 for(uint16_t i = 0; i < currentParameters; i++){
38 if(dictionary[i] == dictionaryValue){
46template<size_t maxParameters>
47void EasyEaseAnimator<maxParameters>::AddParameter(float* parameter, uint16_t dictionaryValue, uint16_t frames, float basis, float goal){
48 if(currentParameters < maxParameters){
50 for(uint16_t i = 0; i < currentParameters; i++){
51 if(dictionary[i] == dictionaryValue){
58 this->basis[currentParameters] = basis;
59 this->goal[currentParameters] = goal;
60 parameters[currentParameters] = parameter;
61 parameterFrame[currentParameters] = 0.0f;
62 previousSet[currentParameters] = 0.0f;
63 dictionary[currentParameters] = dictionaryValue;
64 rampFilter[currentParameters].SetFrames(frames);
70template<size_t maxParameters>
71void EasyEaseAnimator<maxParameters>::AddParameterFrame(uint16_t dictionaryValue, float value){
72 for(uint16_t i = 0; i < currentParameters; i++){
73 if(dictionary[i] == dictionaryValue){
74 parameterFrame[i] = value;
80template<size_t maxParameters>
81void EasyEaseAnimator<maxParameters>::SetInterpolationMethod(uint16_t dictionaryValue, InterpolationMethod interpMethod){
82 for(uint16_t i = 0; i < currentParameters; i++){
83 if(dictionary[i] == dictionaryValue){
84 interpolationMethods[i] = interpMethod;
91template<size_t maxParameters>
92void EasyEaseAnimator<maxParameters>::Reset(){
93 for(uint16_t i = 0; i < currentParameters; i++){
94 *(this->parameters[i]) = basis[i];
98template<size_t maxParameters>
99void EasyEaseAnimator<maxParameters>::SetParameters(){//Used to set parameters but not update interpolation
100 for(uint16_t i = 0; i < currentParameters; i++){
101 float set = previousSet[i];
102 float fullRange = Mathematics::Map(set, basis[i], goal[i], 0.0f, 1.0f);
104 switch(interpolationMethods[i]){
106 *parameters[i] = Mathematics::CosineInterpolation(basis[i], goal[i], fullRange);
109 *parameters[i] = Mathematics::BounceInterpolation(basis[i], goal[i], fullRange);
112 *parameters[i] = dampedSpring[i].GetCurrentPosition();
115 *parameters[i] = set;
121template<size_t maxParameters>
122void EasyEaseAnimator<maxParameters>::Update(){
123 //parameterFrame is the target, if no parameter is given for the frame, it will move towards the basis value
124 for(uint16_t i = 0; i < currentParameters; i++){
126 float set = rampFilter[i].Filter(parameterFrame[i]);
127 float fullRange = Mathematics::Map(set, basis[i], goal[i], 0.0f, 1.0f);
129 previousSet[i] = set;
131 //basis at 0.5f does not go to 0.5f but to zero with linear
132 //when using set, it defaults the blush is shown the inverted 1.0f to 0.0f does not work
134 switch(interpolationMethods[i]){
136 *parameters[i] = Mathematics::CosineInterpolation(basis[i], goal[i], fullRange);
139 *parameters[i] = Mathematics::BounceInterpolation(basis[i], goal[i], fullRange);
142 *parameters[i] = dampedSpring[i].Calculate(parameterFrame[i], 0.25f);
145 *parameters[i] = fullRange;
149 parameterFrame[i] = basis[i];