Source

ArduinoProjects / Libraries / Animation / Animation.cpp

Full commit
Jody McAdams 18d4383 



Jody McAdams ed8b507 
Jody McAdams 18d4383 

Jody McAdams ed8b507 
Jody McAdams 18d4383 









Jody McAdams ed8b507 

Jody McAdams 18d4383 



























Jody McAdams ed8b507 
Jody McAdams 18d4383 
Jody McAdams ed8b507 
Jody McAdams 18d4383 







Jody McAdams ed8b507 
Jody McAdams 18d4383 
Jody McAdams ed8b507 
Jody McAdams 18d4383 










#include "Animation.h"
#include "MathTypes.h"
#include "MathUtil.h"

  Animation::Animation(float* valueArray, int numValues, AnimMode mode, float animTime)
  {
    animDir = 1.0f;
	totalAnimTime = animTime;
    currT = 0.0f;
    animSpeed = 0.2f;
    numAnimValues = MAX_NUM_ANIM_VALUES;
    animMode = mode;
    
    SetValues(valueArray,numValues);
  }

  float Animation::CalcAnimVal()
  {
	const float lerpT = currT/totalAnimTime;
	const float animVal = CatmullRom_EvaluateCurve_F32(animValues,numAnimValues,lerpT);
	
	return animVal;
  }

  void Animation::SetValues(float* valueArray, int numValues)
  {
    //Safety check
    if(numValues > MAX_NUM_ANIM_VALUES)
    {
      return;
    }
    
    for(int i=0; i<numValues; ++i)
    {
      animValues[i] = valueArray[i];
    }
    
    numAnimValues = numValues;
  }
  
  void Animation::Update(float timeDelta)
  {
    switch(animMode)
    {
      case AnimMode_Wrap:
      {
        currT += animSpeed*timeDelta;
    
        if(currT >= totalAnimTime)
        {
          currT -= totalAnimTime;
        }
        
        break;
      }
      case AnimMode_PingPong:
      {
        currT += animSpeed*animDir*timeDelta;
        
        if(currT >= totalAnimTime)
        {
		  currT = totalAnimTime - (currT - totalAnimTime);
          animDir = -1.0f;
        }
        else if(currT <= 0.0f)
        {
          currT = -currT;
          animDir = 1.0f;
        }
        
        break;
      }
    }
  }