Source

ArduinoProjects / Libraries / Animation / Animation.cpp

#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;
      }
    }
  }
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.