// // Created by martin on 12.11.21. // #ifndef ANIMTESTBED_ANIMSAMPLERNODE_H #define ANIMTESTBED_ANIMSAMPLERNODE_H #include "AnimNode.h" struct AnimSamplerNode : public AnimNode { AnimSamplerNode(AnimationController* animation_controller) : AnimNode(animation_controller), m_time_scale(1.f), m_anim_ratio(0.f), m_override_ratio(false){}; virtual ~AnimSamplerNode() {} ozz::animation::Animation* m_animation; float m_time_scale; float m_anim_ratio; bool m_override_ratio; ozz::animation::SamplingCache m_sampling_cache; void SetAnimation(ozz::animation::Animation* animation); virtual void Update(float dt) override { m_current_time += dt * m_time_scale; if (!m_override_ratio) { const float duration = m_animation->duration(); m_anim_ratio = fmodf((float)m_current_time / duration, 1.0f); } } virtual void Evaluate( ozz::vector* local_matrices) override; virtual void DrawDebugUi(); }; #endif //ANIMTESTBED_ANIMSAMPLERNODE_H