#include "AnimationController.h" AnimationController::AnimationController(Animation* anim, std::function finishedCallback, bool reverse) : mAnimation(anim), mFinishedCallback(finishedCallback), mReverse(reverse), mTime(0) { } AnimationController::~AnimationController() { if(mFinishedCallback) mFinishedCallback(); delete mAnimation; } void AnimationController::update(int deltaTime) { mTime += deltaTime; float t = (float)mTime / mAnimation->getDuration(); if(t > 1.0f) t = 1.0f; else if(t < 0.0f) t = 0.0f; mAnimation->apply(mReverse ? 1.0f - t : t); if(t == 1.0f) { if(mFinishedCallback) { // in case mFinishedCallback causes us to be deleted, use a copy auto copy = mFinishedCallback; mFinishedCallback = nullptr; copy(); } } }