#pragma once #include "Common.h" #include class Animation { protected: static constexpr float EPSILON = 0.05; float duration, elapsed; std::function callback; bool loop; bool complete=false; public: //Animation(float, T, T*, std::function, bool); // lerp //Animation(float, std::vector, T*, std::function, bool); // discrete Animation(float, std::function, bool); //Animation() {}; virtual void step(float) = 0; virtual void cancel() = 0; bool isDone(); }; template class LerpAnimation: public Animation { T startvalue, endvalue; std::function write; void lerp(); public: ~LerpAnimation() { cancel(); } LerpAnimation(float, T, T, std::function, std::function, bool); //LerpAnimation() {}; void step(float) override final; void cancel() override final; }; template class DiscreteAnimation: public Animation { std::vector values; std::function write; float nonelapsed, timestep; int index; public: DiscreteAnimation(float, std::vector, std::function, std::function, bool); DiscreteAnimation() {}; ~DiscreteAnimation() { cancel(); } void step(float) override final; void cancel() override final; };